如何使用OpenSSL向现有PKCS12密钥库导入指定别名的新密钥对
操作方案
OpenSSL 本身不支持直接向已有 PKCS12 密钥库追加条目,你可以通过以下两种方式实现需求:
方法一:使用 Java 自带 keytool 实现(推荐,Tomcat 环境默认可用)
步骤1:将新的密钥对证书打包为临时 PKCS12 文件
替换命令中对应变量为你实际使用的私钥密码$phrase、密钥库密码$keystore_pwd即可:
# 合并新的私钥和证书为临时PEM文件 cat id_rsa_order.example.com.key order.example.com.crt > order_tmp.pem # 导出为临时PKCS12文件,别名为order.example.com openssl pkcs12 \ -export \ -in order_tmp.pem \ -passin pass:$phrase \ -password pass:$keystore_pwd \ -name order.example.com \ -out order_tmp.p12 rm order_tmp.pem
步骤2:将临时 PKCS12 的内容导入到已有密钥库
keytool -importkeystore \ -srckeystore order_tmp.p12 \ -srcstoretype PKCS12 \ -srcstorepass $keystore_pwd \ -destkeystore example.com.pkcs12 \ -deststoretype PKCS12 \ -deststorepass $keystore_pwd
导入完成后删除临时文件order_tmp.p12即可,原有authserver.example.com条目不会被覆盖,你可以直接用KeyStore Explorer验证新增的order.example.com条目。
方法二:仅使用 OpenSSL 实现
如果你的环境没有Java,可以通过先导出原有PKCS12所有条目、再合并新条目、重新打包的方式实现:
步骤1:导出原有PKCS12密钥库的所有内容为PEM格式
openssl pkcs12 \ -in example.com.pkcs12 \ -passin pass:$keystore_pwd \ -passout pass:$phrase \ -nodes \ -out all_certs_tmp.pem
步骤2:将新的私钥和证书追加到导出的PEM文件末尾
cat id_rsa_order.example.com.key order.example.com.crt >> all_certs_tmp.pem
步骤3:将合并后的PEM重新打包为新的PKCS12密钥库
openssl pkcs12 \ -export \ -in all_certs_tmp.pem \ -passin pass:$phrase \ -password pass:$keystore_pwd \ -out example.com_new.pkcs12
步骤4:验证并替换原有密钥库
验证新生成的example.com_new.pkcs12包含两个别名条目后,替换原有example.com.pkcs12即可,最后删除临时文件all_certs_tmp.pem。
内容的提问来源于stack exchange,提问作者zappee
相关产品推荐
相关产品推荐

