我的Nginx服务器拥有一个非常好的SSL证书,可以在大多数浏览器中完美运行。服务器是https://live.evmote.com。你可以"击中"服务器转到https://live.evmote.com/primus。 SSL Cert检查位于:https://www.ssllabs.com/ssltest/analyze.html?d=live.evmote.com
到目前为止,这么好。问题特别出现在Tesla Model S浏览器(车载浏览器)上。它提供了一个" Bad certificate"错误。特斯拉浏览器非常糟糕,并且支持不完整。无法查看证书链或从特斯拉调试问题。它更像是设备而非计算机。 以下是特斯拉的SSL支持: http://i.imgur.com/EbIrClM.jpg
在Nginx服务器上,我在日志中收到此错误: SSL3_GET_CLIENT_HELLO:没有共享密码
现在,从Tesla SSL报告和服务器报告中可以清楚地看到,共享密码。我希望他们会在这个上握手: TLS_RSA_WITH_AES_256_CBC_SHA(0x35)
我不确定如何从此处排除故障。
谢谢, 莱恩
答案 0 :(得分:2)
错误消息可能会产生误导。绝对存在的问题是浏览器不支持SNI,但您的网站需要它。至少它仅为支持SNI的浏览器提供有效证书(对于live.evmote.com),所有其他人都获得自签名通配符证书,浏览器不会接受正确的证书验证。
答案 1 :(得分:0)
我们在 Java 客户端遇到了类似的问题。根本原因是在 SSL 上下文 (io.netty.handler.ssl.SslContext) 中显式设置协议:
val ctx = io.netty.handler.ssl.SslContextBuilder.forClient()
...
.protocols("SSLv2Hello,TLSv1.2,TLSv1.3".split(","))
.build()
准确地说是 SSLv2Hello
,这里既不应该声明也不应该使用它。
很遗憾,我们无法控制所有客户。所以进一步调查发现这个问题是在OpenSSL升级到1.1.*后出现的。
一旦我们将 OpenSSL 降级到 1.0.*,它就成功了。 Nginx 1.18.0 + OpenSSL 1.0.2u 可以处理与 SSLv2Hello 的握手而不会出错,并且可以使用最高协议。