Недопустимый формат хранилища ключей с 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"
алгоритм упоминается в здесь