我有一个如下所示的证书链:root CA -> intermediate CA -> client certificate。如何验证收到的证书是否是由“根 CA”显式创建的?
验证整个链条不是问题。这可以这样做:
X509Certificate2 rootCert = new X509Certificate2(rootCertFile);
X509Certificate2 intermediateCert = new X509Certificate2(intermediateCertFile);
X509Certificate2 clientCert = new X509Certificate2(clientCertFile);
chain.ChainPolicy.ExtraStore.Add(rootCert);
chain.ChainPolicy.ExtraStore.Add(intermediateCert);
if(chain.Build(clientCert))
{
// ... chain is valid
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是证书根据(Windows)证书存储进行验证,但我只想根据特定的根 CA 对其进行验证。
我还认为可以检查是否chain.ChainElements包含我期望的根 CA。但是,如果有人从不同的根 CA 向我发送一条有效链并仅添加我期望的根 CA,该怎么办?