.pfx / .p12 文件(PKCS#12 格式)通常同时包含私钥和证书(含公钥),需要先用 OpenSSL 将其分离为 PEM 格式文件。
openssl pkcs12 -in cert.pfx -nocerts -nodes -passin pass:证书密码
输出示例(复制 -----BEGIN PRIVATE KEY----- 到 -----END PRIVATE KEY----- 之间的全部内容):
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC6...
...(中间省略)...
-----END PRIVATE KEY-----
openssl pkcs12 -in cert.pfx -nocerts -nodes -passin pass:证书密码 -out private.key
-nocerts:只导出私钥,不带证书-nodes:不对导出的私钥加密(不设置密码保护,方便直接使用)-passin pass:密码:.pfx 文件的密码-out 文件名:将结果保存为文件
openssl pkcs12 -in cert.pfx -nokeys -passin pass:证书密码 -out cert.pem
openssl x509 -in cert.pem -pubkey -noout
输出示例(复制 -----BEGIN PUBLIC KEY----- 到 -----END PUBLIC KEY----- 之间的全部内容):
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr...
...(中间省略)...
-----END PUBLIC KEY-----
openssl pkcs12 -in cert.pfx -nokeys -passin pass:证书密码 | openssl x509 -pubkey -noout
.cer / .crt 文件通常是 PEM 格式的证书,.der 文件是 DER 格式的证书,两者都包含公钥,可直接提取。
openssl x509 -in cert.cer -pubkey -noout
如果是 .crt 文件,命令相同:
openssl x509 -in cert.crt -pubkey -noout
输出示例:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr...
...(中间省略)...
-----END PUBLIC KEY-----
openssl x509 -in cert.der -inform DER -pubkey -noout
-----BEGIN CERTIFICATE-----,说明是 PEM 格式;-inform DER 参数。
openssl x509 -in cert.cer -noout -subject -issuer -dates
-----BEGIN PRIVATE KEY----- 到 -----END PRIVATE KEY-----(包含这两行)的全部内容,粘贴到工具页面的「私钥」输入框中。
-----BEGIN PUBLIC KEY----- 到 -----END PUBLIC KEY-----(包含这两行)的全部内容,粘贴到工具页面的「公钥」输入框中。
-----BEGIN----- 和 -----END----- 这两行,以及中间的 Base64 内容,缺一不可!
# 导出私钥(终端直接输出)
openssl pkcs12 -in cert.pfx -nocerts -nodes -passin pass:密码
# 导出私钥(保存为文件)
openssl pkcs12 -in cert.pfx -nocerts -nodes -passin pass:密码 -out private.key
# 导出证书
openssl pkcs12 -in cert.pfx -nokeys -passin pass:密码 -out cert.pem
# 一步导出公钥
openssl pkcs12 -in cert.pfx -nokeys -passin pass:密码 | openssl x509 -pubkey -noout
# PEM 格式(.cer / .crt)
openssl x509 -in cert.cer -pubkey -noout
# DER 格式(.der)
openssl x509 -in cert.der -inform DER -pubkey -noout
# 查看完整信息
openssl x509 -in cert.cer -noout -text
# 只查看主题、颁发者、有效期
openssl x509 -in cert.cer -noout -subject -issuer -dates