【发布时间】:2017-12-30 02:30:31
【问题描述】:
我正在尝试使用 OpenSSL 创建自签名 SSL 证书,然后将该证书添加到 JKS 文件(Java 密钥库)中,以便我可以让基于 Jetty 的 Web 服务将该自签名证书提供给 HTTP 客户端通过 HTTPS。
我创建了 OpenSSL 自签名证书:
openssl req -x509 -newkey rsa:4096 -keyout mykey-dev.pem -out mycsr-dev.pem -days 3650
然后我创建了 JKS:
keytool -alias myorg -keyalg RSA -keystore myapp.jks -keysize 2048
我相信我现在需要将 CSR (mycsr-dev.pem) 导入 JKS:
keytool -importcert -trustcacerts -file mycsr-dev.pem -alias myorg -keystore myapp.jks
这会产生以下错误:
keytool error: java.lang.Exception: Public keys in reply and keystore don't match
知道问题出在哪里吗?
【问题讨论】:
-
好吧,您使用 -genkey 创建了一个密钥对,然后将一个不相关的密钥导入到同一个别名中。跳过 genkey 步骤。
-
谢谢@JamesKPolk (+1) - 请看我上面的编辑...这是你的建议吗?
-
跳过整个命令。
-
那行得通@JamesKPolk (+1) - 如果你愿意,如果你在下面添加一个简单的 1-liner 答案来解释为什么第二个命令是不必要的 + 有问题的,我很乐意给你绿色检查!
-
(1) 您创建了密钥和证书,而不是 CSR;它们是不同的东西。
openssl req -new单独创建CSR,不能作为证书使用;openssl req -new -x509创建一个不是 CSR 的证书。 (2) 你根本不需要 OpenSSL;只是keytool -genkey[pair](您错误地从您的 Q 中删除)会自动生成一个密钥和一个自签名证书。对于 TLS 服务器,在“名字和姓氏”提示中指定 FQDN,或使用-dname CN=FQDN
标签: java keytool self-signed jks