← 返回工具列表

证书转换工具(OpenSSL)

本页面介绍如何使用 OpenSSL 命令行工具,从 .pfx / .cer / .crt / .der 文件中导出私钥公钥(PEM 格式),方便您在使用加解密 / 签名验签工具时粘贴对应的密钥字符串。

提示:如果尚未安装 OpenSSL,可在 openssl.org 下载,或使用系统自带版本(macOS / Linux 通常已预装,Windows 可安装 Git for Windows 自带 openssl)。

场景 1:从 .pfx 文件导出私钥和公钥

.pfx / .p12 文件(PKCS#12 格式)通常同时包含私钥证书(含公钥),需要先用 OpenSSL 将其分离为 PEM 格式文件。

步骤 1:从 .pfx 导出私钥

1导出私钥(未加密,直接获取 -----BEGIN PRIVATE KEY-----)
openssl pkcs12 -in cert.pfx -nocerts -nodes -passin pass:证书密码

输出示例(复制 -----BEGIN PRIVATE KEY----- 到 -----END PRIVATE KEY----- 之间的全部内容):

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC6...
...(中间省略)...
-----END PRIVATE KEY-----
2同时将私钥保存为文件(方便后续使用)
openssl pkcs12 -in cert.pfx -nocerts -nodes -passin pass:证书密码 -out private.key
参数说明:
-nocerts:只导出私钥,不带证书
-nodes:不对导出的私钥加密(不设置密码保护,方便直接使用)
-passin pass:密码:.pfx 文件的密码
-out 文件名:将结果保存为文件

步骤 2:从 .pfx 导出公钥(从证书中提取)

1先从 .pfx 导出证书(含公钥)
openssl pkcs12 -in cert.pfx -nokeys -passin pass:证书密码 -out cert.pem
2从证书文件中提取公钥(-----BEGIN PUBLIC KEY-----)
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

场景 2:从 .cer / .crt / .der 文件导出公钥

.cer / .crt 文件通常是 PEM 格式的证书,.der 文件是 DER 格式的证书,两者都包含公钥,可直接提取。

情况 A:文件是 PEM 格式(.cer / .crt 常见)

1直接提取公钥(-----BEGIN PUBLIC KEY-----)
openssl x509 -in cert.cer -pubkey -noout

如果是 .crt 文件,命令相同:

openssl x509 -in cert.crt -pubkey -noout

输出示例:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr...
...(中间省略)...
-----END PUBLIC KEY-----

情况 B:文件是 DER 格式(.der 或某些 .cer)

1使用 -inform DER 参数提取公钥
openssl x509 -in cert.der -inform DER -pubkey -noout
如何判断文件格式?
用文本编辑器打开文件,如果看到 -----BEGIN CERTIFICATE-----,说明是 PEM 格式
如果是乱码(二进制),说明是 DER 格式,需要加 -inform DER 参数。

情况 C:只想查看证书内容(不是提取公钥)

openssl x509 -in cert.cer -noout -subject -issuer -dates

如何使用导出的密钥

私钥(-----BEGIN PRIVATE KEY-----):复制从 -----BEGIN PRIVATE KEY----------END PRIVATE KEY-----(包含这两行)的全部内容,粘贴到工具页面的「私钥」输入框中。
公钥(-----BEGIN PUBLIC KEY-----):复制从 -----BEGIN PUBLIC KEY----------END PUBLIC KEY-----(包含这两行)的全部内容,粘贴到工具页面的「公钥」输入框中。
注意:复制时请确保包含 -----BEGIN----------END----- 这两行,以及中间的 Base64 内容,缺一不可!

常用命令速查

从 .pfx 导出

# 导出私钥(终端直接输出)
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