线程“main”中的异常javax.ws.rs.ProcessingException:javax.net.ssl.SSLProtocolException:handshake alert:unrecognized_name

时间:2015-12-04 17:20:29

标签: java web-services rest ssl

我是REST新手,我最近开发了一个小型的Java REST客户端,使用jersey来使用api over SSL(https)。但是,我受到以下错误的质疑:

线程“main”中的异常javax.ws.rs.ProcessingException:javax.net.ssl.SSLProtocolException:handshake alert:unrecognized_name ........ ........ 引起:javax.net.ssl.SSLProtocolException:handshake alert:unrecognized_name

我从一些关于在java中禁用SNI的帖子中读到,但我不清楚。 由于我使用的是eclispe IDE,我将“-Djsse.enableSNIExtension = false”附加到我的eclipse.ini文件中,但仍然出现错误。 谁能指出我正确的方向?

2 个答案:

答案 0 :(得分:0)

  1. 确保您的CA证书文件包含您要连接的证书。

  2. 下载并安装JCE for java 1.8(http://download.oracle.com/otn-pub/java/jce/8/jce_policy-8.zip

  3. 删除-Djsse.enableSNIExtension = false

答案 1 :(得分:0)

我意识到需要通过将安全上下文设置为" TLSv1"来处理异常(" javax.net.ssl.SSLProtocolException:handshake alert:unrecognized_name")。并使用TrustManager和HostnameVerifier(请参阅下面的代码段)。这解决了我的问题。

        SSLContext sc = SSLContext.getInstance("TLSv1");
        System.setProperty("https.protocols","TLSv1");

        TrustManager[] trustAllCerts = {new InsecureTrustManager()};
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HostnameVerifier allHostsValid = new InsecureHostnameVerifier();