gpt4 book ai didi

ssl - OCSP 查询没有颁发者证书的中间证书

转载 作者:太空宇宙 更新时间:2023-11-03 14:31:42 26 4
gpt4 key购买 nike

我已经编写了一个在 Java 中进行相互身份验证的 TLS 代码,因此客户端在服务器发送其证书后发送其证书。我想通过从客户端到服务器端的 OCSP 验证证书链中的所有证书。

我已经编写了我的循环逻辑,假设最后一个证书是链中的根 (CA) 证书,并且不为其发送任何 OCSP 查询;

    int certificateChainSize= x509Certificates.length;

// Verifies certificate chain respectively (issuer certificate required).
CertificateResult response = null;

try {
for (int i = 0; i < certificateChainSize-1 ; i++) {
response = client.verify(x509Certificates[i], x509Certificates[i+1]);
}
} catch (OcspException e) {
e.printStackTrace();
}

当我测试 TLS 并获得 Wireshark 捕获时,我意识到作为客户端的 Google Chrome 一直在发送没 Root过的证书链。因此;由于循环逻辑,不会查询中间证书,因为我的代码假定中间证书是根证书。我需要颁发者证书来验证链中的任何证书。是否有无颁发者证书的机制验证(如:根证书)。

最佳答案

我认为,您的设计存在缺陷。

当您没有根证书时,无需针对 OCSP 服务器验证证书,因为该链不受信任且 OCSP 验证毫无意义。

在主要的密码库中,吊销检查是构建所有可能的证书链、选择最佳链并根据各种验证规则成功验证的最后一步(其中大部分在 §6 of RFC 5280 中进行了描述)。只有当所有检查都成功时,客户端才会尝试对链中的每个证书进行吊销检查。成功的链构建和验证将意味着您已经拥有受信任的根证书,因为有效的链是建立在根证书上的。

此外,正如您在之前的帖子中所说的那样 Force Chrome to send all certificates in chain during TLS :

For maximum compatibility, all implementations SHOULD be prepared to handle potentially extraneous certificates and arbitrary orderings from any TLS version, with the exception of the end-entity certificate which MUST be first.

此声明意味着后续i+1 证书可能不是当前i 证书的颁发者。结果,这一行:

response = client.verify(x509Certificates[i], x509Certificates[i+1]);

会返回意想不到的结果,因为它的输入是错误的。

您真正应该做的是:让 OS 加密库(作为操作系统的一部分提供)完成最艰巨的工作。我强烈建议不要发明自己的加密货币并使用经过验证的工具。每个操作系统都有 API,可以构建、安排和验证证书链,并为您返回最好的证书链。您应该使用此链作为您的 OCSP 验证代码的输入,您的 for 循环将被认为是可靠的(取决于 verify 方法的内部逻辑)。

正如我所说,如果链构建过程失败,则没有太多理由执行 OCSP 验证。

关于ssl - OCSP 查询没有颁发者证书的中间证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52217543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com