客户说我只有 pem 证书,无法找到公钥,该怎么办?

206 阅读2分钟

要从 PEM 格式的证书中提取公钥,可以使用 ​OpenSSL​ 工具(最常用的证书处理工具)。以下是具体步骤:

前提条件

确保已安装 OpenSSL:

  • Linux/macOS​:通常系统已预装(可通过 openssl version验证)。
  • Windows​:需自行安装(如通过 OpenSSL 官网下载,或使用 WSL、Git Bash 等工具内置的 OpenSSL)。

步骤 1:确认证书是 PEM 格式

PEM 证书的特征是文件内容以 -----BEGIN CERTIFICATE-----开头,以 -----END CERTIFICATE-----结尾(可能包含换行符)。例如:

-----BEGIN CERTIFICATE-----
MIICUTCCAfugAwIBAgIBADANBgkqhkiG9w0BAQQFADBXMQswCQYDVQQGEwJDTjEL
MAkGA1UECBMCUE4xCzAJBgNVBAcTAkNOMQswCQYDVQQKEwJPTjELMAkGA1UECxMC
VU4xCzAJBgNVBAMTAkRLMA0GCSqGSIb3DQEBBQUAA4GBADswXU8Qz3+5h6z7QZJz
...(中间内容)...
-----END CERTIFICATE-----

步骤 2:使用 OpenSSL 提取公钥

假设你的证书文件名为 certificate.pem,执行以下命令:

openssl x509 -in certificate.pem -pubkey -noout > public_key.pem

参数说明:

  • x509:指定处理 X.509 证书。
  • -in certificate.pem:输入证书文件路径。
  • -pubkey:提取公钥。
  • -noout:不输出原始证书内容(仅输出公钥)。
  • > public_key.pem:将提取的公钥保存到 public_key.pem文件(可自定义输出路径)。

步骤 3:验证公钥是否正确(可选)​

提取后,可通过以下命令查看公钥详情,确认是否与证书匹配:

openssl rsa -pubin -in public_key.pem -text -noout
  • -pubin:指定输入是公钥(而非私钥)。
  • -text:显示公钥的详细信息(如模数、指数等)。

常见问题

  1. 证书是 DER 格式怎么办?​

    如果证书是二进制 DER 格式(非 PEM),需先用 openssl x509 -inform der -in certificate.der -pubkey -noout提取公钥。

  2. 提示 “openssl 不是内部或外部命令”?​

    Windows 用户需将 OpenSSL 安装目录添加到环境变量 PATH,或使用完整路径(如 C:\OpenSSL-Win64\bin\openssl.exe)。

  3. 公钥格式说明

    提取的公钥默认是 PEM 格式(以 -----BEGIN PUBLIC KEY-----开头),也支持转换为其他格式(如 OpenSSH 公钥),可通过 ssh-keygen -f public_key.pem -i -m PKCS8转换(需确认公钥类型)。

通过以上步骤,你可以轻松从 PEM 证书中提取公钥。