Я работаю над библиотекой, которая предназначена для интеграции в другие приложения. Я должен общаться с сервером https, и я использую Apache Commons HttpClient 3.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