我是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文件中,但仍然出现错误。 谁能指出我正确的方向?
答案 0 :(得分:0)
确保您的CA证书文件包含您要连接的证书。
下载并安装JCE for java 1.8(http://download.oracle.com/otn-pub/java/jce/8/jce_policy-8.zip)
删除-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();