有没有办法在“mod_ssl”之前访问“mod_rewrite”?

Thi*_*key 4 mod-rewrite ssl https apache-2.2

设想:

我有 2 个域:thinkingmonkey.me& thinkingmonkey.com。整个网站都在 下访问https。从通用名称的 CA 购买了证书thinkingmonkey.me

对于http

  • www.thinkingmonkey.comthinkingmonkey.comwww.thinkingmonkey.me有一个虚拟主机,并使用 _mod_rewrite_ 规则重定向到https://thinkingmonkey.me

  • thinkmonkey.me有其单独的虚拟主机。

  • 一切正常。

情况也是如此https

  • www.thinkingmonkey.comthinkingmonkey.comwww.thinkingmonkey.com有一个虚拟主机,并使用 _mod_rewrite_ 规则重定向到https://thinkingmonkey.me

  • thinkmonkey.me有其单独的虚拟主机。

问题

  • 现在,如果访问https://www.thinkingmonkey.comhttps://thinkingmonkey.com
    • mod_ssl起作用并且在mod_rewrite重写https://thinkingmonkey.me之前发生 TLS 握手。
    • 由于证书中的通用名称在thinkingmonkey.me下,此连接不受信任警告会在浏览器中显示。
    • 除非我通过接受证书来完成握手,否则它不会被重定向到thinkingmonkey.me。这很烦人。

那么,
有没有办法访问mod_rewrite之前mod_ssl
或者
我是否必须购买单独的证书才能摆脱这种情况?

Bru*_*uno 7

不,HTTPS 是基于 TLS/SSL 的 HTTP(请参阅RFC 2818),它在发送任何 HTTP 流量之前首先建立 SSL/TLS 连接。mod_rewrite将始终在 SSL/TLS 连接建立后应用。

不这样做实际上是一个安全问题,因为攻击者可以在验证证书之前重写和重定向客户端。即使 TLS 升级在 HTTP 内(RFC 2817,实际上从未使用/支持,也不是https),您仍然希望重定向来自受信任的实体。

解决此问题的方法是使用具有多个主题备用名称 (SAN) DNS 条目的证书,每个主机名一个,或多个证书(在这种情况下,每个证书可能也需要一个 IP 地址,除非您愿意使用服务器名称指示)。