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

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

设想:

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

为了http

  • www.thinkingmonkey.comthinkingmonkey.com& www.thinkingmonkey.me拥有单个虚拟主机并重定向至https://thinkingmonkey.me使用 _mod_rewrite_ 规则。

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

  • 一切正常。

情况也一样https

  • IEwww.thinkingmonkey.comthinkingmonkey.com& www.thinkingmonkey.com拥有单个虚拟主机并重定向至https://thinkingmonkey.me使用 _mod_rewrite_ 规则。

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

问题

  • 现在,如果https://www.thinkingmonkey.com或者https://thinkingmonkey.com被访问,
    • mod_sslTLS 握手发生在mod_rewrite重写为https://thinkingmonkey.me
    • 由于证书中的通用名称属于thinkingmonkey.me当前连接不可信任浏览器中显示警告。
    • 除非我通过接受证书完成握手,否则它将不会被重定向到thinkingmonkey.me. 这很烦人。

所以,
有没有办法mod_rewrite之前访问mod_ssl
或者
我是否必须购买单独的证书才能摆脱这个问题?

答案1

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

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

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

答案2

不,没有办法做到这一点。考虑找一个SAN 证书包括两个名称。如果您获得 2 个证书,则需要 2 个 IP 地址。

相关内容