Søren Lund (slu) wrote,
Søren Lund
slu

Installing a SSL certificat on Apache Tomcat 5

Problem
Modtaget certificat.pfx + password

Certifikatet er udstedt af TDC SSL Server CA.

Opsætning i Tomcat foregår i server.xml hvor SSL Connector indkommenteres og keystore parametre tilføjes:

<Connector port="443"
           maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
           enableLookups="false" disableUploadTimeout="true"
           acceptCount="100" debug="0" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS"
           keystoreFile="C:\jakarta-tomcat-5.0.14\conf\certificat.pfx"
           keystorePass="password"
           keystoreType="PKCS12"
           />


Men ak, det er ikke alle klienter, der kan find rodcertifikatet. Så brugerne bliver præsenteret for en certifikatfejl, når de besøger siden.

Løsning
Der kan være andre eller nemmere løsninger, men jeg fik dette til at virke.

Hent danid-sslchain-20100325.pem fra https://www.certifikat.dk/da/download/rodcertifikat.html


Kør flg. i en terminal:

openssl pkcs12 -in certificat.pfx -out server.crt -nodes -nokeys

(enterpassword)
openssl pkcs12 -in certificat.pfx -out server.key -nodes -nocert

(enter password)
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name tomcat -CAfile danid-sslchain-20100325.pem -caname root -chain

(enter (possibly new) password twice)

De to første kommandoer eksporterer hhv. certifikat og nøgle ud af pfx-filen og den tredje kommando importerer dem sammen med rodcertifikater i en ny fil.

Ret derefter SSL Connector (file og pass):

<Connector port="443"
           maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
           enableLookups="false" disableUploadTimeout="true"
           acceptCount="100" debug="0" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS"
           keystoreFile="C:\jakarta-tomcat-5.0.14\conf\server.p12"
           keystorePass="password for last step above"
           keystoreType="PKCS12"
           />

Nu skulle det gerne virke. Med mindre du benytter en gammel version af Java (f.eks. 1.4.x), i så fald må du læse videre.

Gammel Java
Det er kun nyere versioner af java, der kan håndterer PKKC12 korrekt. Så hvis du benytter en gammel java, skal server.p12 konverteres til et java keystore. Jetty kommer med funktionalitet, der kan netop dette.

Get http://dist.codehaus.org/jetty/jetty-6.1.x/jetty-6.1.1.zip

Pak jetty-6.1.1.jar ud fra zip'en.

Kør derefter:

java -classpath jetty-6.1.1.jar  org.mortbay.jetty.security.PKCS12Import server.p12 server.jks
(enter input and output password, you probably want them to be equal) Tomcat SSL Connector modificeres tilsvarende (husk at fjerne keystoreType="PKCS12"):
<Connector port="443"
           maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
           enableLookups="false" disableUploadTimeout="true"
           acceptCount="100" debug="0" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS"
           keystoreFile="C:\jakarta-tomcat-5.0.14\conf\server.jks"
           keystorePass="output password"
           />
Bonus De tre filer server.key, server.crt og danid-sslchain-20100325.pem kan desuden bruges hvis det er en Apache HTTP Server. I conf/extra/httpd-ssl.conf sættes de tre variable:
SSLCertificateFile "C:/Program Files (x86)/Apache.../conf/server.crt"
SSLCertificateKeyFile "C:/Program Files (x86)/Apache.../conf/server.key"
SSLCertificateChainFile "C:/Program Files (x86)/Apache.../conf/danid-sslchain-20100325.pem"
Og i conf/httpd.conf indkommenteres to linier vedr. SSL:
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
Tags: apache, certificate, java, keystore, openssl, pem, pfx, ssl, tomcat
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments