“线程中的异常”;“主要”;javax.ws.rs.ProcessingException:javax.net.ssl.SSLProtocolException:握手警报:无法识别的\u名称
我是REST新手,最近我开发了一个小型JavaREST客户机,使用jersey使用SSL(https)上的api。但是,我面临以下错误的挑战: 线程“main”javax.ws.rs.ProcessingException:javax.net.ssl.sslprotoclexception:握手警报:无法识别的\u名称 ........ ........ 原因:javax.net.ssl.sslprotoclexception:握手警报:无法识别的\u名称 我从一些帖子上读到关于在java中禁用SNI的内容,但我不清楚。 由于我使用的是eclispe IDE,所以我在eclipse.ini文件中添加了“-Djsse.enableSNIExtension=false”,但仍然出现错误。 谁能给我指出正确的方向吗“线程中的异常”;“主要”;javax.ws.rs.ProcessingException:javax.net.ssl.SSLProtocolException:握手警报:无法识别的\u名称,java,web-services,rest,ssl,Java,Web Services,Rest,Ssl,我是REST新手,最近我开发了一个小型JavaREST客户机,使用jersey使用SSL(https)上的api。但是,我面临以下错误的挑战: 线程“main”javax.ws.rs.ProcessingException:javax.net.ssl.sslprotoclexception:握手警报:无法识别的\u名称 ........ ........ 原因:javax.net.ssl.sslprotoclexception:握手警报:无法识别的\u名称 我从一些帖子上读到关于在java中禁用
我意识到需要通过使用将安全上下文设置为“TLSv1”并使用TrustManager和HostnameVerifier(参见下面的代码片段)来处理异常(“javax.net.ssl.SSLProtocolException:握手警报:无法识别的_名称”)。这为我解决了这个问题
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();
我使用的是
System.setProperty(“jsse.enableSNIExtension”,“false”)
但这不再适用于java版本“1.7.0_79”OpenJDK运行时环境(IcedTea 2.5.6)(7u79-2.5.6-0ubuntu1.14.04.1)
@PLA上的握手异常,谢谢。我使用的是java版本“1.8.0_66”java(TM)SE运行时环境(build 1.8.0_66-b18)。我不确定最好的解决方案,在过去的24小时里我一直在谷歌上搜索-djse.enableSNIExtension=false
放在eclipse.ini
中可能没有效果。如果您是从Eclipse中运行应用程序,则此参数应位于应用程序的运行配置选项中。是否已检查您尝试连接到的主机名是否与服务器证书(服务器预期的主机名)中的主机名匹配?@Bruno I尚未使用证书。谢谢你真的想使用不安全的信任管理器和主机名验证程序吗?@Bruno,因为这不在生产环境中,所以目前的方法就足够了。由你决定。。。这种变通方法的问题在于,它们常常在生产代码中被忽略。(很容易忘记重新恢复正确的验证,特别是当你快到最后期限,没有时间考虑安全地做事情时。)链接断开,下面是更新的链接;