【トラブル】【Java】【Axis2】「AxisFault: Connection has been shutdown: javax.net.ssl.SSLHandshakeException」が表示

現象

http://blogs.yahoo.co.jp/dk521123/32003685.html
のように、Axis2で、クライアントを作成し、
SSL通信でローカルPC上にあるWebサービスにアクセスした時に、
以下「エラー内容」が表示される。

エラー内容

org.apache.axis2.AxisFault: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: 
...
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
(要求された対象(証明書)に対する有効な認証パスが見つかりません)

原因

 * サーバ側の証明書が認証されていない証明書(自己証明書、いわゆるオレオレ証明書)を使っており、
   そのサーバに対して、SSL通信し、不正なサイトと判断されたため。

解決策

[1] サーバ側の証明書を、認証された証明書を入れる
[2] サーバ側の証明書の公開鍵を、keytoolを使ってトラストストアに設定する
[3] 対象サーバ用のキーストアファイルを用意し、そのファイルを使用するようにする << 今回はこの方法で対処
[4] サイトのチェック自体を行わない

etc...

サンプル

 * SSL通信する際に必要な証明書を指定する方法は以下の通り。

System.setProperty("javax.net.ssl.trustStore","【証明書ファイルがある場所】");

詳細は以下の関連記事を参照のこと
https://blogs.yahoo.co.jp/dk521123/37192094.html

HelloWorldClient.java

public class HelloWorldClient {
	public static void main(String[] args) {
		try {
			System.setProperty("javax.net.ssl.trustStore","C:\\tomcat\\conf\\demo.keystore");

			HelloWorldStub stub = new HelloWorldStub(
                           "https://localhost:8443/Axis2Sample/services/HelloWorld");
			HelloWorldStub.SayHello request = new HelloWorldStub.SayHello();
			request.setName("Bob");
			HelloWorldStub.SayHelloResponse response = stub.sayHello(request);
			System.out.println(response.get_return());
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
		}
	}
}


関連記事

Java で、SSL通信を行うには

http://blogs.yahoo.co.jp/dk521123/33122920.html

「AxisFault: Connection has been shutdown: javax.net.ssl.SSLHandshakeException」が表示

http://blogs.yahoo.co.jp/dk521123/33014445.html

System.getProperty("javax.net.ssl.trustStore" ) など で null が返ってくる

http://blogs.yahoo.co.jp/dk521123/33978118.html