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

场景:

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

对于http

https

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

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

问题

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

所以,
有没有办法在mod_ssl之前访问mod_rewrite
要么
我必须购买一个单独的证书来摆脱这个?

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

不这样做实际上是一个安全问题,因为攻击者可以在证书validation之前重写和redirect客户端。 即使TLS升级是在HTTP( RFC 2817 ,它几乎从来没有使用/支持,而不是https ),你仍然希望redirect来自可信实体。

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

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