Usando HttpClient com SSL e certificados

Embora eu esteja familiarizado com HTTPS e o conceito de SSL, recentemente comecei a desenvolver e descobri que estou um pouco confuso.

O requisito era que eu escrevesse um pequeno aplicativo Java executado em uma máquina conectada a um scanner. Quando um documento é digitalizado, ele é coletado e o arquivo (geralmente PDF) é enviado pela Internet ao nosso servidor de aplicativos que o processará. Eu escrevi o aplicativo usando as bibliotecas Apache Commons e o HTTPClient.

O segundo requisito era conectar-se via SSL, exigindo um certificado. Seguindo as orientações na página HTTPclient, estou usando AuthSSLProtocolSocketFactory na página de contribuições.

O construtor pode usar uma senha de keystore, keystore, armazenamento confiável e armazenamento confiável. Como teste inicial, nosso DBA ativou o SSL em um de nossos servidores da web de desenvolvimento e me forneceu um arquivo .p12 que, ao importar para o IE, me permite conectar com sucesso.

Estou um pouco confuso entre keystores e truststores e quais etapas eu preciso seguir usando o keytool. Tentei importar o p12 para um arquivo keystore, mas obtive o erro:

keytool error: java.lang.Exception: Input not an X.509 certificate

Segui uma sugestão de importar a p12 para o Internet Explorer e exportar como um .cer, que pode ser importado com sucesso para um keystore. Quando eu forneço isso como um argumento keystore do AuthSSLProtocolSocketFactory, recebo um erro sem sentido, mas se eu tentar como um armazenamento confiável, parece que ele lê bem, mas, finalmente, recebo

Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate

Não tenho certeza se perdi algumas etapas, estou entendendo mal o SSL e a autenticação mútua por completo ou isso é uma configuração incorreta no servidor.

Alguém pode fornecer sugestões ou me indicar recursos que possam me ajudar a descobrir isso, por favor?

questionAnswers(2)

yourAnswerToTheQuestion