Tomcat 6中使用SSL的密钥库格式无效

str*_*rry 9 ssl tomcat6

我正在尝试在我的本地Tomcat 6安装中设置SSL.为此,我按照官方的方法执行以下操作:

$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
Run Code Online (Sandbox Code Playgroud)

然后更改$ 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" />
Run Code Online (Sandbox Code Playgroud)

启动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)
Run Code Online (Sandbox Code Playgroud)

当我看到密钥库时,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
Run Code Online (Sandbox Code Playgroud)

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

Bru*_*uno 13

看起来keytool你正在使用GNU实现,而不是Oracle/Sun或OpenJDK.从输出中keytool -list,它生成一个gkr商店类型,这是一个GNU Keyring商店.

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

如果您使用支持的GNU JRE运行Apache Tomcat gkr(或者至少是您添加了支持的安全提供程序的JRE gkr),您可以尝试keystoreType="gkr"进行<Connector />配置.

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

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