我正在尝试验证证书链,该证书链的一部分是脱机证书文件,而另一部分(根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状态?