Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# X509VerificationFlags.IgnoreEndRevocationUnknown做什么?_C#_Cryptography_X509certificate2 - Fatal编程技术网

C# X509VerificationFlags.IgnoreEndRevocationUnknown做什么?

C# X509VerificationFlags.IgnoreEndRevocationUnknown做什么?,c#,cryptography,x509certificate2,C#,Cryptography,X509certificate2,验证证书的唯一方法是将X509ChainPolicy对象的VerificationFlags属性设置为IgnoreEndRevocationUnknown标志 我正在验证的证书是一个有效的ssl证书,由我根据我也创建的CA证书创建。证书的“证书路径”选项卡(在Windows资源管理器中查看)显示“此证书无问题”消息 如果我不使用IgnoreEndRevocationUnknown标志,我会得到一个状态信息,表示吊销功能无法检查证书的吊销 所以,我不知道为什么我会这样,需要使用国旗。下面是一些代码

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

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

如果我不使用IgnoreEndRevocationUnknown标志,我会得到一个状态信息,表示吊销功能无法检查证书的吊销

所以,我不知道为什么我会这样,需要使用国旗。下面是一些代码:

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分布点
    证书扩展
  • CRL分布点
    ,但客户端无法访问任何URL
默认情况下,有些应用程序使用此标志,但是我强烈建议通过包含CDP扩展和全局可用且可访问的URL以供CRL下载来解决此问题


并且不要使用此标志,因为当客户端成功验证并接受吊销的证书时,它会导致安全漏洞。

IgnoreEndRevocationUnknown忽略
RevocationOffline
错误。这些错误是在CA配置不正确且未提供证书吊销信息时导致的:

  • 颁发的证书不包含
    CRL分布点
    证书扩展
  • CRL分布点
    ,但客户端无法访问任何URL
默认情况下,有些应用程序使用此标志,但是我强烈建议通过包含CDP扩展和全局可用且可访问的URL以供CRL下载来解决此问题


不要使用此标志,因为当客户端成功验证并接受吊销的证书时,它会导致安全漏洞。

Crypt32的回答和建议非常好,但很明显,在某些用例中,您可能不想验证CRL,或者根本无法验证CRL,因为无法通过网络访问它。在这些情况下,您可以设置

chain.ChainPolicy.RevocationMode = System.Security.Cryptography.X509Certificates.X509RevocationMode.NoCheck;
而且它将完全跳过对链中所有证书的检查(可能节省一些时间,如网络超时)


注意:在Windows中查看证书时,只需双击它并获取证书属性对话框,Windows将不会在显示此证书正常时执行CRL检查。该消息仅由您信任颁发证书这一事实决定。

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

chain.ChainPolicy.RevocationMode = System.Security.Cryptography.X509Certificates.X509RevocationMode.NoCheck;
而且它将完全跳过对链中所有证书的检查(可能节省一些时间,如网络超时)


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

谢谢。我必须对CDP等做一些进一步的研究。我真的不打算在任何地方托管CA更新点。但也许我需要。再次感谢,谢谢。我必须对CDP等做一些进一步的研究。我真的不打算在任何地方托管CA更新点。但也许我需要。再次感谢。