Pergunta

Estou trabalhando em uma biblioteca que deve ser integrada em outros aplicativos. Eu tenho que me comunicar com um servidor HTTPS e estou usando o Apache Commons HttpClient 3.1. Eu tenho minha própria keystore e preciso registrar um Protocolo através da: Protocol.registerProtocol. Eu queria saber se havia uma maneira de registrar isso na minha instância específica do cliente e não estaticamente - dessa maneira não estrago outras instâncias e ninguém me estraga.

Eu vi algo onde posso obter os clientes hostconfiguration e ligo Sethost, com um protocolo, mas não parece funcionar corretamente. Estou registrando como:

HostConfiguration config = client.getHostConfiguration();
config.setHost(remoteUrl.getHost(), remoteUrl.getPort(), new Protocol("https", new MyProtocolSocketFactory(), 443));

Mas ao tentar fazer uma conexão, o handshake SSL falha, enquanto funciona ao usar o protocolo.RegisterProtocol com os mesmos parâmetros. O fracasso é o padrão:

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Foi útil?

Solução

Atualize para HttpComponents 4 e deixe o cliente 3.x em paz.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top