拥有附加域的托管帐户。目录结构如下:
/public_html (main site is hosted in this directory)
/public_html/secondary_site/ (secondary site is hosted in this directory.
我在public_html文件夹中使用以下.htaccess文件(并且在secondary_site文件夹中没有.htaccess文件):
RewriteEngine On
# BEGIN Domain to folder mapping
# pointing HTTPS secondarysite.com to https://primarysite.com/secondarysite/
RewriteCond %{SERVER_PORT} ^443$
ReWriteCond %{HTTP_HOST} primarysite.com
ReWriteCond %{REQUEST_URI} !primarysite/
ReWriteRule ^(.*)$ https://primarysite.com/secondarysite/$1 [L]
# pointing HTTP secondarysite.com to http://primarysite.com/secondarysite/
RewriteCond %{SERVER_PORT} ^80$
ReWriteCond %{HTTP_HOST} secondarysite.com
ReWriteCond %{REQUEST_URI} !secondarysite/
ReWriteRule ^(.*)$ http://primarysite.com/secondarysite/$1 [L]
# END Domain to folder mapping
第二条规则适用于非安全连接,它正确转发到public_html / secondary_site目录。
然而,当我尝试安全地连接到secondarysite.com时,我会收到警告页面的说明:
您试图访问secondarysite.com,但实际上是您 到达服务器,将自己标识为primarysite.com。这可能是 由服务器上的错误配置或更多内容引起的 严重。您网络上的攻击者可能会试图让您进入 访问secondarysite.com的假(并且可能有害)版本。
如果我点击"我明白了,继续"按钮,然后它将我带到public_html / secondary_site的正确的SSL安全目录。 SSL锁定是绿色且快乐。
为什么这个.htaccess文件没有捕获对secondarysite的请求并重新写入primarysite结构,然后由于域名不匹配而有机会对错误的证书进行修改?
答案 0 :(得分:0)
(这或多与this question中的问题大致相同,所以我会从那里调整自己的答案。)
HTTPS是基于TLS / SSL的HTTP(请参阅RFC 2818),它首先在发送任何HTTP流量之前建立SSL / TLS连接。在建立SSL / TLS连接后,任何重定向(通过mod_rewrite
,自定义PHP代码或其他)都将始终适用。
不这样做实际上是一个安全问题,因为攻击者可以在证书验证之前重写并重定向客户端。
如果您要从https://secondarysite.com
重定向到https://primarysite.com
,则https://secondarysite.com
获取的证书必须对secondarysite.com
有效(然后,为{{1}获取的证书}}必须对https://primarysite.com
)有效。
(如果两个主机在同一个IP地址上提供服务,则可以使用具有服务器名称指示的两个不同证书,但并非所有客户端都必须支持它。)
最简单的方法是获取对primarysite.com
和secondarysite.com
都有效的证书。这可以使用具有多个主题备用名称条目的单个证书来完成。