在文件夹中/etc/ssl/certs/
我可以看到:
- 证书的符号链接存储在
/usr/share/ca-certificates/
ca-certificates.crt
包含所有 PEM 格式证书的BUNDLE 文件
我只看到根 CA 证书...我没有看到中间 CA 证书?为什么?
例如,使用 Let's encrypt CA,我可以找到:
- ISRG_Root_X1.pem
- ISRG_Root_X2.pem
但是 Let's encrypt 中间证书在哪里? 在我写这个问题的时候,有 4 个中间 CR 证书:
- E5
- E6
- R10
- R11
我猜想我的电脑上某个地方有这个,因为我可以成功与服务器建立 SSL 连接(使用 let's encrypt 证书)。
您误解了证书的使用方式。
您看到的是信任锚。这些是您(或您的操作系统,或操作系统的开发人员)信任的根 CA。
当您使用连接到远程服务(例如 Web 服务器)时,服务器会将其证书(例如 unix.stackexchange.com)以及验证该证书所需的所有中间证书一直发送到根。详细信息请参阅RFC 5246。只有当签署第一个中间证书的根位于您的信任锚存储中时,您才会信任该证书链,该存储位置
/etc/ssl/certs/
如您所指出的。因此,回答您的问题“但是让我们加密中间证书在哪里?” - 它们安装在远程系统上。
如果您是服务器,则中间证书将存储在一个文件中,其位置取决于服务。通常,服务配置文件将有一个条目指向要使用的中间证书,或者(更可能)指向由中间证书和服务器证书组成的链文件。
如果您来自 Windows 世界,您可能已经看到过安装在用户或计算机证书存储中的中间 CA。这只是因为 Windows 在本地缓存中间 CA 证书并使其在 UI 中可见。
不要指望在当地找到它们!
大多数情况下,该过程如下:
在 SSL 协商期间,服务器发送一个 PEM 文件,其中包含以下内容:
在本地,你只需要有根 CA 证书。这足以保证整个链的信任。
注意:我只谈论了 Linux。Mozilla Firefox 的工作方式不同,它将中间 CA 证书存储在内部 SQLite 数据库中。
这个链接让我大开眼界: Aarch_forum