証明書を使用してトラストストアを作成し、秘密鍵を使用してキーストアを作成しました。私は次のコードを入れ、trsustore マネージャーとキーストア マネージャーをロードし、SSL コンテキストのインスタンスを作成しました。
以下のコードは、Web サービスにリクエストを送信するたびに呼び出されます。axis2 API を使用しています。
SSLContext context = SSLContext.getInstance(protocolVersion);
context.init(keyManagers, trustManagers, null);
SSLSocketFactory socketFactory = context.getSocketFactory();
SslContextedSecureProtocolSocketFactory secureProtocolSocketFactory = new SslContextedSecureProtocolSocketFactory(context);
Protocol authhttps = new Protocol("https", secureProtocolSocketFactory, port);
HttpClient httpclient = new HttpClient();
httpclient.getHostConfiguration().setHost(hostname, port, authhttps);
GetMethod httpget = new GetMethod("/RTAPService/RTAPService");
これも試してみました GetMethod httpget = new GetMethod("/");
httpclient.executeMethod(httpget);
それは私に以下のエラーを与えます..
org.apache.axis2.AxisFault: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
ホスト名は「qartap.csnet.assurity.sg」で、Web サービスの URL は「https://qartap.csnet.assurity.sg:8443/RTAPService/RTAPService」です。
問題は、「HTTPS」プロトコルを登録するときです。これはアプリケーション全体に影響します。特定のホストのみまたは特定の Web サービスに対して何らかの方法でこれらを設定できますか..???
ホスト名を使用してこれを設定するか、新しいプロトコル自体を作成するかのいずれかです...ここでのソリューションに示されているアプローチを試しました。しかし、それは私に次の例外を与えました..
Web サービス URl を生成されたスタブ コンストラクターに渡すときに、URL の "HTTPS" を独自にカスタマイズした "myHTTPS" に置き換えました。
The system cannot infer the transport information from the myhttps://serverUrl:7001/app/services/RTAPDevService.RTAPDevServiceHttpSoap12Endpoint/ URL.