【发布时间】:2018-05-06 06:27:44
【问题描述】:
我第一次尝试在 tomcat 8 中实现 SSL。
我有第三方签署的 .pem 文件形式的 X.509 证书。
但是当我尝试启动 tomcat 配置后,它给了我以下错误:
2017 年 11 月 22 日 18:48:01.735 信息 [主要] org.apache.coyote.AbstractProtocol.init 初始化 ProtocolHandler [“https-jsse-nio-8443”] 2017 年 11 月 22 日 18:48:01.897 严重 [主要] org.apache.coyote.AbstractProtocol.init 无法初始化端点 与 ProtocolHandler ["https-jsse-nio-8443"] 关联 java.lang.IllegalArgumentException: java.io.IOException: 别名 [null] 不识别关键条目 在...
以下是我遵循的步骤:
- 将 certificate.pem 重命名为 certificate.p7b。
- 应用以下命令将证书导入密钥库:
D:\keytest2>keytool -import -alias tomcat -trustcacerts -file certificate.p7b -keystore keystore.kdb
输入密钥库密码:test
重新输入新密码:test
...
...
证书已添加到密钥库
- 已检查导入证书:
D:\keytest2>keytool -list -v -keystore keystore.kd
这给了我以下信息:
密钥库类型:JKS 密钥库提供者:SUN
您的密钥库包含 1 个条目
别名:tomcat 创建日期:2017年11月22日 条目类型:trustedCertEntry ... ...
Tomcat 配置:
<Connector port="8443" protocol="HTTP/1.1"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="file:///D:/keytest2/keystore.kdb" keystorePass="test"
clientAuth="false" sslProtocol="TLS">
请指导我哪里做错了。
【问题讨论】:
-
证书不是私钥。任何 SSL/TLS 服务器都需要证书(通常带有链)和匹配的私钥,而 Java(包括传统上的 Tomcat)通常需要它们在密钥库文件中作为 PrivateKeyEntry 而不是 TrustedCertEntry。 (Tomcat 8.5 up 在形式上具有更大的灵活性,但实质是相同的。)如果您生成了密钥(和 CSR),请提供详细信息;否则从做过的人那里得到它。 BTW p7b 格式与普通 cert 格式不同,认为它们相同会让您感到困惑,尽管代码会忽略并且不会被文件扩展名混淆。
-
你是对的。我没有私钥。所以我尝试使用 openssl 工具生成证书和密钥。现在我有证书和密钥。你能告诉我如何将它们导入密钥库并在 tomcat 中配置吗?提前致谢。
-
我是从ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/… 找到的。我已经使用 openssl 创建了证书和密钥文件并将它们组合在一起。它对我有用。谢谢。
标签: java tomcat ssl x509 pkcs#11