我的 Web 服务器(仅托管内部网站)有两个证书。一个是用于子域的通配符证书,另一个是用于内部类似工具的服务器证书。
- 通配符证书:
*.internal.domain.com
- 服务器证书:
server.internal.domain.com
我最近刚刚使用通配符证书将我们的第一个仅支持 https 的站点添加到服务器。它必须使用不同的端口:8443
,因为服务器证书已绑定到443
。
当导航到时,https://mysite.internal.domain.com/
网站加载失败并抛出安全警告:NET::ERR_CERT_COMMON_NAME_INVALID
。对我来说这似乎是意料之中的,因为浏览器正在尝试使用端口443
和服务器证书。
如果您导航至 ,该网站运行正常https://mysite.internal.domain.com:8443
。
我尝试编写一条重写规则,该规则可以接受任何请求并将其重写到端口8443
作为测试,但它似乎不起作用:
<rewrite>
<rules>
<rule name="To 8443" patternSyntax="Wildcard">
<match url="*" />
<action type="Rewrite"
url="https://mysite.internal.domain.com:8443/{R:0}"
appendQueryString="false" />
</rule>
</rules>
</rewrite>
NET::ERR_CERT_COMMON_NAME_INVALID
当我浏览该网站时仍然出现错误。
有人知道我如何才能让用户请求https://mysite.internal.domain.com
并重定向到吗https://mysite.internal.domain.com:8443
?
答案1
不幸的是,您的重定向不会起作用。当浏览器尝试导航到时https://mysite.internal.domain.com/
,浏览器会注意到通用名称和主机名不匹配(如您所说)并在重定向生效之前断开连接。要使重定向起作用,需要成功协商 HTTPS 连接,以便 Web 服务器可以向浏览器发送响应以告诉它重定向到另一个 URL。由于 HTTPS 连接因 SSL 错误而失败,因此它永远不会走到那一步。这是设计使然,因为如果浏览器认为所出示的证书存在问题,继续与 Web 服务器通信会带来安全风险,即使只是被告知重定向到其他地方。
听起来你尝试采用的方法可能不是最合适的做法,也许值得退一步考虑。如果不详细了解你的环境,很难提供确切的解决方案,但以下建议可能会有所帮助:
- 服务器是否有其他可用的 IP 地址?如果有,您可以将站点绑定
mysite.internal.domain.com
到此 IP 地址,更新 DNS 并将通配符证书也绑定到此站点。这样您就可以将站点保留在 443 上,这样会更简洁。 - 通配符证书也对有效
server.internal.domain.com
,因此您可以将通配符证书用于所有内容,除非有其他特殊原因需要继续使用该server.internal.domain.com
证书。 - 使用 SSL 时,可以使用通配符证书将多个站点绑定到同一端口(但有一些限制)。请参阅这个问题了解更多信息。
答案2
处理重写规则后正在建立 HTTPS 通道。
想想看,使用 HTTPS 时,地址、HTTP 方法以及 HTTP 标头和正文中的其他所有内容都会被加密,并且重写规则会使用它们。因此,HTTPS 握手必须在请求到达规则之前完成。
如果您想允许用户从 开始https://mysite.internal.domain.com/
并重定向到https://mysite.internal.domain.com:8443
,那么除了使端口 443 上的 SSL 证书对域有效之外,没有其他办法。
我可以为您想到以下两种方法:
对两个绑定都使用通配符证书,因为据我所知,它对两者都有效。
升级到 IIS 8.0 并使用 SNI(服务器名称指示 -http://en.wikipedia.org/wiki/服务器名称指示) 这允许您对绑定到相同 IP 和端口但仅在主机名上不同的不同网站使用不同的 SSL 证书。
答案3
如果您使用 Google Chrome 进行测试,请确保您的证书具有通用名称和主题备用名称,并填写了您的网站名称 (mysite.internal.domain.com)。Chrome 的错误无法准确指出问题所在。这将帮助您绕过 SSL 警告。请发布遇到的任何进一步错误消息
答案4
也许可以选择先https://mysite.internal.domain.com
监听HTTP
,然后将其重定向到另一个?请记住,如果尚未安装 URL 重写模块,则可能需要安装它。