Недопустимый формат хранилища ключей с SSL в Tomcat 6

Я пытаюсь настроить SSL в моей локальной установке 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

затем изменение $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)

когда я смотрю в keystore с 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 ответов


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

Я не уверен, используете ли вы 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 вы используете point для Oracle или OpenJDK JAVA_HOME. Некоторые дистрибутивы Linux имеют механизмы для установки нескольких JREs и настройки ссылок (update-alternatives в семействе Debian / Ubuntu).

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


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

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

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 запускается без проблем!


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


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

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