> On Feb 15, 2016, at 11:02 AM, Oleg Kalnichevski <ol...@apache.org> wrote:
> 
> On Mon, 2016-02-15 at 10:54 -0500, Matt Chambers wrote:
>> Hi Oleg,
>> 
>> Thanks for response…I don’t know if I’m seeing this up right.
>> 
>> Does anyone have the steps handy to have a Tomcat and HttpClient communicate 
>> with each other using self signed keys?
>> 
>> -Matt
>> 
> 
> Matt,
> 
> When it comes to SSL one _must_ know exactly what he or she is doing. 
> 
> Does the server use a self-signed cert (there is only one certificate in
> the cert chain) or does it use a cert signed by a custom CA (the cert
> chain consists of multiple certs)?  

The server has a self signed cert.

> 
> When configured to use TrustSelfSignedStrategy HttpClient will accept
> the former but will reject the latter unless explicitly set up to trust
> the custom CA. 
> 
> So, what is it you are trying to do? 

Good question.

I started out wanting to get a private internal client/server communicating 
with SSL, using keys generated with key tool, which I’ve done before but with 
much older versions of HttpClient.  That devolved into just getting anything 
working.

Basically, I generated the server key like this:
keytool -genkey -alias server -storetype PKCS12 -keyalg RSA -keysize 2048 
-keystore server.p12 -validity 3650 -keypass change -it storepass changeit

The client keystore i generated with exact same command except different alias.

From the client keystore I exported its cert
keytool -export -alias client -file client.cer -storetype PKCS12 -keystore 
keystore.p12

Then I created a trust store on the server and put in the clients cert
keytool -import -file ../client/client.cer -storetype PKCS12 -keystore 
src/main/resources/truststore.p12

On the server, I specified the path to the trust store and its password.

With SSL debugging on, the client prints out the server’s cert, but then says:

%% Invalidated:  [Session-3, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256]
RegisterServiceImpl RUNNING, SEND TLSv1.2 ALERT:  fatal, description = 
certificate_unknown
RegisterServiceImpl RUNNING, WRITE: TLSv1.2 Alert, length = 2
RegisterServiceImpl RUNNING, called closeSocket()
RegisterServiceImpl RUNNING, handling exception: 
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: 
PKIX path building failed: 
sun.security.provider.certpath.SunCertPathBuilderException: unable to find 
valid certification path to requested target

Should I also export the server's cert to the client’s trust store?

-Matt

> 
> You might also want to run your app with SSL debugging turned and find
> out why the SSL security provider rejects server creds presented during
> the SSL session handshake.
> 
> Oleg 
> 

Reply via email to