我有 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
。