我正在尝试使用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
知道问题是什么吗?
答案 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 ...
创建别名。