服务器发送完整certs链的一些优势
当某个证书被请求时(例如TLS握手/ocsp验证时),服务器可以只返回请求的那个证书。
不过,如果返回完整的证书链,则有如下两点好处。
返回完整证书链的好处
1.加快客户端证书链的构建
假设服务器只返回了目标证书,客户端只好根据目标证书的AIA信息依次下载上游证书,这显然很耗时。
2.提高新根证书的下游证书在持有旧根证书的设备上成功构建证书链的概率
[老根 IdenTrust] [新根 ISRG Root X1]
| |
V (签发) V (签发)
[中间证书 R3 (交叉版)] [中间证书 R3 (原生版)]
| |
+--------------+---------------+
| (它们公钥相同,共享同一把私钥)
+----------------------------+
| |
V (签发终端证书) V (签发OCSP证书)
[网站终端证书] [R3_ocsp 证书]
旧设备的证书链构建逻辑不如现在设备智能,假设服务器向旧设备发送如下证书链:
网站终端证书|中间证书 R3 (原生版)
对于旧设备,大概率会:
- 本地没找到中间证书 R3 (原生版)的上游
- 于是根据AIA的中的信息下载ISRG Root X1证书(有的旧设备甚至没这个功能,证书链于是构建失败)
- 不认识ISRG Root X1证书,证书链构建失败
但是如果服务器改为向旧设备发送如下证书链:
网站终端证书|中间证书 R3 (交叉版)
对于旧设备:
显然可以快速构建证书链进行验证。
对于新设备:
1.使用一些预加载机制,在本地查找中间证书 R3 (交叉版)的上游证书。找到则构建成功 2.没找到的话就根据中间证书 R3 (交叉版)的AIA中的信息下载上游 IdenTrust证书,只用下载1次。
在完整证书链中包含交叉证书时,新设备上的证书链也能构建成功,构建速度也比直接下载证书快。
所以当被请求的证书所在链结构上的证书有交叉签名的版本时,服务器会倾向于在发送的完整证书链中包含证书的交叉签名版本。这样可以提高旧设备上证书链构建的成功率。