使用多域 SSL SAN 证书无法在 Chrome 中建立 wss websocket 连接

Posted

技术标签:

【中文标题】使用多域 SSL SAN 证书无法在 Chrome 中建立 wss websocket 连接【英文标题】:Fail to make wss websocket connection in Chrome, with multi domain SSL SAN certificate 【发布时间】:2020-01-29 13:58:46 【问题描述】:

有人可以帮我理解以下内容并提出可能的解决方法吗?

问题:使用多域 (SAN) SSL 证书时,Chrome 浏览器中的安全 websocket (wss) 连接失败

详细信息:我们有一个多域 SSL SAN 证书,例如 webapp.example.com 和 websocket.example.com。 https://webapp.example.com/ 页面正确加载(浏览器根据 SAN 证书正确验证了域,并显示“锁定”图标以指示连接是安全的)。但是,该页面上的上述 Web 应用程序也尝试与 wss://websocket.example.com/ 建立连接。此连接因 ERR_CERT_COMMON_NAME_INVALID 而失败。

失败的弱假设:这个错误可能是因为

    在将 webapp.example.com 验证为 SAN 证书中的有效域后,浏览器首先打开到 https://webapp.example.com 的 SSL 连接 与 wss://websocket.example.com 建立连接时,名称“websocket.example.com”与之前已验证的域 (webapp.example.com) 不匹配。

问题:是否有可能做到这一点?如果是,怎么做?

【问题讨论】:

【参考方案1】:

你的假设是错误的。证书验证始终针对当前访问的 URL 中的域进行。即使提供的证书相同,它也不是基于先前访问的某个 URL 完成的。

更有可能是你访问的域实际上并不包含在多域证书中。请注意,证书中的webapp.example.comexample.com 条目不包括URL 中的websocket.example.com 或类似内容。

【讨论】:

您好,Steffen,感谢您的回答。我对我的弱假设也不是很有信心 :) 但是 SAN 证书确实包括这两个域。因此,我猜测特定的 Chrome 浏览器或一般的浏览器无法处理网页中的这种混合使用。我试图查看 Chromium 的实现,但要找到这段代码并不容易。关于如何进一步进行的任何想法? @vsv:我很确定这不是 Chrome 中的错误,因为您所描述的设置并不罕见。如果你能提供一个设置来重现这个问题,我可以仔细看看。 感谢您提供帮助。这发生在具有受限访问权限的客户设置上。如果我们能够在其他地方复制它,我会回复。

以上是关于使用多域 SSL SAN 证书无法在 Chrome 中建立 wss websocket 连接的主要内容,如果未能解决你的问题,请参考以下文章

如何申请多域名SSL证书?

单域名SSL证书和多域名SSL证书有什么区别?

企业型多域名SSL证书申请指南

GeoTrust OV多域名型SSL证书多少钱?

Thawte SSL Web Server 多域型SSL证书

什么是多域名ssl证书和软件签名证书?