Axisで実行されるWebサービスをJavaWebアプリケーション(Tomcatで実行される)で使用する必要があります。Webサービスを作成した会社は、テスト用にHTTPSと自己署名証明書を使用しています。
Netbeansウィザードを実行してWSDLに基づいてWebサービスを生成しましたが、これは正しく実行されています。ブラウザを使用してWebサービスのWebサイトにアクセスすると、SSL証明書が原因で警告が表示され、例外を作成する必要があります。
コードを実行しようとすると、SSL接続が確立されたときに例外が発生します。例外は次のとおりです。
1.1。
com.sun.xml.ws.client.ClientTransportException:HTTPトランスポートエラー:javax.net.ssl.SSLHandshakeException:致命的なアラートを受信しました:handshake_failure
そして時々(コードを変更せずに)
2.2。
com.sun.xml.ws.client.ClientTransportException:HTTPトランスポートエラー:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIXパスの構築に失敗しました:sun.security.provider.certpath.SunCertPathBuilderException:見つかりません要求されたターゲットへの有効な認証パス
証明書をJavaVMやTomcatに組み込む必要があると思います。また、信頼できるソースではないことを無視するように指示します。
これを行う方法?この安全なWebサービスを正しく利用するにはどうすればよいですか?
私が提供する情報が十分でない場合は、さらに質問してください。
ありがとう
エゼキエル
アップデート:
私はこの2つのことを試しましたが、どちらも成功しませんでしたが、例外は同じです。
オプション1)
System.setProperty("javax.net.ssl.trustStore","/home/serverapp/BSS-cert.p12");
System.setProperty("javax.net.ssl.trustStorePassword","password");
System.setProperty("javax.net.ssl.trustStoreType","PKCS12");
オプション2)KeyStore ks = KeyStore.getInstance( "pkcs12"); ks.load(new FileInputStream( "/ home / serverapp / BSS-cert.p12")、 "password" .toCharArray());
KeyStore jks = KeyStore.getInstance( "JKS" );
jks.load( null );
KeyManagerFactory kmf = KeyManagerFactory.getInstance( "SunX509" );
kmf.init( ks, "f0p6k9n2".toCharArray() );
TrustManagerFactory tmf = TrustManagerFactory.getInstance( "SunX509" );
tmf.init( jks );
SSLContext ctx = SSLContext.getInstance( "TLS" );
ctx.init( kmf.getKeyManagers(), tmf.getTrustManagers(), null );
また、Webサービスが問題だと思ったので、HTTPS接続を確立しようとしましたが、入力ストリームを開くと同じエラーで失敗します。
String httpsURL = "https://serverurl:443/theservice?wsdl";
URL myurl = new URL(httpsURL);
HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();
InputStream ins = con.getInputStream(); //Exception here!
InputStreamReader isr = new InputStreamReader(ins);
BufferedReader in = new BufferedReader(isr);