当前基于Linux系统,通过openssl和keytool工具进行转换操作,keytool命令可以通过jdk相关包组获取,如yum install openjdk-asmtools。
1、证书格式简介
| 格式 | 扩展名 | 特点 | 适用场景 |
|---|---|---|---|
| PEM | .pem, .crt, .key | Base64 编码的文本格式,可存储证书、私钥或 CA 链。 | Nginx、Apache、Linux 环境 |
| JKS | .jks | Java 密钥库格式,可存储多个证书和私钥(需密码保护)。 | Tomcat、Spring Boot |
| PFX/P12 | .pfx, .p12 | PKCS#12 格式,可存储证书、私钥和 CA 链(需密码保护)。 | Windows IIS、Java Keystore |
注1:.pfx和.p12二者只是扩展名不同而已,内容完全一样,出于习惯来讲,Windows/IIS常用.pfx,Linux/OpenSSL常用.p12。
注2:通常情况下私钥使用.key或key.pem,证书使用.crt、.cer或cert.pem。
2、PEM转JKS
由于JKS是Java专属格式,如需要JKS格式则先将PEM转为PKCS12(P12),再转JKS
PEM先转PKCS12(P12)
|
1 |
openssl pkcs12 -export -in cert.pem -inkey key.pem -out cert.p12 -passout pass:PASSWORD |
注1:-passout pass:PASSWORD这里的PASSWORD是密码,如果不加此参数,则在执行命令后,需要手动输入密码。
PKCS12再转JKS
|
1 |
keytool -importkeystore -srckeystore cert.p12 -srcstoretype pkcs12 -destkeystore cert.jks -deststoretype jks -srcstorepass PASSWORD -deststorepass PASSWORD |
注1:-srcstorepass PASSWORD表示源密钥库(cert.p12)的密码是PASSWORD,-deststorepass PASSWORD表示目标密钥库(cert.jks)的密码是PASSWORD,目标密钥库(cert.jks)的密码可以和源密钥库(cert.p12)的相同,也可以不同。
注2:如果省略-srcstorepass PASSWORD和-deststorepass PASSWORD参数,会提示你手动输入源密钥库和目标库的密码。
3、PEM转PFX/P12
|
1 |
openssl pkcs12 -export -in cert.pem -inkey key.pem -out cert.pfx -passout pass:PASSWORD |
注:PFX和P12是同一格式,仅扩展名称不同而已。
4、PEM转DER
|
1 |
openssl x509 -in cert.pem -outform der -out cert.der |
5、JKS转PEM
JKS不能直接转PEM,如需要PEM格式,则先转PKCS12,再提取证书和私钥
JKS先转PKCS12(P12)
|
1 |
keytool -importkeystore -srckeystore cert.jks -destkeystore cert.p12 -deststoretype pkcs12 -srcstorepass PASSWORD -deststorepass PASSWORD |
PKCS12再转私钥(key.pem)
|
1 |
openssl pkcs12 -in cert.p12 -nocerts -out key.pem -nodes -passin pass:PASSWORD |
注:-nodes参数表示私钥不加密(否则 Nginx 无法直接使用)。
PKCS12再转证书(cert.pem)
|
1 |
openssl pkcs12 -in cert.p12 -nokeys -out cert.pem -passin pass:PASSWORD |
6、JKS转PFX/P12
|
1 |
keytool -importkeystore -srckeystore cert.jks -destkeystore cert.pfx -deststoretype pkcs12 -srcstorepass PASSWORD -deststorepass PASSWORD |
原文链接:PEM、JKS证书转换命令,转载请注明来源!






