2011-06-30 93 views
9

我试图在本地Tomcat 6安装中设置SSL。对于这一点,我也跟着官方How-To执行以下操作:在Tomcat中使用SSL的密钥库格式无效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) 

当我看着密钥库与keytool -list我得到

[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 

显然,密钥库类型是不同的。我如何更改类型并解决我的问题?谢谢!

回答

13

它看起来像keytool您使用的GNU implementation,而不是从甲骨文/ Sun或OpenJDK的一个。从keytool -list的输出中,它生成一个gkr存储类型,它是一个GNU Keyring Store

我不确定是否使用OpenJDK或Sun/Oracle JRE运行Apache Tomcat,在这种情况下,如果没有其他安全提供程序,将不支持此格式。

如果您运行的Apache Tomcat与GNU JRE支持gkr(在这里您已经添加支持gkr安全提供或至少一个JRE),你可以在你<Connector />配置尝试keystoreType="gkr"

但是,最简单的方法可能是使用由Oracle或OpenJDK提供的keytool,并使用JKS storetype(如果您使用OpenJDK或Sun/Oracle JRE运行Apache Tomcat,则这将是默认类型)。它可能与您的JRE一起安装,但它看起来不像您使用的$JAVA_HOME指向Oracle或OpenJDK JAVA_HOME。一些Linux发行版具有安装多个JRE并配置链接的机制(Debian/Ubuntu系列中的update-alternatives)。

(作为一个侧面说明,它通常不建议运行Apache Tomcat作为根,你似乎因为$HOME/.keystore将做的是在你的例子/root/.keystore。)

+0

非常感谢您的回答:-)还有一些小问题^^哪位用户应该运行Tomcat?如何知道这个keytool的东西?这将是最后一个想到我的电脑上有这么多不同版本的东西?!最后:我用上面提到的命令创建了一个.keystore和一个server.crt。 Tomcat完全启动,但浏览器仍然提到证书不可信......我将创建一个赏金给你一些更多的观点:-) – strauberry

+1

要配置你的多个Java安装,请看[update-java-alternatives] (http://wiki.debian.org/Java/Sun)。看起来你已经使用Debian软件包安装了Tomcat,所以可能会创建一个'tomcat'或'tomcat6'用户。有一个'/ etc/init.d/tomcat6'脚本应该在这个用户下为你启动/停止Tomcat。 '/ usr/share/doc/tomcat6/README.Debian.gz'肯定会有更多关于这方面的信息。 – Bruno

+0

关于服务器证书,由于它是自签名的,因此您需要在您使用的浏览器上手动导入:要么手动添加例外(您可以验证它与您发布的'.crt'匹配:您可以查看它使用'openssl x509 -text -noout -in server.crt'),或直接将'server.crt'文件导入浏览器。 – Bruno

1

正如布鲁诺说,我用“错误“keytool!

还有那些keytools在我的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 

现在我用

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

要创建keystore-文件。 Tomcat的启动没有任何问题!

0

如果您使用GNU jvm和keytool,则可以将以下选项添加到服务器中的Tomcat连接器。XML为了得到它的工作:keystoreType="gkr" algorithm="JessieX509"

该算法在here

相关问题