2011-06-30 6 views
9

J'essaie de configurer SSL dans mon installation Tomcat 6 locale. Pour cela, je suivais le How-To officiel procédant comme suit:Format de fichier de clés non valide avec SSL dans Tomcat 6

$JAVA_HOME/bin/keytool -genkey -v -keyalg RSA -alias 
      tomcat -keypass changeit -storepass changeit 
$JAVA_HOME/bin/keytool -export -alias tomcat -storepass 
      changeit -file /root/server.crt 

Puis, changeant l'en commentant CATALINA_BASE $/conf/server.xml, ceci:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
      maxThreads="150" scheme="https" secure="true" 
      clientAuth="false" sslProtocol="TLS" 
      keystoreFile="/root/.keystore" keystorePass="changeit" /> 

Après avoir démarré Tomcat, je reçois ce exception:

INFO: Initializing Coyote HTTP/1.1 on http-8080 
30.06.2011 10:15:24 org.apache.tomcat.util.net.jsse.JSSESocketFactory getStore 
SCHWERWIEGEND: Failed to load keystore type JKS with path /root/.keystore 
due to Invalid keystore format 
java.io.IOException: Invalid keystore format 
     at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:633) 
     at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:38) 
     at java.security.KeyStore.load(KeyStore.java:1185) 

Quand je regarde dans le keystore avec keytool -list je reçois

[email protected]:~# $JAVA_HOME/bin/keytool -list 
Enter key store password: changeit 
Key store type: gkr 
Key store provider: GNU-CRYPTO 

Key store contains 1 entry(ies) 

Alias name: tomcat 
Creation timestamp: Donnerstag, 30. Juni 2011 - 10:13:40 MESZ 
Entry type: key-entry 
Certificate fingerprint (MD5): 6A:B9:...C:89:1C 

De toute évidence, les types de magasin de clés sont différents. Comment puis-je changer le type et cela va-t-il résoudre mon problème? Je vous remercie!

Répondre

13

Il ressemble à la keytool que vous utilisez le GNU implementation, pas celui d'Oracle/Sun ou OpenJDK. À partir de la sortie de keytool -list, il génère un type de magasin gkr, qui est un GNU Keyring Store. Je ne suis pas sûr si votre exécution Apache Tomcat en utilisant un OpenJDK ou Sun/Oracle JRE, auquel cas ce format ne serait pas pris en charge sans fournisseurs de sécurité supplémentaires.

Si vous exécutez Apache Tomcat avec un JRE GNU qui prend en charge gkr (ou au moins un JRE où vous avez ajouté un fournisseur de sécurité qui prend en charge gkr), vous pouvez essayer keystoreType="gkr" dans votre configuration <Connector />. Cependant, le plus simple est probablement d'utiliser keytool comme fourni par Oracle ou OpenJDK et d'utiliser le type de stockage JKS (qui serait le type par défaut si vous exécutez Apache Tomcat avec OpenJDK ou Sun/Oracle JRE). Il a probablement été installé avec votre JRE mais il ne ressemble pas à $JAVA_HOME que vous utilisez pointez vers un Oracle ou OpenJDK JAVA_HOME. Certaines distributions Linux ont des mécanismes pour installer plusieurs JRE et configurer des liens (update-alternatives dans la famille Debian/Ubuntu).

(Comme un côté note, il est généralement recommandé de ne pas exécuter Apache Tomcat en tant que root, que vous semblez faire depuis $HOME/.keystore est /root/.keystore dans votre exemple.)

+0

Merci beaucoup pour votre réponse :-) Il y a quelques questions supplémentaires mineures ^^ quel utilisateur devrait lancer Tomcat? Comment savoir ce truc de keytool? Ce serait la dernière chose à penser qu'il y a tellement de versions différentes sur mon ordinateur ?! Et enfin: j'ai créé un .keystore et un server.crt avec les commandes mentionnées. Tomcat démarre complètement, mais le navigateur mentionne toujours que le certificat n'est pas fiable ... Je vais créer une prime pour vous donner plus de points :-) – strauberry

+1

Pour configurer vos multiples installations Java, regardez [update-java-alternatives] (http://wiki.debian.org/Java/Sun). Il semble que vous ayez installé Tomcat en utilisant le paquet Debian, donc un utilisateur 'tomcat' ou' tomcat6' a probablement été créé. Il y a un script '/ etc/init.d/tomcat6' qui devrait démarrer/arrêter Tomcat sous cet utilisateur pour vous. '/ usr/share/doc/tomcat6/README.Debian.gz' aura certainement plus d'informations à ce sujet. – Bruno

+0

En ce qui concerne le certificat de serveur, puisqu'il est auto-signé, vous devez l'importer manuellement sur les navigateurs que vous utilisez: soit ajouter manuellement une exception (vous pouvez vérifier qu'il correspond au '.crt' que vous avez émis: vous pouvez vérifier en utilisant 'openssl x509 -text -noout -in server.crt' par exemple), ou importer directement le fichier' server.crt' dans votre navigateur. – Bruno

1

Comme Bruno a dit, je le « mauvais "outil clé!

Il y a ceux KeyTools sur mon installation Debian 6

[email protected]:~# locate keytool 
/etc/alternatives/keytool 
/etc/alternatives/keytool.1.gz 
/root/glassfish3/jdk/bin/keytool 
/root/glassfish3/jdk/jre/bin/keytool 
/root/glassfish3/jdk/man/ja_JP.eucJP/man1/keytool.1 
/root/glassfish3/jdk/man/man1/keytool.1 
/root/glassfish3/mq/bin/imqkeytool 
/root/glassfish3/mq/bin/imqkeytool.exe 
/usr/bin/gkeytool 
/usr/bin/gkeytool-4.4 
/usr/bin/keytool 
/usr/bin/jre1.6.0_25/bin/keytool 
/usr/bin/jre1.6.0_25/man/ja_JP.eucJP/man1/keytool.1 
/usr/bin/jre1.6.0_25/man/man1/keytool.1 
/usr/lib/jvm/java-1.5.0-gcj-4.4/bin/keytool 
/usr/lib/jvm/java-1.5.0-gcj-4.4/jre/bin/keytool 
/usr/lib/jvm/java-1.5.0-gcj-4.4/man/man1/keytool.1.gz 
/usr/lib/jvm/java-6-sun-1.6.0.24/bin/keytool 
/usr/lib/jvm/java-6-sun-1.6.0.24/jre/bin/keytool 
/usr/lib/jvm/java-6-sun-1.6.0.24/jre/man/ja/man1/keytool.1.gz 
/usr/lib/jvm/java-6-sun-1.6.0.24/jre/man/man1/keytool.1.gz 
/usr/lib/jvm/java-6-sun-1.6.0.24/man/ja/man1/keytool.1.gz 
/usr/lib/jvm/java-6-sun-1.6.0.24/man/man1/keytool.1.gz 
/usr/share/man/man1/gkeytool-4.4.1.gz 
/usr/share/man/man1/gkeytool.1.gz 
/usr/share/man/man1/keytool.1.gz 
/var/lib/dpkg/alternatives/keytool 
[email protected]:~# echo $JAVA_HOME 
/usr 

J'utilisé

/usr/lib/jvm/java-6-sun-1.6.0.24/bin/keytool -genkey -v -keyalg RSA -alias tomcat 
-keypass changeit -storepass changeit 

Pour créer le fichier keystore-. Tomcat démarre sans aucun problème!

0

Si vous utilisez GNU jvm et l'outil keytool, vous pouvez ajouter les options suivantes au connecteur Tomcat sur le serveur .xml pour le faire fonctionner: keystoreType="gkr" algorithm="JessieX509"

L'algorithme est mentionné à here