2

我的 Nginx 服务器有一个 SSL 证书,看起来非常好,并且可以在大多数浏览器中完美运行。服务器是https://live.evmote.com。您可以通过访问https://live.evmote.com/primus来“访问”服务器。SSL 证书检查在这里: https ://www.ssllabs.com/ssltest/analyze.html?d=live.evmote.com

到目前为止,一切都很好。问题出在特斯拉 Model S 浏览器(车载浏览器)上。它给出了“错误的证书”错误。众所周知,Tesla 浏览器很糟糕,并且支持不完整。无法从 Tesla 查看证书链或调试问题。它更像是一个电器,而不是一台电脑。这是特斯拉内部的 SSL 支持:http: //i.imgur.com/EbIrClM.jpg

在 Nginx 服务器上,我在日志中收到此错误: SSL3_GET_CLIENT_HELLO:no shared cipher

现在,从 Tesla SSL 报告和服务器报告中可以清楚地看出,存在共享密码。我希望他们会在这个上握手:TLS_RSA_WITH_AES_256_CBC_SHA (0x35)

我不确定如何从这里进行故障排除。

谢谢,瑞安

4

2 回答 2

3

错误消息可能具有误导性。绝对的问题是浏览器不支持 SNI,但您的网站需要它。至少它只为支持 SNI 的浏览器提供有效的证书(对于 live.evmote.com),所有其他人都获得一个自签名的通配符证书,该证书不会被进行适当证书验证的浏览器接受。

于 2015-11-20T06:48:51.083 回答
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 处理握手而不会出错,并且可以使用最高的协议。

于 2021-07-06T14:05:57.117 回答