Nginx错误:"没有共享密码"。但是这里有

时间:2015-11-19 14:01:58

标签: ssl nginx tesla

我的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)

我不确定如何从此处排除故障。

谢谢, 莱恩

2 个答案:

答案 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 的握手而不会出错,并且可以使用最高协议。