当前位置: 首页 > 知识库问答 >
问题:

到JAX-WS(部署在WL 10.3中)的Java SSL/HTTPS连接失败

花玄裳
2023-03-14

我正在尝试使用jdk版本1.6.0_29编写Java https客户端(使用HttpsURLConnection)。然后我将证书/wlserver_10.3/server/lib/certgenca.der导入到客户端的密钥存储库中。通过以下命令:

keytool-import-alias test-keystore“d:\program files\java\jdk1.6.0_29\jre\lib\security\cacerts”-file certgenca.der

问题是我不断得到“线程中的Exception”main“javax.net.SSL.SSLHandShakeException:Remote host closed connection during handshake”SSL调试输出如下:

           keyStore is : 
           keyStore type is : 
           jks keyStore provider is : 
           init keystore

           init keymanager of type SunX509
           trustStore is: D:\Program Files\Java\jdk1.6.0_29\jre\lib\security\cacerts
           trustStore type is : jks
           trustStore provider is : 
           init truststore
enter code here
adding as trusted cert:
Subject: CN=SwissSign Platinum CA - G2, O=SwissSign AG, C=CH
Issuer:  CN=SwissSign Platinum CA - G2, O=SwissSign AG, C=CH 
Algorithm: RSA; Serial number: 0x4eb200670c035d4f 
Valid from Wed Oct 25 04:36:00 VET 2006 until Sat Oct 25 04:06:00 VET 2036



adding as trusted cert:
Subject: EMAILADDRESS=info@valicert.com, CN=http://www.valicert.com/, OU=ValiCert Class    1 Policy Validation Authority, O="ValiCert, Inc.", L=ValiCert Validation Network

颁发者:emailaddress=info@valicert.com,CN=http://www.valicert.com/,OU=Valicert Class 1 Policy Validation Authority,O=“Valicert,Inc.”,L=Valicert Validation Network Algorithm:RSA;序列号:0x1有效期为1999年6月25 18:23:48 VET Frie Jun 25 18:23:48 VET 2019 Tue Jun 25 17:53:48 VET

......

            trigger seeding of SecureRandom
            done seeding SecureRandom

            Allow unsafe renegotiation: false 
            Allow legacy hello messages: true 
            Is initial handshake: true 
            Is secure renegotiation: false 

            %% No cached client session 
            *** ClientHello, SSLv3 
            RandomCookie:  GMT: 1362670800 bytes = { 77, 1, 89, 245, 75, 245, 125, 199, 168, 78, 33, 255, 83, 57, 65, 228, 118, 11, 240, 48, 210, 7, 245, 45, 70, 153, 149, 149 }


            Session ID:  {} 
            Cipher Suites: [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, TLS_EMPTY_RENEGOTIATION_INFO_SCSV]

              Compression Methods:  { 0 } 
              *** 
              main, WRITE: SSLv3 Handshake, length = 75 
              main, received EOFException: error 
              Exception in thread "main" javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake 
              main, SEND TLSv1 ALERT:  fatal, description = handshake_failure
              main, WRITE: TLSv1 Alert, length = 2 
              main, called closeSocket()

main,称为close()main,在com.sun.net.ssl.internal.ssl.sslSockeTimpl.ReadRecord(SSLSockeTimpl.java:849)中称为closeInternal(true)

....

               Caused by: java.io.EOFException: SSL peer shut down incorrectly
               at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:333)
               at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:830)
... 7 more

我不知道如何解释所有这些信息

我的代码是从Eclipse和URL(JAX-WS)运行的,它是在实验室和solaris box中运行的

我的测试客户端代码如下:


URL wsdlLocation = new URL("https://server.lab.ciso.com:8833/Impl/Service?wsdl");

    System.setProperty("weblogic.security.SSL.ignoreHostnameVerification", "true");
    System.setProperty("javax.net.ssl.trustStore", "D:\\Program Files\\Java\\jdk1.6.0_29\\jre\\lib\\security\\cacerts");
    System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
    System.setProperty("https.protocols", "SSLv3");

    SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();

    HttpsURLConnection conn = null;
    try {
        conn = (HttpsURLConnection) wsdlLocation.openConnection();
        conn.setSSLSocketFactory(sslsocketfactory);
        conn.setDoOutput(true);
        conn.setUseCaches(false);
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Content-Type","application/Json");
        conn.setDoInput(true);
        conn.connect();
        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        StringBuilder sb = new StringBuilder();
        String line;
        while ( ((line = br.readLine()) != null)) {
            if((line.indexOf("wsp:PolicyReference") == -1))
                sb.append(line+"\n");
        }
        br.close();
        System.out.println("Random code::"+sb.toString());

    } finally {
        if (conn != null) {
            conn.disconnect();
        }
    }

共有1个答案

许华清
2023-03-14

首先,修改JDK安装的cacerts truststore是一种非常糟糕的做法,因为您会使用JDK更新来放松修改,而由于漏洞,当前JDK更新大约每周发布一次。

如果您想使用修改后的Java信任库,请将其复制到您的项目中,并从那里修改/使用它。

您的代码的主要问题(我假设)是使用以下调用将协议限制为SSLv3:System.SetProperty(“https.protocols”,“SSLv3”);

因此,将“sslv3”更改为“tlsv1”“tlsv1.1”(“tlsv1.2”只受Java 7支持)。

 类似资料:
  • 我正在开发简单的JAX-WS WebService。我正在使用ANT构建脚本创建WAR文件。该文件在部署到Tomcat7服务器时,抛出以下异常,并出现如下部署错误。 JAXB 2.1 API是从bootstrap classloader加载的,但是这个RI(从jar:file:/d:/dreamsoln/server/apache-tomcat-7.0.29/webapps/webserviced

  • 我已经使用JAXWS开发了一个Web服务,并且能够在Tomcat7上从eclipse运行它,没有任何问题。 但我的问题是如何在Apache war文件中部署它。每当我在服务器上运行时,它都会出现异常严重:WSSERVLET11:无法解析运行时描述符:java。lang.NoClassDefFoundError:org/glassfish/ha/store/api/BackingStoreExcep

  • 首先,我研究了建议的类似问题——因为这显然是一个相当普遍的问题——但还没有找到答案。我哪里出错了?下载了最新的JAXWS-RI,手动复制了所有的. jar文件。然后拼凑了一个web.xml 还有sun-jaxws.xml 还有几个java文件 我将这四个文件放在适当的目录结构中,在eclipse中构建了一个war文件,并将其复制到Tomcat webapps文件夹中。战争爆发并显示在管理器控制台上

  • JAX-WS (JavaTM API for XML-Based Web Services)规范是一组XML web services的JAVA API。JAX-WS允许开发者可以选择RPC-oriented或者message-oriented 来实现自己的web services。 在 JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP。在使用JAX-WS过程中,开发者不需要

  • 我试图用Arquillian和Wildfly(8.1.0.Final和8.2.0.Final tested)容器运行一个简单的JPA测试(persist,read,JSON serialize),但是到目前为止我还不能将test.war部署到嵌入式服务器上。测试使用JBoss7.1.1.final容器运行。 我使用了Arquillian入门指南和Arquillian示例项目(Google:gith

  • 我用Java编写了一个访问URL的小代码。该代码适用于HTTP连接,但不适用于HTTPS(错误粘贴在下面) 如有任何帮助,我们将不胜感激。 代码: 错误: 异常线程"main"javax.net.ssl.SSLHandshake异常:sun.security.validator.验证器异常:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathB