Неверный формат хранилища ключей с SSL в Tomcat 6 - PullRequest
9 голосов
/ 30 июня 2011

Я пытаюсь настроить SSL в моей локальной установке Tomcat 6. Для этого я последовал за официальным How-To , выполнив следующее:

$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

Затем изменив файл $ CATALINA_BASE / conf / server.xml, комментируя это:

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

После запуска Tomcat я получаю это исключение:

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)

Когда я смотрю в хранилище ключей с keytool -list, я получаю

root@host:~# $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

Очевидно, что типы хранилищ ключей разные. Как я могу изменить тип, и это решит мою проблему? Спасибо!

Ответы [ 4 ]

13 голосов
/ 30 июня 2011

Похоже, keytool вы используете реализацию GNU , а не Oracle / Sun или OpenJDK. Из вывода keytool -list он генерирует тип хранилища gkr, который представляет собой хранилище ключей GNU .

Я не уверен, используете ли вы Apache Tomcat, используя OpenJDK или Sun / Oracle JRE, и в этом случае этот формат не будет поддерживаться без дополнительных провайдеров безопасности.

Если вы запускаете Apache Tomcat с GNU JRE, который поддерживает gkr (или, по крайней мере, JRE, где вы добавили провайдера безопасности, поддерживающего gkr), вы можете попробовать keystoreType="gkr" в вашей конфигурации <Connector /> .

Однако проще всего, вероятно, использовать keytool, как это предусмотрено Oracle или OpenJDK, и использовать тип хранилища JKS (который будет типом по умолчанию, если вы запускаете Apache Tomcat с OpenJDK или Sun / Oracle JRE). Вероятно, он был установлен вместе с вашей JRE, но он не похож на $JAVA_HOME, который вы используете, указывает на Oracle или OpenJDK JAVA_HOME. В некоторых дистрибутивах Linux есть механизмы для установки нескольких JRE и настройки ссылок (update-alternatives в семействе Debian / Ubuntu).

(Как примечание, обычно не рекомендуется запускать Apache Tomcat от имени пользователя root, что вы, похоже, делаете, поскольку $HOME/.keystore - это /root/.keystore в вашем примере.)

1 голос
/ 30 июня 2011

Как сказал Бруно, я использовал "неправильный" инструмент!

В моей установке Debian 6 есть эти keytools

root@host:~# 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
root@host:~# echo $JAVA_HOME
/usr

Теперь я использовал

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

Для создания хранилища ключей-файла. Tomcat запускается без проблем!

0 голосов
/ 13 июня 2012

Если вы используете GNU jvm и keytool, вы можете добавить следующие параметры к соединителю Tomcat в server.xml , чтобы заставить его работать: keystoreType="gkr" algorithm="JessieX509"

Алгоритмупоминается в здесь

0 голосов
/ 30 июня 2011

Попробуйте указать тип магазина: -storetype JKS (см .: http://download.oracle.com/javase/6/docs/technotes/tools/solaris/keytool.html)

...