Nginx error: "No shared cipher". But there are
Nginx error: "No shared cipher". But there are
我的 Nginx 服务器有一个 SSL 证书,看起来非常好,并且在大多数浏览器中都能完美运行。服务器是 https://live.evmote.com . You can "hit" the server by going to https://live.evmote.com/primus 。
SSL 证书检查在此处:https://www.ssllabs.com/ssltest/analyze.html?d=live.evmote.com
到目前为止,还不错。问题特别出在 Tesla Model S 浏览器(车载浏览器)上。它给出了 "Bad certificate" 错误。 Tesla 浏览器是出了名的糟糕并且支持不完整。无法从特斯拉查看证书链或调试问题。它更像是一个设备而不是一台计算机。
这是 Tesla 内部的 SSL 支持:
http://i.imgur.com/EbIrClM.jpg
在 Nginx 服务器上,我在日志中收到此错误:
SSL3_GET_CLIENT_HELLO:no 共享密码
现在,从 Tesla SSL 报告和服务器报告中可以清楚地看出,存在共享密码。我希望他们会就此握手:
TLS_RSA_WITH_AES_256_CBC_SHA (0x35)
我不确定如何从这里进行故障排除。
谢谢,
瑞安
错误消息可能具有误导性。绝对有问题的是浏览器不支持 SNI,但您的网站需要它。至少它只为支持 SNI 的浏览器提供有效证书(live.evmote.com),所有其他浏览器都会获得一个自签名的通配符证书,该证书不会被进行适当证书验证的浏览器接受。
我们在 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 无错误地处理握手,并且使用尽可能高的协议。
我的 Nginx 服务器有一个 SSL 证书,看起来非常好,并且在大多数浏览器中都能完美运行。服务器是 https://live.evmote.com . You can "hit" the server by going to https://live.evmote.com/primus 。 SSL 证书检查在此处:https://www.ssllabs.com/ssltest/analyze.html?d=live.evmote.com
到目前为止,还不错。问题特别出在 Tesla Model S 浏览器(车载浏览器)上。它给出了 "Bad certificate" 错误。 Tesla 浏览器是出了名的糟糕并且支持不完整。无法从特斯拉查看证书链或调试问题。它更像是一个设备而不是一台计算机。 这是 Tesla 内部的 SSL 支持: http://i.imgur.com/EbIrClM.jpg
在 Nginx 服务器上,我在日志中收到此错误: SSL3_GET_CLIENT_HELLO:no 共享密码
现在,从 Tesla SSL 报告和服务器报告中可以清楚地看出,存在共享密码。我希望他们会就此握手: TLS_RSA_WITH_AES_256_CBC_SHA (0x35)
我不确定如何从这里进行故障排除。
谢谢, 瑞安
错误消息可能具有误导性。绝对有问题的是浏览器不支持 SNI,但您的网站需要它。至少它只为支持 SNI 的浏览器提供有效证书(live.evmote.com),所有其他浏览器都会获得一个自签名的通配符证书,该证书不会被进行适当证书验证的浏览器接受。
我们在 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 无错误地处理握手,并且使用尽可能高的协议。