2016-12-08 103 views
1

私はSOAP認証を使用してHTTPSを介してSOAP Webサービスに接続するJava SOAPクライアントを作成しています。私は、SSL認証を行うためにkeyStoreとtrustStoreを持っています。私は、クライアントを実装するためにjavaxを使用します。私が接続しようとすると、私は次のようしているSSL認証付きJava SOAPクライアント:不正な証明書

HttpsURLConnection httpsConnection = null;    
SSLContext sslContext = SSLContext.getInstance("SSL"); 
TrustManager[] trustAll = new TrustManager[] {new TrustAllCertificates()}; 
sslContext.init(null, trustAll, new java.security.SecureRandom()); 

// Set trust all certificates context to HttpsURLConnection 
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); 

// Open HTTPS connection 
URL urlUrl = new URL(url); 
httpsConnection = (HttpsURLConnection) urlUrl.openConnection(); 

// Trust all hosts 
httpsConnection.setHostnameVerifier(new TrustAllHosts()); 

// Connect 
httpsConnection.connect(); 

SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(request), url); 
soapConnection.close(); 
httpsConnection.disconnect(); 

:SOAPのかかわりを作るために

System.setProperty("javax.net.ssl.keyStore",configuration.getProperty("***")); 
System.setProperty("javax.net.ssl.keyStorePassword", configuration.getProperty("***")); 
System.setProperty("javax.net.ssl.keyStoreType", configuration.getProperty("***"));  
System.setProperty("javax.net.ssl.trustStore",configuration.getProperty("***")); 
System.setProperty("javax.net.ssl.trustStorePassword", configuration.getProperty("***")); 
System.setProperty("javax.net.ssl.trustStoreType", configuration.getProperty("***")); 

コード:

は、私は次の方法で証明書(キーストアトラストストアを)セットエラー:

javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate 
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) 
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:154) 
    at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1979) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1086) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1343) 
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153) 

私は、証明書(およびパスワード)をカール接続でテストしましたそれは動作します。この問題はkeyStoreとtrustStoreの問題ではありません。

私のアプリ(javax?)は、接続中に証明書を使用しないと思います。何か案が ?

答えて

0

あなたは二重の作業を行い、最後にシステムのプロパティを無視するようです。 Trust/Keyストアのシステムプロパティをセットアップするときに、そのSSLContext、TrustManager、HostVerifierのすべてを使う必要はありません。 単純なHTTPの場合と同じように行い、気にしないでください。

URL urlUrl = new URL(url); 
// all of those connections work since they are interfaces. Implementation is HTTPS of course 
HttpsURLConnection httpsConnection = (HttpsURLConnection) urlUrl.openConnection(); 

HttpURLConnection httpConnection = (HttpURLConnection) urlUrl.openConnection(); 

URLConnection urlConnection = urlUrl.openConnection(); 
関連する問題