我目前有一个应用程序,可以向许多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级别上执行此操作?
码
URL url = new URL("https://artofskinmd.localgiftcards.com/");
HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();
httpConnection.connect();
我正在试图找到一种方法来更改HttpsURLConnection对象的HttpsURLConnection。但是,我找不到任何setSSLParameters()方法来设置一个空的服务器名称列表。在设置SSLParameters for HttpURLConnection、SSLContext等方面,我无法在网上找到任何内容
发布于 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。
发布于 2016-01-21 19:53:14
https://stackoverflow.com/questions/32068009
复制相似问题