Chris,
Leo,

On 28.10.2013 18:23, Leo Donahue - OETX wrote:
I've been having some trouble lately converting keys and certs from OpenSSL
format into Java's JKS format. I follow all of the magical incantations I can 
find
online to convert key+cert into a Java keystore but I get no love. Is there a
decent guide anywhere for how to do this?

 From my book of spells.

Used this to configure SSL in Apache httpd for subversion edge.

openssl pkcs12 -export -in C:/server.crt -inkey C:/server.key -name svnedge 
-out C:/server.p12

keytool -importkeystore -srckeystore C:/server.p12 -srcstoretype PKCS12 
-destkeystore C:/svnedge.jks

During TLS handshake, server may respond with complete certificate chain (server certificate with all intermediate certificates) or with incomplete certificate chain (e.g. server certificate, without any/some intermediate certificates). Most servers, around 88% of them, deliver full certificate chain, according to research mentioned here [1].

Complete certificate chain is being recognized as valid by every client that implements TLS (assuming that root CA certificate is in the client keystore). Incomplete certificate chain may be recognized as valid by some TLS clients (e.g. Internet Explorer), using information from X.509v3 extension called Authority Information Access (AIA), or using previously validated certificate chains. Some clients will not recognize incomplete certificate chain as valid (e.g. openssl or Apache HTTPCommons Client). Even the same client may sometimes recognize incomplete certificate chains as valid and sometimes as invalid, thanks to caching of intermediate certificates. Therefore, it is best practice always to deliver complete certificate chain to the client.

Having root CA certificate in the chain is unnecessary, as it wastes your bandwidth during TLS handshake (your client already have root CA certificate in its own keystore).

Assuming that intermediate certificates (intermediates.pem), server certificate (server.pem) and private key (server.key) are all in PEM format, you need to add option -certfile to command Leo provided:

openssl pkcs12 -export -out keystore.p12 -name myserver -in server.pem -inkey server.key -certfile intermediates.pem


Verify that the contents of the p12 keystore with:

openssl pkcs12 -in keystore.p12 -nokeys

You should verify that the certificate chain is complete (up to, but without root CA certificate).

Now, you may use that keystore for BIO and NIO connectors:

keystoreFile="keystore.p12" keyAlias="myserver" keystoreType="pkcs12"

Or you may convert it to JKS keystore as Leo suggests.

-Ognjen

[1] https://bugzilla.mozilla.org/show_bug.cgi?id=399324#c72

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to