X509VerificationFlags.IgnoreEndRevocationUnknown做什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了X509VerificationFlags.IgnoreEndRevocationUnknown做什么?相关的知识,希望对你有一定的参考价值。

我可以验证证书的唯一方法是将X509ChainPolicy对象的VerificationFlags属性设置为IgnoreEndRevocationUnknown标志。

我正在验证的证书是一个有效的ssl证书,由我创建的CA证书创建。证书的“证书路径”选项卡(在Windows资源管理器中查看)显示消息没有问题此证书正常。

如果我不使用IgnoreEndRevocationUnknown标志,我得到一个StatusInformation,其中吊销功能无法检查证书的吊销。

所以,我不确定为什么我会这样做,并且需要使用旗帜。这是一些代码:

var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);

var cert = store.Certificates.Find(
    X509FindType.FindBySubjectName,
    "DaveSvrCert", false
    )[0];

var chain = new X509Chain();
var policy = new X509ChainPolicy
{
    RevocationFlag = X509RevocationFlag.EntireChain,
    RevocationMode = X509RevocationMode.Online,
    VerificationFlags = X509VerificationFlags.IgnoreEndRevocationUnknown
};

chain.ChainPolicy = policy;

if (!chain.Build(cert))
{
    foreach (var chainElement in chain.ChainElements)
    {
        foreach (var chainElementStatus in chainElement.ChainElementStatus)
        {
            Console.WriteLine(chainElementStatus.Status + ": ");
            Console.WriteLine(chainElementStatus.StatusInformation);
        }
    }
}

干杯!

答案

IgnoreEndRevocationUnknown忽略了RevocationOffline错误。如果CA配置不正确并且未提供证书吊销信息,则会导致这些错误:

  • 颁发的证书不包含CRL Distiribution Points证书扩展
  • 提供了CRL Distiribution Points,但客户端无法访问任何URL。

默认情况下,某些应用程序使用此标志,但我强烈建议通过将CDP扩展包含在CRL下载的全局可用和可访问URL中来解决此问题。

并且不要使用此标志,因为它会在客户端成功验证并接受已撤销的证书时打开安全漏洞。

另一答案

Crypt32的答案和建议很棒,但显然有些用例你可能不想验证,或者根本无法验证CRL,因为它无法通过网络访问。在这些情况下,您可以设置

chain.ChainPolicy.RevocationMode = System.Security.Cryptography.X509Certificates.X509RevocationMode.NoCheck;

对于链中的所有证书,它将完全跳过检查(可能节省一些时间,如网络超时)。

附:在Windows中查看证书时,只需双击它并获取证书属性对话框,Windows在显示此证书时就不会执行CRL检查。该消息仅取决于您信任颁发的证书。

以上是关于X509VerificationFlags.IgnoreEndRevocationUnknown做什么?的主要内容,如果未能解决你的问题,请参考以下文章

x509的简介

X.509

将 python x509 签名请求对象 (x509.CertificateSigningRequest) 对象转换为字节

X.509:私钥/公钥

X509Chain.Build(...) System.InvalidCastException 从 X509Certificate 到 X509Certificate2

X509 证书生成