我有一个自主托pipe的WordPress博客。 只要有可能,我尝试使用SSL和X.509客户端证书身份validation来保护到Web应用程序的pipe理界面。 我所有的这些工作正常工作,如phpMyAdmin,所以与Web服务器的技术位都到位。
我的托pipe设置是:
我在VPS上运行所有这些,所以我只有一个外部IP。 我有几个其他的SSL网站在这个盒子上运行:一个在默认端口上,另一个在备用端口上(这样每个都可以有与他们的主机名匹配的不同的证书)。
我的意图是有两个服务器configuration块:
我面临的问题是Wordpress不喜欢在两个不同的端口上访问。 每当我尝试去https://blog.domain.com:8443 ,它将我redirect到https://blog.domain.com ,这是一个完全不同的虚拟主机(服务器上的主站点,运行在默认港口)。 然后,我在浏览器中得到一个证书名称错误,即使我重写了警告,我不再与WordPress的网站说话。
博客的主要URL存储在wp_options表中:
mysql> select option_value from wp_options where option_name = 'siteurl'; +------------------------------+ | option_value | +------------------------------+ | http://blog.domain.com | +------------------------------+ 1 row in set (0.00 sec)
MySQL的>
所以它不是像我可以做的主要URL设置为https://blog.domain.com:8443的博客文件的第二个副本,并以这种方式访问pipe理界面。
有任何想法吗?
UPDATE
Ater玩了一段时间的build议答案,我得出结论,不可能做到我想要的东西。 在wordpress中启用这些function会导致用户向/ wp-(admin | login | register)发出SSL请求,如果我在SSL端需要X.509客户端证书,他们不能这样做。
我想出的最好的解决scheme是设置一个带有证书authentication的SSL前端,它只是将请求代理回到非SSL nginx。 即使如此,我也无法完全切断对/ wp-admin的非SSL访问,因为用户注册和configuration文件pipe理中使用的大部分CSS和Javascript都来自该目录。
我可以允许通过HTTP访问/ wp-admin下的CSS,图像和Javascript,只需要PHP脚本的SSL访问,但是用户不能修改他们的configuration文件(配色scheme,显示名称等)。下一步将是确定普通用户所需的PHP脚本的子集,并让他们通过HTTP,而拒绝其余的,但是,我是一个奴隶wordpress开发团队,如果他们重组的东西。
我想这一个归结为训练自己只能通过SSLpipe理博客,即使服务器允许我通过普通的HTTP进行操作。
这可能会帮助你,如wordpress 2.6,你可以强制pipe理和login区域被禁用。
http://codex.wordpress.org/Administration_Over_SSL
define('FORCE_SSL_LOGIN', true); define('FORCE_SSL_ADMIN', true);
有时,您希望整个wp-admin使用https协议通过安全连接运行。 从概念上讲,这个过程是这样的:
设置两个具有相同URL(博客URL)的虚拟主机,一个安全,另一个不是。 在安全的虚拟主机上,设置一个重写规则,将所有非wp-adminstream量传送到不安全的站点。 在不安全的虚拟主机上,设置一个重写规则,将所有到wp-admin的stream量传送到安全主机。 放入一个filter(通过一个插件),过滤wp-admin中的链接,以便激活后,pipe理链接被重写为使用https,并且编辑cookie只能通过encryption的连接工作。
他们提到的插件叫做admin ssl 。
我正面临类似的问题,我用了很长一段时间的WordPress,并希望强制/ WP-admin /通过SSL工作。
所以我做了 :
RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^/(wp-login.php|wp-admin/) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
这几乎工作。 当我去http://网站/ wp-admin /我通过SSLredirect到wp-login.php,但在login过程后,我被redirect到https://website/http://website/wp-admin/ (这不是拼写错误),因为wordpress使用内部redirect,这不符合重写规则。
通过加载http://网站/ wp-admin /再次我被redirect到https:// website / wp-admin /,并且所有工作正常。
但是在最近的WordPress发行版之前还有另一个问题,在wp-login.php页面上,login表单动作被设置为http://website/wp-login.php 。 所以login信息被发送清楚。 (所以需要修补wp-login.php)
最近(自2.6.0)WordPress发布添加一个FORCE_SSL_LOGIN设置。 把define ('FORCE_SSL_LOGIN','true'); 在wp-config.php中将使得wp-login.php上的表单动作变为https://website/wp-login.php (在wp-login.php中稍加修改就可以添加:8443)
所以`FORCE_SSL_LOGIN +重写它是安全的,但我仍然需要在login过程后重新加载wp-admin url。
2.6.0也添加了FORCE_SSL_ADMIN ,但是当我把它设置为true时(或者用我的重写configuration)我无限期地redirect到http://website/wp-admin/因此你可以尝试设置FORCE_SSL_LOGIN为true并且修补wp- login.php使用端口8443,你也可以尝试FORCE_SSL_ADMIN(我不知道为什么它不适合我,可能会为你)
Mhhh …我有一个怀疑,这将需要捣毁wordpress分开wp-admin部分从主站点,据我所知,这是不是devise。
你能不能设置一个安全的SSL虚拟主机(具有相同的文件根目录),然后通过.htaccess魔术(我已经做过)强制所有/ WP – pipe理请求通过HTTPS而不是http?
这显然不会将整个pipe理部分分开,但至less意味着未encryption的stream量已停止。