对于我们真正需要能够与之通信的一个特定网站,我们开始收到常见的 SSL 握手错误:
ERR_SSL_VERSION_OR_CIPHER_MISMATCH
不过,我已经确认这不是 SSLv3 问题。该网站符合 PCI 标准,因此它使用的是最新的 SSL 设置。openssl
报告如下:
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-SHA256
最近所做的唯一改变是从密码套件中删除了几个密码;他们专门在服务器端禁用了这些TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
密码TLS_RSA_WITH_AES_128_CBC_SHA
。
我无法理解的是,为什么 Chrome 会抱怨这个特定的协议版本和密码套件;在我看来,这完全没问题。该网站在最近的 IE 中打开没有问题(IE 页面信息与openssl
ios 报告相符),但在 Chrome 和 Firefox 中失败。
有没有办法找出 Chrome 的协议/密码设置想它是从服务器获取的,或者为什么它判定它们无效?
答案1
有没有办法找出 Chrome 认为从服务器获取了什么协议/密码设置
TLS 并非如此。在 TLS 中,客户端启动握手并包含它愿意从服务器接受的所有密码。如果服务器未发现与其自己的密码有任何重叠,那么在最好的情况下,它会通知客户端此特定问题,在最坏的情况下,它会直接关闭连接。
在您的案例中,您会收到 ERR_SSL_VERSION_OR_CIPHER_MISMATCH,这意味着服务器不支持客户端提供的任何密码。我不知道您在服务器上配置了哪些密码,但 SSLLabs 会向您显示哪些Chrome 提供密码。而 ECDHE-RSA-AES128-SHA256 (TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) 不是其中之一。
它可能适用于其他浏览器,因为它们为服务器提供不同的密码,即Windows 10 上的 IE 11支持此特定密码火狐不支持。Chrome 和 Firefox 都提供 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,但这些已从服务器的密码集中删除,因此之前可以使用。
要解决此问题,您应该将服务器配置为尽可能多地接受安全的密码。请参阅推荐配置在 Mozilla Wiki 上。