Java keytool不喜欢OpenSSL CSR

时间:2017-12-30 02:30:32

标签: java keytool self-signed jks

我正在尝试使用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

知道问题是什么吗?

2 个答案:

答案 0 :(得分:1)

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

这是如何将证书从pem转换为jks:

cat cert_public_key.pem cert_private_key.pem | openssl pkcs12 -export -out cert.p12

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

答案 1 :(得分:1)

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