Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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
到JAX-WS(部署在WL10.3中)的Java ssl/https连接失败_Java_Ssl_Jax Ws_Ssl Certificate_Httpsurlconnection - Fatal编程技术网

到JAX-WS(部署在WL10.3中)的Java ssl/https连接失败

到JAX-WS(部署在WL10.3中)的Java ssl/https连接失败,java,ssl,jax-ws,ssl-certificate,httpsurlconnection,Java,Ssl,Jax Ws,Ssl Certificate,Httpsurlconnection,我正在尝试使用jdk版本1.6.029编写Java https客户端(使用HttpsURLConnection)。 然后,我将证书/wlserver_10.3/server/lib/CertGenCA.der导入客户端的密钥库。通过以下命令: keytool-import-alias test-keystore“D:\Program Files\Java\jdk1.6.0\u 29\jre\lib\security\cacerts”-文件CertGenCA.der 问题是我一直在获取“线程中的异

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

keytool-import-alias test-keystore“D:\Program Files\Java\jdk1.6.0\u 29\jre\lib\security\cacerts”-文件CertGenCA.der

问题是我一直在获取“线程中的异常”main“javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接”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
发行人:电子邮件地址=info@valicert.com,CN=,OU=ValiCert 1类策略验证机构,O=“ValiCert,Inc.”,L=ValiCert验证网络 算法:RSA;序列号:0x1 有效期为1999年6月25日星期五18:23:48至2019年6月25日星期二17:53:48

。。 ..

main,处理异常:javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接

              main, SEND TLSv1 ALERT:  fatal, description = handshake_failure
              main, WRITE: TLSv1 Alert, length = 2 
              main, called closeSocket()
main,称为close() main,称为closeInternal(true) 位于com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:849)

。。

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

我的代码是从Eclipse运行的,它所访问的URL(JAX-WS)位于实验室和solaris机箱中

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

           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

首先,修改JDK安装的cacerts truststore是一种非常糟糕的做法,因为由于存在漏洞,目前大约每周发布一次的JDK更新会导致修改失败

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

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

SSL3在某些情况下非常陈旧且不安全,因此您应该使用TLSV1.0或更高版本。如果服务器仅限于TLS(这里似乎就是这种情况),您的连接将失败


因此,将
“SSLv3”
更改为
“TLSv1”
“TLSv1.1”
“TLSv1.2”
仅受Java 7支持)。

感谢您的快速响应,是的,我同意修改JDK的证书是一个坏主意:-(之前我尝试了错误的端口(我的坏)现在我有一个正确的SSL端口要连接,并在下面的行中进行了注释:“System.setProperty(“https.protocols”,“SSLv3”);”现在我得到了这个错误:“main,发送TLSv1警报:致命,描述=证书\未知main,WRITE:TLSv1警报,长度=2 main,称为closeSocket()main,处理异常:javax.net.ssl.SSLHandshakeException:java.security.cert.certificateeexception:No name matching server.lab.cisco.com找到'pls advice!!!您确定您在服务器端使用的证书是针对dns名称
server.lab.ciso.com
颁发的吗?我的服务器端是WL 10.3,我已复制了下面的文件以供参考评级密钥库:/wlserver_10.3/server/lib/CertGenCA.der我将在WL中从我的服务器的SSL和密钥库选项卡附加两个快照,然后您能告诉我使用哪一个吗?如何在此站点中附加文件??:-(好的,因为WL服务器的'config.xml'没有指定受信任的CA证书,这意味着它使用DemoTrust,如上所述,我使用了DemoTrust.jks,但没有锁:-(这里缺少什么?)???
               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

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();
        }
    }