下面按常见场景给你总结 Linux 下用 OpenSSL 进行证书/密钥格式转换的方法,基本覆盖 90% 的使用情况。
| 格式 | 扩展名 | 说明 |
|---|---|---|
| PEM | .pem / .crt / .key |
Base64,最常见 |
| DER | .der / .cer |
二进制格式 |
| PKCS12 | .p12 / .pfx |
包含证书 + 私钥 |
| PKCS1 | .pem |
老 RSA 私钥格式 |
| PKCS8 | .pem |
新私钥格式(推荐) |
# 证书
openssl x509 -in cert.pem -outform der -out cert.der
# 私钥
openssl rsa -in key.pem -outform der -out key.der
# 证书
openssl x509 -in cert.der -inform der -out cert.pem
# 私钥
openssl rsa -in key.der -inform der -out key.pem
openssl pkcs12 -export \
-out cert.pfx \
-inkey key.pem \
-in cert.pem \
-certfile ca.pem # 可选(中间证书)
会提示输入导出密码。
openssl pkcs12 -in cert.pfx -out all.pem -nodes
openssl pkcs12 -in cert.pfx -nocerts -out key.pem -nodes
openssl pkcs12 -in cert.pfx -nokeys -out cert.pem
-nodes:不加密私钥(不加则会用密码保护)
openssl pkcs8 -topk8 -nocrypt -in key_pkcs1.pem -out key_pkcs8.pem
openssl rsa -in key_pkcs8.pem -out key_pkcs1.pem
cat cert.pem key.pem > full.pem
顺序必须是:证书在前,私钥在后
# 查看 PEM 证书
openssl x509 -in cert.pem -text -noout
# 查看 PFX 内容
openssl pkcs12 -in cert.pfx -info
✅ PEM 文件通常包含:
-----BEGIN CERTIFICATE-----
✅ 私钥权限要安全:
chmod 600 key.pem
✅ 如果提示 unable to load private key,多半是格式不匹配(PKCS1 / PKCS8 / DER)
| 需求 | 命令 |
|---|---|
| PEM → PFX | openssl pkcs12 -export |
| PFX → PEM | openssl pkcs12 -in |
| PEM → DER | openssl x509 -outform der |
| RSA 私钥转换 | openssl rsa |
| 查看证书 | openssl x509 -text |
如果你有具体文件(比如 .pfx、.cer、.pem),可以直接贴出用途(Nginx / Java / Docker / HTTPS),我可以给你精准命令。