如何将私有、公共 PEM 文件及其 cer 文件转换为完整链和私钥?

如何将私有、公共 PEM 文件及其 cer 文件转换为完整链和私钥?

我有 3 个文件,一个私有 pem 证书、一个公共 pem 证书和一个包含签署这些证书的 CA 的文件。(它是纯文本)。我正在尝试设置 grafana,它需要一个 rsa 私钥和一个全链证书。

我不太清楚什么是全链。我知道如何将私钥 pem 转换为 rsa 私钥 openssl rsa -in private.pem -out rsa_private.key

我尝试将纯文本粘贴为完整链,但是不起作用。(日志消息指出failed to find certificate PEM data in certificate intput, but did find a private key; PEM inputs may have been switched:)

我能够使用我自己的自签名证书使其工作,如 grafana 文档页面中所述,但似乎无法集成我需要的 CA。

任何帮助都将非常有帮助,谢谢。

答案1

“fullchain” 不是一种证书类型;它是包含 PEM 格式证书的文件的常用名称其颁发的 CA 一起。(“fullchain.pem”文件名由最初的 Let's Encrypt ACME 客户端 Certbot 推广,实际上是“cert.pem”和“chain.pem”文件的组合。)

完整的链文件通常如下所示,其中服务器自己的证书始终位于顶部:

-----BEGIN CERTIFICATE-----
<data of end-entity cert>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<data of intermediate cert>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<data of root cert>
-----END CERTIFICATE-----

在其典型定义中(即 Certbot 生成的内容),“fullchain.pem”文件包含仅有的证书,而不是私钥——密钥在其自己的文件中保持独立。

(注意:虽然我在“完整链”示例中包含了根 CA,但大多数时候你不会实际上添加根 CA — 客户端无论如何都有它。)

(注 2:某些 CA(例如 Sectigo)将此称为“逆转”;Sectigo 的“正常”链文件实际上是根优先的,因此与 TLS 的要求相反。)


根据定义,所有证书都是公开的,不存在“私有 pem 证书”。私有文件仅包含一个普通私钥。

最有可能的是,您可以直接使用您的私钥文件而无需进行任何转换(假设您的命令甚至做了任何事情 -在过去它曾经是一种将 PKCS#8 格式的密钥文件转换为较旧的“PEM”格式的方法,但现在它只会输出 PKCS#8,除非您传递-traditional明确请求旧格式)。

  • PKCS#8 格式(密钥类型嵌入在数据中):

    -----开始私钥-----
    <关键数据>
    -----结束私钥-----
  • PKCS#1 又名“PEM”格式(密钥类型通过标题指示):

    -  - -开始RSA私钥-----
    <关键数据>
    -  - -结尾RSA私钥-----

有些程序确实要求证书和私钥位于同一文件中;通常在这种情况下,密钥可以放在最后。(不过,在极少数情况下,您需要按“主机证书 → 主机私钥 → CA 链”的顺序排列它们。)但根据 Grafana 的文档,情况并非如此 - Grafana 只需要 中的证书cert_file,而密钥放在 中cert_key

相关内容