经过一些互联网搜索,我确定 SSL 连接之前发送的 HTTP 请求会指示浏览器域名注册的 IP 地址。因此,任何强制重定向随后都将使用原始证书。
^ 我的上述理解正确吗?有人能告诉我这在 HTTP 请求中具体发生在哪里吗?
我有一台 Apache2 服务器,正在强制将旧的 https 域 301 重定向到新的 https 域。无论我尝试什么设置,这都会导致问题。
如果我在重定向上使用旧证书:这会导致在新域上使用旧证书。
如果我在重定向上使用新证书:这会导致在旧域上使用新证书。
两者都导致 SSL 安全异常。
我正在使用没有 SAN 功能的标准通配符证书。
现在,我必须设置一个新服务器来执行此操作,而不会从浏览器收到安全异常。
答案1
...我已经确定 SSL 连接之前发送的 HTTP 请求会向浏览器指示域名注册的 IP 地址。
这是错误的。HTTP 请求不会确定 URL/主机名和 IP 地址之间的关系。这是由 DNS 完成的。但如果重定向到同一个主机名,则通常会使用相同的 IP 地址。但如果 DNS 中多个 IP 地址与同一个主机名相关联,则可能是不同的 IP 地址。
因此,任何强制重定向随后都将使用原始证书。
如果您从 HTTP 重定向到 HTTPS,则没有原始证书,因为 HTTP 没有证书,只有 HTTPS。如果您从主机 A 上的 HTTPS 重定向到主机 B 上的 HTTPS,则第一次访问(对主机 A)必须产生主机 A 的证书,第二次请求(对主机 B)必须产生主机 B 的证书。
我有一台 Apache2 服务器,正在强制将旧的 https 域 301 重定向到新的 https 域。无论我尝试什么设置,这都会导致问题。
在这种情况下,您将从一个主机名重定向到另一个主机名。目标 IP 地址可能不同,但如果两个名称托管在同一系统上,则也可能相同。但这实际上并不重要。
重要的是URL 中的主机名必须与证书的主题匹配。重定向会更改 URL,因此可能会更改 URL 的主机名。无论是否涉及不同的 IP,都没有关系:如果 URL 中的主机名与证书的主题不匹配,则验证将失败。
因此您需要的是:
- 拥有包含两个主机名(即重定向的源主机名和重定向到的主机名)的证书。对两个主机名都使用此证书。
- 或者为每个主机名设置不同的证书,以便证书与服务器的主机名匹配。如果两个主机名都使用同一个 IP 地址,那么客户端需要支持信噪比所有当前浏览器都这样做,但并非所有机器人或其他工具/库都这样做。
答案2
重定向不应该是这里的问题。请尝试禁用重定向并在旧域上放置静态文件。您仍然遇到证书问题吗?
尝试这两个域名SSL实验室并确保没有重大问题。
两个域名都应该有自己的证书。在非常老旧的浏览器上,如果没有 SNI(服务器名称指示),您将需要两个 IP 来进行此设置。