Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“线程中的异常”;“主要”;javax.ws.rs.ProcessingException:javax.net.ssl.SSLProtocolException:握手警报:无法识别的\u名称_Java_Web Services_Rest_Ssl - Fatal编程技术网

“线程中的异常”;“主要”;javax.ws.rs.ProcessingException:javax.net.ssl.SSLProtocolException:握手警报:无法识别的\u名称

“线程中的异常”;“主要”;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中禁用

我是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”,但仍然出现错误。 谁能给我指出正确的方向吗

  • 确保您的CA证书文件包含您要连接的证书

  • 下载并安装JCE for java 1.8()

  • 删除-djse.enableSNIExtension=false


  • 我意识到需要通过使用将安全上下文设置为“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,因为这不在生产环境中,所以目前的方法就足够了。由你决定。。。这种变通方法的问题在于,它们常常在生产代码中被忽略。(很容易忘记重新恢复正确的验证,特别是当你快到最后期限,没有时间考虑安全地做事情时。)链接断开,下面是更新的链接;