我有一个 p7b 证书,我将其导入 IIS 并导出到下面的 3 .cer 文件。
- 根证书
- 中间体
- 服务器证书.cer
然后我使用以下命令将所有 3 个 cer 成功插入到我的密钥库中。
keytool -import -alias root -keystore test.keystore -trustcacert -file root.cer
然后我运行 wildfly,出现错误“密钥库不包含任何密钥”,但当我列出密钥库时,里面有所有 3 个密钥。我不确定为什么它不起作用,希望有人能告诉我。
答案1
Java 密钥库可以包含(至少)两种不同类型的条目:
包含证书的“trustedCertEntry”条目
包含私钥和证书链的“privateKeyEntry”
您通过导入单独的证书创建了第一种;查看显示屏keytool -list
,这些条目将被标记为trustedCertEntry
。SSL/TLS 服务器需要私钥和证书链,以privateKeyEntry
.
我不知道 ISS,但如果您的意思是您在 IIS 中生成了密钥和 CSR,IIS 通常会将 Windows 密钥库用于某些系统帐户;我不记得是哪个了,但它应该在配置的某个地方很明显。您需要为该帐户运行 MMC+CertMgr,找到正确的条目(在证书图标左侧有一个黄色的钥匙),然后使用“是导出私钥”以“PKCS#12 (PFX)”格式将其导出到文件。在许多情况下,Java/JCE 可以直接使用 PKCS12 文件作为密钥库(而不是 JKS),但如果您需要或更喜欢转换为 JKS,请使用keytool -importkeystore
(不是-importcert
)。
另请参阅 near-dupe使用 CER/P7b 证书的 JBoss Https 配置失败