chain.pem 文件的用途是什么?

joe*_*not 9 https tls letsencrypt certbot

关于 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 文件将证书安装回我的主机;一切都进行得相当顺利;

我的问题是“链”文件的用途是什么,因为我没有在任何地方使用它们;它们在什么场景下会有用?

use*_*686 7

您的 Certbot 输出有点不寻常。您应该收到一个“fullchain.pem”文件,其中包含按正确顺序排列的所有内容,而不是多个单独的文件。

\n

(更不用说手动安装本身 \xe2\x80\x93 您将必须自动执行此操作。)

\n
\n

我的问题是“链”文件的用途是什么

\n
\n

所有WebPKI证书颁发机构至少有一个两层系统:

\n
    \n
  1. 安全离线存储的根 CA 证书对中间(颁发)CA 证书进行签名。
  2. \n
  3. 在线存储的中间 CA 对服务器(终端实体)证书进行签名。
  4. \n
\n

例如,这是Let's Encrypt的图表,其层次结构通常是:

\n
Root: "DST Root CA X3" (or possibly "ISRG Root X1")\n\\-- Issuing: "Let\'s Encrypt R3"\n    \\-- End-entity: "letsencrypt.org"\n
Run Code Online (Sandbox Code Playgroud)\n

大多数 TLS 客户端(浏览器、操作系统)仅附带root根证书这样,每次 CA 更改其基础结构 \xe2\x80\x93 时,仅当添加或删除 CA 本身时,它们才需要更新。

\n

但是,要验证每个证书的签名,您需要拥有前一个证书(例如,您不能仅使用根 CA \xe2\x80\x93 直接验证服务器证书的签名,两者之间没有直接的加密关系)他们俩)。

\n

这意味着客户端必须拥有所有中间证书才能完成根 CA 之间的链。如果缺少任何中间体,客户端就不再有足够的信息来验证其余中间体。

\n

对于 HTTPS,主要方法是让服务器发送其所有链证书 \xe2\x80\x93,因为服务器应该已经拥有它们。

\n

某些 Web 浏览器对此 \xe2\x80\x93 有替代机制,例如,Firefox 保留“以前见过的”中间体的缓存,而 Windows 尝试使用证书中的 AIA URL 下载中间体。

\n

但并非所有浏览器都会这样做,而且重要的是,大多数非 Web TLS 客户端不会这样做任何此类替代方案。虽然不完整的链通常适用于 HTTPS,但它不适用于 SMTP 或 IRC 等。

\n
\n

然后,我使用 cert.pem 文件将证书安装回我的主机;一切都进行得相当顺利

\n
\n

最有可能的是,它仅适用于某些用户(主要是 Windows 和 Firefox),而许多其他用户则被排除在外。不要认为因为它可以在您自己的系统上运行,所以它也一定可以在其他人的系统上运行。

\n

SSL Labs等工具gnutls-cli example.com:443会在服务器未发送完整链的情况下向您发出警告。

\n

然而,无论“您的主机”是什么,也有可能主动从 AIA 信息下载中间体(我有点怀疑 Windows\' IIS可能会这样做),自动填补空白。但即使在任何地方这样做,也是相当罕见的。

\n

常规 Certbot 使用

\n

通常,Certbot 会将收到的证书以“准备使用”格式存储在/etc/letsencrypt/live文件夹中,其中 fullchain.pem 包含主机的证书以及所需的任何父证书。例如,在 Apache httpd 2.4.x 中,您将使用:

\n
SSLCertificateFile    /etc/letsencrypt/live/example.net/fullchain.pem\nSSLCertificateKeyFile /etc/letsencrypt/live/example.net/privkey.pem\n
Run Code Online (Sandbox Code Playgroud)\n