現象
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 (要求された対象(証明書)に対する有効な認証パスが見つかりません)
解決策
[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 { } } }
参考文献
* 他にも同じエラー表示で別の解決法を提示しているhttp://secdiag.blogspot.jp/2014/04/java.html
http://symfoware.blog68.fc2.com/blog-entry-1165.html
http://trasis.jp/blog/lab/2008/07/%E8%87%AA%E5%89%8D%E8%AA%8D%E8%A8%BC%E5%B1%80%E3%81%AEssl%E3%82%B5%E3%83%BC%E3%83%90.html
http://seesaawiki.jp/w/syo1976/d/javassl
http://blog.kinjouj.net/self-signed-cerificate-https-server-connection-from-java.html
* 特に以下のサイト役立った
http://www.melange.co.jp/blog/?p=2345