如何验证证书链以确保其CA证书和中间证书仅在线可用

时间:2019-08-18 14:02:43

标签: c# x509certificate x509certificate2

我正在尝试验证证书链,该证书链的一部分是脱机证书文件,而另一部分(根CA和中间证书)处于联机状态。

我的链由7个证书组成,链中的最后4个证书脱机存储,而包含一个根CA和2个中间产品的3个证书则在线存储。

第4个证书(第一个证书脱机)具有远程证书的URI,我想验证从叶到根的整个链,我尝试使用X509Chain.Build()方法,但是我一直收到PartialChain错误。

我更喜欢仅使用.Net库,但是也欢迎使用充气城堡库的正确解决方案。

注意:

  • 我不介意收到不受信任的root错误,因为root不在我的计算机上本地安装,这就是我想要的样子。

  • 脱机存储的4个证书是简单文件,不是已安装的证书,同样,这是有目的的。

public static bool VerifyCertificateChain(ArrayList certChain, byte[] leaf)
{
    X509Chain chain = new X509Chain();
    chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck; // not checking revocation for now

    // Here I add all offline certificates
    foreach(byte[] cert in certChain)
    {
        chain.ChainPolicy.ExtraStore.Add(new X509Certificate2(cert));
    }

    bool ret = chain.Build(new X509Certificate2(leaf));

    // Always false for me
    if(!ret)
    {
        // Here I get PartialChain status even though the chain is complete
        foreach(X509ChainStatus status in chain.ChainStatus)
        {
            Console.WriteLine(status.ToString() + " - " + status.StatusInformation);
        }
    }

    return ret;
}

我希望Build方法返回true,或者以不受信任的根状态返回false,但是为什么我获得PartialChain状态?

0 个答案:

没有答案