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 ...
.
提前创建别名
我正在尝试使用 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 ...
.