私は他のアプリケーションに統合することを目的としたライブラリに取り組んでいます。httpsサーバーと通信する必要があり、apache commonsHttpClient3.1を使用しています。私は自分のキーストアを持っており、次の方法でプロトコルを登録する必要がありますProtocol.registerProtocol
。静的ではなく、クライアントの特定のインスタンスにこれを登録する方法があるかどうか疑問に思っていました。この方法では、他のインスタンスを台無しにすることはなく、誰も私を台無しにすることはありません。
クライアントのHostConfigurationを取得し、プロトコルを使用してsetHostを呼び出すことができるものを見ましたが、正しく機能していないようです。私はそれを次のように登録しています:
HostConfiguration config = client.getHostConfiguration();
config.setHost(remoteUrl.getHost(), remoteUrl.getPort(), new Protocol("https", new MyProtocolSocketFactory(), 443));
ただし、接続を確立しようとすると、SSLハンドシェイクは失敗しますが、同じパラメーターでProtocol.registerProtocolを使用すると機能します。失敗は標準です:
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target