Using HttpClient with SSL and certificates

Posted by ChrisCM on Stack Overflow See other posts from Stack Overflow or by ChrisCM
Published on 2010-05-05T15:45:04Z Indexed on 2010/05/05 15:48 UTC
Read the original article Hit count: 432

Filed under:
|
|
|
|

While I've been familiar with HTTPS and the concept of SSL, I have recently begun some development and found I am a little confused.

The requirement was that I write a small Java application that runs on a machine attached to a scanner. When a document is scanned this is picked up and the file (usually PDF) sent over the internet to our application server that will then process it. I've written the application using Apache Commons libraries and HTTPClient.

The second requirement was to connect over SSL, requiring a certificate. Following guidance on the HTTPclient page I am using AuthSSLProtocolSocketFactory from the contributions page.

The constructor can take a keystore, keystore password, truststore and truststore password. As an initial test our DBA enabled SSL on one of our development webservers and provided me with a .p12 file which when I imported into IE allows me to connect successfully.

I am a bit confused between keystores and truststores and what steps I need to take using the keytool. I tried importing the p12 into a keystore file but get the error:

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

I followed a suggestion of importing the p12 into Internet Explorer and exporting as a .cer which I can then successfully import into a keystore. When I supply this as a keystore argument of the AuthSSLProtocolSocketFactory I get a meaningless errror, but if I try it as a truststore it seems like it reads it fine but ultimately I get

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

I am unsure if I have missed some steps, I am misunderstanding SSL and mutual authentication altogether or this is mis-configuration on the server side.

Can anyone provide suggestions or point me towards resources that might help me figure this out please?

© Stack Overflow or respective owner

Related posts about ssl

Related posts about java