čtvrtek 16. září 2010

Tomcat SSL

Dnes jsem řešil pěkně vypečenej zadrhel. Před dvouma měsícema se spoustela aplikace, běžící na tomcatu, která vyžadovala užití SSL certifikátu, který app. používala pro komunikaci s jiným serverem. Vývojář vytvořil KEYSTORE a do nej uložil dodaný certifikát.

Úprava nastavení tomcatu byla následující

KEYSTORE=$CATALINA_HOME/conf/keystore
JAVA_OPTS=" ... -Djavax.net.ssl.trustStore=$KEYSTORE/mycert.truststore -Djavax.net.ssl.trustStorePassword=changeit"

Vše fungovalo. Až do doby, než se řešil problém ostatních aplikací, které dle vyjádření Java programátora nevidí Root CA certifikáty. Blesklo mi hlavou, že se to tou předchozí volbou přenastavilo.

Pátral jsem, kde má tomcat nejaké definice o keystore a nic jsem nenašel. Tak jsem hledal níže a kořenové certifikátý jsem našel v JDK.

find jdk1.6.0_21/ -name '*cert*'
jdk1.6.0_21/jre/lib/security/cacerts

Daný soubor obsahuje kořenové certifikáty certifikačních autorit, obdobně jako tomu je u prohlížečů. Pro řešení problému jsem vyexportoval certifikát z lokálního uložiště a importoval do cacert JVM, který zjevně užíva tomcat i v něm deployované aplikace (bez nutnosti nějaké konfigurace). Pro manipulaci s certifikátama java používá aplikaci keytool.

keytool -keystore mycert.truststore -list
keytool -keystore mycert.truststore -exportcert -file exportkey.crt

keytool -keystore cacerts -list
chmod 666 cacerts
keytool -keystore cacerts -importcert -file exportkey.crt
chmod 444 cacerts


Po restartu tomcatu a odstranění nevhodné konfigurace lokálního keystore z JAVA_OPTS, vše opět zařalo fungovat.

Doporučení: Po každé instalaci JVM (jre nebo jdk) je velmi vhodné změnit defaultní heslo "changeit" na nějaké bezpečnější.

Žádné komentáře: