jax-ws クライアントを使用して安全な Web サービスに接続しています。Web サイトでは、カスタム キーストアにインポートした自己署名証明書を使用し、このサイトの多くの記事に沿ってソケット ファクトリを作成しました。
ただし、Web サービスに接続しようとするたびに、 sun.security.provider.certpath.SunCertPathBuilderException: 要求されたターゲットへの有効な証明書パスが見つかりませんというメッセージが表示され続けます。デフォルトの SSL コンテキストをカスタム コンテキストに設定すると、スタンドアロン クライアントとして実行できますが、Glassfish アプリ サーバーにデプロイした後、同じエラーが発生します。
どんなアイデアでも大歓迎です。以下は、SSL コンテキストを作成するコードの抜粋です。
SSLContext ctx = SSLContext.getInstance("SSLv3");
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(Client.class.getResourceAsStream("hfcerts"), "changeit".toCharArray() );
kmf.init(ks, "changeit".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);
TrustManager[] trustManagers = tmf.getTrustManagers();
ctx.init(kmf.getKeyManagers(), trustManagers, new SecureRandom());
SSLContext.setDefault(ctx);
((BindingProvider) port).getRequestContext().put(JAXWSProperties.SSL_SOCKET_FACTORY, ctx.getSocketFactory());
また、自分の設定がアプリケーション サーバーの一般的な SSL 設定に影響を与えないようにします。