SNI:SSLHandshakeException unrecognized_name

Posted

技术标签:

【中文标题】SNI:SSLHandshakeException unrecognized_name【英文标题】:SNI : SSLHandshakeException unrecognized_name 【发布时间】:2021-11-06 10:38:50 【问题描述】:

尝试联系某个网站时出现以下错误:

10:29:32.228 [ForkJoinPool-1-worker-1] ERROR com.intuit.karate - javax.net.ssl.SSLHandshakeException: Received fatal alert: unrecognized_name, http call failed after 35 milliseconds for URL: https://redacted
10:29:32.229 [ForkJoinPool-1-worker-1] ERROR com.intuit.karate - http request failed: javax.net.ssl.SSLHandshakeException: Received fatal alert: unrecognized_name

我找到了以下答案:https://***.com/a/14884941/10791639

我编辑了karate-apache/src/main/java/com/intuit/karate/http/apache/ApacheHttpClient.java L125,删除了这一行的评论:

System.setProperty("jsse.enableSNIExtension", "false");

但我仍然遇到和以前一样的问题。我还没有找到需要严格的服务器名称指示才能重现我的问题的公共网站。

【问题讨论】:

你可以尝试切换到karate-jersey而不是apache。据我所知,NoopHostnameVerifier 应该这样做 - 但仅适用于 SSL:github.com/intuit/karate/blob/master/karate-apache/src/main/… 我没能让空手道运动衫发挥作用。我们找到了一个不同的解决方案,我在下面的答案中详细说明了,你能看看吗?谢谢。 【参考方案1】:

我们通过更改 karate-apache/src/main/java/com/intuit/karate/http/apache/ApacheHttpClient.java 中的内容找到了解决方案:

SSLConnectionSocketFactory socketFactory = new LenientSslConnectionSocketFactory(sslContext, new NoopHostnameVerifier());

变成

SSLConnectionSocketFactory socketFactory = new SslConnectionSocketFactory(sslContext, new NoopHostnameVerifier());

@Peter,您认为使用严格或宽松 SSL 连接的参数是否可行?

【讨论】:

LenientSslConnectionSocketFactory 是空手道中的代码-理想情况下,应该修复它以使您的场景正常工作-您认为您可以调试它并计算吗?参考github.com/intuit/karate/issues/385 我在发布此解决方案后发现了此问题,因为我试图找出解决此问题的最佳方法。你可以重新打开它并分配给我。 Adrien - 你能评论一下那张票吗,否则我不能分配它(一些 GitHub 权限的事情) 有人报告说-Djsse.enableSNIExtension=false 在此发表评论:***.com/q/69123671/143475

以上是关于SNI:SSLHandshakeException unrecognized_name的主要内容,如果未能解决你的问题,请参考以下文章

nginx和SNI那些事

如何实现服务器名称指示 (SNI)

在 AFNetworking 中支持 SNI

通过wireshark抓包分析SNI字段及支持加密套件集

使用 SNI 和 Undertow 在一个 IP 下添加多个域

使用 SSLCertificateSocketFactory 的 Android HTTPS SNI 支持