关于 chaim.pem 文件的一般问题;我使用从我的主机获得的 csr,并使用 LetsEncrypt 的 Certbot 生成 https 证书;我使用了以下命令
$ certbot certonly --manual --csr file-with-my-csr.txt
certbot产生了3个文件0000_cert.pem、0000_chain.pem、0001_chain.pem;然后我使用 cert.pem 文件将证书安装回我的主机;一切都很顺利。
我的问题是“链”文件的用途是什么,因为我没有在任何地方使用它们;它们在什么场景下有用?
您的 Certbot 输出有点不寻常。您应该已经收到了一个“fullchain.pem”文件,其中包含按正确顺序排列的所有内容,而不是几个单独的文件。
(更不用说手动安装本身了——你将不得不自动化这个。)
所有 WebPKI 证书颁发机构都至少有一个两层系统:
例如,这是Let's Encrypt的图表,其层次结构通常是:
大多数 TLS 客户端(浏览器、操作系统)仅预装了根证书。这样就不需要在每次 CA 更改其基础架构时更新它们 - 只有在添加或删除 CA 本身时。
但是,要验证每个证书的签名,您需要拥有前一个证书(例如,您不能仅使用根 CA 直接验证服务器证书的签名——两者之间没有直接的加密关系)。
这意味着客户端必须拥有所有中间证书才能完成根 CA 之间的链。如果缺少任何中间体,则客户端不再有足够的信息来验证其余部分。
对于 HTTPS,主要方法是让服务器发送其所有链证书——因为服务器应该已经拥有它们。
一些网络浏览器为此提供了替代机制——例如,Firefox 保留“以前见过”中间体的缓存,而 Windows 尝试使用证书中的 AIA URL 下载中间体。
但并非所有浏览器都这样做,重要的是,大多数非 Web TLS 客户端根本没有任何此类替代方案。虽然不完整的链通常适用于 HTTPS,但不适用于 SMTP 或 IRC。
最有可能的是,它只适用于某些用户(主要是 Windows 和 Firefox),但还有许多其他用户被排除在外。不要假设因为它适用于您自己的系统,它就必须适用于其他所有人的系统。
SSL Labs等工具
gnutls-cli example.com:443
会在服务器未发送完整链的情况下向您发出警告。然而,任何“你的主机”也有可能主动从 AIA 信息中下载中间体(我有点怀疑 Windows 的 IIS可能会这样做),自动填补空白。但如果在任何地方都这样做,那就很少见了。
常规 Certbot 使用
通常,Certbot 将接收到的证书以“准备使用”格式存储在
/etc/letsencrypt/live
文件夹中,fullchain.pem 包含主机证书和任何必要的父证书。例如,在 Apache httpd 2.4.x 中,您将使用:可以在这里找到一个简单的解释
首先,什么是PEM:
什么是 PEM 文件:
与 SSL 证书一起使用的 Pem 文件:
那么什么是chain.pem?
这些
chain.pem
文件包含您的中间证书。安装 SSL 证书时,您必须安装站点证书以及中间证书。有重要的。如此处所述:
在这里: