4

クライアントはHTTPを介してサーバーから正常に応答を取得しています。

SOAPConnectionFactory sfc = SOAPConnectionFactory.newInstance();
SOAPConnection connection = sfc.createConnection();

SOAPMessage soapMessageResponse = connection.call(soapRequest, new URL(serviceLocation));

クライアント/サーバー間のSSL通信が必要です。

別のプロジェクトでは、 SSLハンドシェイク用にとSSLSocketFactoryから正常に作成しています。KeyStoreTrustManagerFactory

SSLSocketFactoryWebサービスクライアントのコードを使用して、クライアントのSSL通信をサーバーの呼び出しに成功させるにはどうすればよいですか。

4

3 に答える 3

1

デフォルトのSSLContextを使用すると確信しています。これはSSLContext.setDefault()で変更できます。

SSLContext c = SSLContext.getInstance("SSL");
TrustManagerFactory tmf = TrustManagerFactory.getInstance("PKIX");
tmf.init(yourKeystore);
TrustManager tm = tmf.getTrustManagers()[0];
tm.
c.init(null, tm, null);

上記の文字列パラメータの他の値は次のとおりです。

より完全な制御が必要な場合は、SSLContextFactoryの独自の実装を返すSSLContextの独自のサブクラスを実装し、そのSSLContextをデフォルトとして設定できます。

public class MySSLContext extends SSLContext {

    private SSLContext wrapped;
    private SSLSocketFactory mySocketFactory;

    public MySSLContext(SSLContext toWrap, SSLSocketFactory mySocketFactory) {
        wrapped = toWrap;
        this.mySocketFactory = mySocketFactory;
    }

    public SSLSocketFactory getSocketFactory() {
        return mySocketFactory;
    }

    public SSLSessionContext getClientSessionContext() {
        return wrapped;
    }

    // other delegates

}
于 2012-06-01T11:06:43.290 に答える
0

こんにちは、このコードを追加すると、Webサービスクラスが問題を解決すると思います。

     `

   //just put it your somewhere 
 public static class miTM implements javax.net.ssl.TrustManager,
    javax.net.ssl.X509TrustManager {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
    return null;
}

public boolean isServerTrusted(
        java.security.cert.X509Certificate[] certs) {
    return true;
}

public boolean isClientTrusted(
        java.security.cert.X509Certificate[] certs) {
    return true;
}

public void checkServerTrusted(
        java.security.cert.X509Certificate[] certs, String authType)
        throws java.security.cert.CertificateException {
    return;
}

public void checkClientTrusted(
        java.security.cert.X509Certificate[] certs, String authType)
        throws java.security.cert.CertificateException {
    return;
}
    }





 // CAll This function in your webservice class .
private static void trustAllHttpsCertificates() throws Exception {

// Create a trust manager that does not validate certificate chains:

javax.net.ssl.TrustManager[] trustAllCerts =

new javax.net.ssl.TrustManager[1];

javax.net.ssl.TrustManager tm = new miTM();

trustAllCerts[0] = tm;

javax.net.ssl.SSLContext sc =

javax.net.ssl.SSLContext.getInstance("SSL");

sc.init(null, trustAllCerts, null);

javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(

sc.getSocketFactory());

    }
于 2014-01-15T08:04:18.817 に答える
-2

このコード行は、SSLの場合は機能しません。

SOAPMessage soapMessageResponse = connection.call(soapRequest, new URL(serviceLocation));

ここからtrustmanagerとkeymanagersを作成します。

axis2 WebサービスからSSLを介して応答を取得するには、ここに示すようなストリームを開く必要があります

于 2012-07-20T05:51:19.880 に答える