2017-07-17 23 views
2

(これはWindowsマシンでjboss eap7.0を実行しています)I外部Webサービスに接続するためのjax-wsクライアントを生成しました。httpsでjboss eap jax-wsクライアントが失敗する

URLがhttps://smartpayform.com/api/transaction/transaction.asmxのhttpsを使用しています サイト証明書をエクスポートして作成したキーストアに挿入しました。私は(standalone.xmlまたはCLIで)直接にJBossを設定する方法の十分な詳細を見つけることができなかったので、私は はJAX-WSクライアントに証明書を追加するには、いくつかのJavaコードを見つけました:

SSLContext sc = SSLContext.getInstance("TLS"); 
    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
    KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); 
    ks.load(new FileInputStream("C:\\Users\\amikaml\\.keystore"), certPassword.toCharArray()); 
    kmf.init(ks, certPassword.toCharArray()); 
    sc.init(kmf.getKeyManagers(), null, null); 
    binding.getRequestContext().put("com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory",sc.getSocketFactory()); 

コードをせずに実行されることを任意の例外。 SOAPコールを実行すると、以下のエラーが発生します。普通のスタンドアロンのJavaアプリケーションでEAP以外のWebサービスにアクセスしようとすると、正常に動作します。私は間違って何をしていますか?

Caused by: java.net.SocketException: Unrecognized Windows Sockets error: 0: recv failed 
at java.net.SocketInputStream.socketRead0(Native Method) ~[?:1.8.0_111] 
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[?:1.8.0_111] 
at java.net.SocketInputStream.read(SocketInputStream.java:170) ~[?:1.8.0_111] 
at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[?:1.8.0_111] 
at sun.security.ssl.InputRecord.readFully(InputRecord.java:465) ~[?:?] 
at sun.security.ssl.InputRecord.read(InputRecord.java:503) ~[?:?] 
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973) ~[?:?] 
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) ~[?:?] 
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) ~[?:?] 
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) ~[?:?] 
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559) ~[?:?] 


Caused by: java.net.SocketException: Unrecognized Windows Sockets error: 0: recv failed 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) 
    at java.net.SocketInputStream.read(SocketInputStream.java:170) 
    at java.net.SocketInputStream.read(SocketInputStream.java:141) 
    at sun.security.ssl.InputRecord.readFully(InputRecord.java:465) 
    at sun.security.ssl.InputRecord.read(InputRecord.java:503) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) 
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) 
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1316) 
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1291) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250) 
    at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.setupWrappedStream(URLConnectionHTTPConduit.java:236) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1319) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1279) 
    at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.onFirstWrite(URLConnectionHTTPConduit.java:267) 
    at org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:47) 
    at org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1332) 

UPDATE 私は、JBossで完全なSSLデバッグログオン。私は、エンドポイントの証明書がロードされていることを参照してください。第一3行から以下

handling exception: java.net.SocketException: Unrecognized Windows Sockets error: 0: recv failed 
SEND TLSv1.2 ALERT: fatal, description = unexpected_message 
WRITE: TLSv1.2 Alert, length = 2 
Exception sending alert: java.net.SocketException: Connection reset by peer: socket write error 
called closeSocket() 
called close() 
called closeInternal(true) 

UPDATE #2

Subject: CN=*.smartpayform.com, OU=Domain Control Validated 
Issuer: CN=AlphaSSL CA - SHA256 - G2, O=GlobalSign nv-sa, C=BE 
Algorithm: RSA; Serial number: 0xc2d0a153e5915039e88cbf7 
Valid from Mon Sep 05 12:33:58 EDT 2016 until Wed Sep 06 12:33:58 EDT 2017 

、ここでは、ソケットエラーのより完全なトレースでありますwiresharkは、動作しない接続を示します。 SSLを使用していることがわかります。 2番目の行はsoapuiで同じsoap呼び出しを実行したものです。これは、クライアントHelloの「TLSv1」を持っていることがわかります。だから私はそれが問題だと推測していますが、その理由はわかりません。

答えて

1

java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind (JBOSS)から

This problem occurs on some Windows systems that have the IPv6 TCP Stack installed. If both IPv4 and IPv6 are installed on the computer, the Java Virtual Machine (JVM) may have problems closing or opening sockets at the operating system level.

Add the following JVM option:

-Djava.net.preferIPv4Stack=true 
+0

いいえ。問題は変えなかった。 – OldProgrammer

+0

ここを参照 - https://stackoverflow.com/questions/45313201/tls1-2-support-in-jboss問題はjdkバグでした。 – OldProgrammer

関連する問題