如何把 KEY 和 CRT 文件合并成 PEM

PEM 就是文本拼接:cat certificate.crt private.key > combined.pem。本文讲清合并顺序、是否加入证书链、验证方法与 haproxy 等场景的要求。

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

一句话回答:PEM 文件本质就是 PEM 格式文本的拼接,用 cat 直接合并:cat server.crt server.key > server.pem。多数场景顺序建议证书在前、私钥在后**;如果还有中间证书(证书链),按"站点证书 → 中间证书 → 私钥"的顺序拼。合并后用 openssl x509 -in server.pem -noout -text 验证。**

合并命令

umask 077  # 新建的组合文件包含私钥
cat server.crt server.key > server.pem

# 有中间证书/证书链时
cat server.crt intermediate.crt server.key > server.pem

Windows 的字节拼接示例(还需按 Windows ACL 限制私钥文件访问):

cmd /c "copy /b server.crt+server.key server.pem"

或者直接用文本编辑器:新建文件,依次粘贴证书全文、私钥全文(各含 BEGIN/END 行)。

顺序的讲究

  • HAProxy 可使用包含站点证书、证书链和私钥的 PEM;站点证书须在证书链前,具体加载方式按版本配置,不能概括为所有 PEM 块必须固定顺序
  • Nginx 通常分别使用 ssl_certificate / ssl_certificate_key,Apache 通常使用 SSLCertificateFile / SSLCertificateKeyFile 指定证书和私钥,无须为这些配置特意合并
  • 拿不准时:先查目标软件的 crt/certificate 文档,不能用排列顺序代替它对文件格式的要求

验证合并结果

先确认原文件本身就是 PEM;扩展名 .crt/.key 不能证明编码。读取和检查文件不会验证完整信任链。

openssl x509 -in server.pem -text -noout
openssl pkey -in server.pem -check -noout
openssl x509 -in server.pem -pubkey -noout -out cert-public.pem
openssl pkey -in server.pem -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

仅在所有命令成功且两个公钥摘要一致时判断密钥配套。相比 RSA modulus + MD5,该方法也支持 EC 等常见密钥;服务加载前还须检查链、域名和有效期。

检查文件内容

合并后打开看一眼,结构应该是:

-----BEGIN CERTIFICATE-----     ← 站点证书
...
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----     ← 私钥(或 RSA PRIVATE KEY)
...
-----END PRIVATE KEY-----

每个块的 BEGIN/END 行必须完整,必须确保每个 END 与下一个 BEGIN 各自独占一行,普通空行通常可接受。

常见问题(FAQ)

Q:什么时候才需要合并 PEM?

A:看软件要求:HAProxy、部分负载均衡器、某些云平台的证书上传要求"证书+私钥合一"。Nginx/Apache 分开配置即可,不需要合并。

Q:合并后私钥安全吗?

A:合并文件包含私钥,等同私钥文件管理:chmod 600 server.pem、属主为受控服务账户或管理员、不进 Git、不随镜像分发。

Q:cat 合并后软件报错 PEM 格式错误?

A:检查原文件结尾是否有换行——CRT 文件末尾没有换行时,END 行和下一个 BEGIN 行会粘在一起。cat 前确保每个文件以换行结尾,或粘贴时手工补空行。

核查依据

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


延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台