Java keytool 不喜欢 OpenSSL CSR

Java keytool doesn't like OpenSSL CSR

我正在尝试使用 OpenSSL 创建自签名 SSL 证书,然后将该证书添加到 JKS 文件(Java 密钥库),这样我就可以让基于 Jetty 的 Web 服务为自己服务- 通过 HTTPS 向 HTTP 客户端签名的证书。

我创建了 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

知道问题出在哪里吗?

openssl 创建PEM 格式文件,而keytool 将jks 格式。

这是将证书从 pem 转换为 jks 的方法:

猫cert_public_key.pemcert_private_key.pem | openssl pkcs12 -export -out cert.p12

keytool -importkeystore -srckeystore cert.p12 -srcstoretype pkcs12 -destkeystore cert.jks

问题的发生是因为 keytool genkey -alias myorg ... 创建了一个密钥对,而 openssl req 命令也创建了一个不相关的密钥对。因此,尝试从 openssl req 命令将证书导入 myorg 别名下的 JKS 密钥库会导致两个不同的 public 密钥之间发生冲突。如果您打算将受信任的证书导入密钥库,则只需在所需的别名下进行导入,无需使用 keytool genkey ....

提前创建别名