C# 检查 X509Certificate 是否因 one/all 个目的而被禁用

C# check whether X509Certificate is disabled for one/all purpose(s)

证书已部署为 "Root CA" -> "Intermediate CA" -> "End certificate"。如果我禁用 "Root CA" 证书的所有用途,我是否能够使用最终证书。如何以编程方式检查状态。老实说,我不知道这些单选按钮在证书属性中有什么用,how/where 来检查它的效果?

已通过 "mmc.exe" -> Add/Remove 管理单元 -> 证书 -> 本地计算机 -> 受信任的根证书颁发机构 -> ROOT CA 禁用证书用途,右键单击属性 -> 选择全部禁用此证书的用途。

请帮忙。

whether I will be able to use the end certificate

如果应用程序要求证书链引擎验证特定 EKU OID 的链,您将看到返回错误 (CERT_E_WRONG_USAGE) 并且证书无效。在某些情况下,应用程序不需要整个链中的特定 EKU 有效性,并查看指定的 EKU 是否出现在正在验证的证书中(例如,在验证 OCSP 签名证书时)。在这种情况下,这些设置不会影响证书验证。

how/where to check its effect?

如果您想以编程方式读取这些设置,则必须使用一些互操作并调用 CertGetCertificateContextProperty 本机函数并将 CERT_ENHKEY_USAGE_PROP_ID 作为 PropID 参数的参数传递。我没有 c# 代码,但前段时间我发布了读取这些属性的 PowerShell 代码:How to retrieve certificate purposes property with CryptoAPI and PowerShell