ssl - Tomcat 6 中使用 SSL 的无效 keystore 格式

标签 ssl tomcat6

我正在尝试在本地 Tomcat 6 安装中设置 SSL。为此,我关注了官方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 查看 keystore 时,我得到了

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

显然, keystore 类型不同。我怎样才能改变类型,这会解决我的问题吗?谢谢!

最佳答案

它看起来像 keytool你正在使用 GNU implementation ,而不是来自 Oracle/Sun 或 OpenJDK 的。来自 keytool -list 的输出,它会生成一个 gkr商店类型,即 GNU Keyring Store .

我不确定您是使用 OpenJDK 还是 Sun/Oracle JRE 运行 Apache Tomcat,在这种情况下,如果没有额外的安全提供程序,将不支持这种格式。

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

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

(作为旁注,通常不建议以 root 身份运行 Apache Tomcat,您似乎正在这样做,因为在您的示例中 $HOME/.keystore/root/.keystore。)

关于ssl - Tomcat 6 中使用 SSL 的无效 keystore 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6535920/

相关文章:

SSL 证书过期 | Plesk 中的错误

java - 是否有 : java. lang.RuntimeException 的解决方法:无法生成 DH key 对

python - 使用证书存储将证书加载到 ssl 中,而不是文件路径;与 python

Oracle UCP驱动和tomcat : threads failing to stop

tomcat6 - 如何创建 Play 框架应用程序 WAR 文件并将其部署在 Tomcat 6 中

java - 让tomcat在日志语句中记录webapp名称

android - 如何在 android 网络库 (ION) 中使用自签名 SSL?

Python/AWS 海王星得到 "tornado.httpclient.HTTPError: HTTP 403: Forbidden"

java - 在tomcat中设置上下文变量

Maven 部署仅针对某些包静默失败