首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为单个jsse.enableSNIExtension将“HTTPURLConnection”设置为false?

如何为单个jsse.enableSNIExtension将“HTTPURLConnection”设置为false?
EN

Stack Overflow用户
提问于 2015-08-18 09:02:41
回答 2查看 7.1K关注 0票数 1

我目前有一个应用程序,可以向许多URL发出HTTP请求。如果出现以下异常,一些连接将失败。

线程"main“中的异常:握手警告: sun.security.ssl.ClientHandshaker.handshakeAlert(ClientHandshaker.java:1410) at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2004) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1113) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1363) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1391) 。。。

因此,对于抛出上述异常的特定连接,我希望将“jsse.enableSNIExtension”设置为false。

如何在HTTPsURLConnection/SSLSocket级别上执行此操作?

代码语言:javascript
运行
复制
URL url = new URL("https://artofskinmd.localgiftcards.com/");
HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();

httpConnection.connect();

我正在试图找到一种方法来更改HttpsURLConnection对象的HttpsURLConnection。但是,我找不到任何setSSLParameters()方法来设置一个空的服务器名称列表。在设置SSLParameters for HttpURLConnection、SSLContext等方面,我无法在网上找到任何内容

EN

回答 2

Stack Overflow用户

发布于 2015-08-18 13:09:15

显然,该站点依赖于SNI,否则它将不关心客户端在SNI扩展中发送的名称。这意味着禁用扩展可能没有帮助,但相反,您将得到一些握手失败或一些默认站点(和证书),而可能不是您想要的网站。要解决这个问题,您不应该禁用SNI,而应该使用正确的名称,即站点所期望的名称。

编辑:这看起来既糟糕的服务器配置,Java7和Java8中的一个bug。访问URL https://artofskinmd.localgiftcards.com/将导致unknown_name TLS警报警告,Java7和Java8错误地认为这是致命的(与非常旧的OpenSSL 0.9.8相同)。在这种情况下,禁用SNI实际上会有所帮助,但似乎无法对单个HttpURLConnection对象禁用SNI。

票数 2
EN

Stack Overflow用户

发布于 2016-01-21 19:53:14

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32068009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档