如何把 PEM 文件拆分为 CRT 证书和 KEY 私钥

openssl pkey -in file.pem -out private.key 提取私钥,openssl x509 -in file.pem -out certificate.crt 提取证书。本文讲清 PEM 的结构、拆分命令与格式验证方法。

最佳实践
应用程序模块协作插画

一句话回答:PEM 是一种文本编码封装;只有文件实际包含证书和私钥块时才可拆出两者,用两条 openssl 命令分别提取:openssl pkey -in 文件.pem -out private.key 提取私钥,openssl x509 -in 文件.pem -out certificate.crt 提取证书。拆分后按服务器要求分别配置即可。

PEM 文件里有什么

PEM 是 Base64 文本格式的容器,一个文件里可以依次包含:

-----BEGIN PRIVATE KEY-----        ← 私钥
...
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----        ← 站点证书
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----        ← 中间证书(可选,可能有多个)
...
-----END CERTIFICATE-----

用文本编辑器打开 PEM,看 BEGIN 行就知道里面有几样东西。

拆分命令

umask 077  # 在创建私钥文件前限制新文件权限
# 提取私钥(默认输出未加密;需加密时加 -aes-256-cbc)
openssl pkey -in combined.pem -out private.key

# 提取站点证书(第一个 CERTIFICATE 块)
openssl x509 -in combined.pem -out certificate.crt

# 导出所有证书(含首张站点证书,并非仅中间证书)
openssl crl2pkcs7 -nocrl -certfile combined.pem | openssl pkcs7 -print_certs -out all-certs.pem

验证拆分结果

以下公钥摘要比较适用于 RSA、EC 等常见密钥,不仅限于 RSA modulus。每个命令须成功后再比较,不能把两个失败命令产生的空摘要当作匹配:

openssl x509 -in certificate.crt -text -noout
openssl pkey -in private.key -check -noout
openssl x509 -in certificate.crt -pubkey -noout -out cert-public.pem
openssl pkey -in private.key -pubout -out key-public.pem
openssl pkey -pubin -in cert-public.pem -outform DER -out cert-public.der
openssl pkey -pubin -in key-public.pem -outform DER -out key-public.der
openssl dgst -sha256 cert-public.der key-public.der

公钥摘要相同表示密钥匹配,不证明证书链受信任或尚未过期。错误配对也可能直接使服务器拒绝加载配置。只需中间证书时,应根据证书 Subject/Issuer 和 CA 的官方链文件选取;不能把上面的全证书导出误当成纯中间链。

也可以手工拆

PEM 是纯文本,用编辑器把各 -----BEGIN/END----- 块分别复制成独立文件也行。注意每个块必须完整(含 BEGIN/END 行),且不要带入多余空行空格。openssl 命令方式更安全,不会引入格式污染。

常见问题(FAQ)

Q:.pem、.crt、.cer、.key 后缀有什么区别?

A:后缀只是约定,内容才是关键:.pem 是 Base64 文本容器(可装证书/私钥/链);.crt/.cer 通常是证书;.key 通常是私钥。服务器软件看内容不看后缀。

Q:提取私钥时报错 unable to load key?

A:PEM 里可能没有私钥(有些证书包里只有证书和链)。打开文件看有没有 BEGIN ... PRIVATE KEY 块;没有就找签发时的 .key 文件,私钥由申请者生成或保存在密钥管理设施中,不能从公开证书反推,丢了只能重新签发。

Q:拆分后的文件权限怎么设?

A:私钥必须严格保护:chmod 600 private.key、属主设为实际受控服务账户或管理员;证书可以 644。私钥泄露等于证书作废,需吊销重签。

核查依据

本文依据官方文档核对,示例未在实际业务环境运行;上线前请按部署版本、权限与数据范围验证。


延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台