【问题标题】:How can I get the "purpose" (Client Authentication Certificate) of a certificate in .NET?如何在 .NET 中获得证书的“用途”(客户端身份验证证书)?
【发布时间】:2011-04-15 14:36:49
【问题描述】:

我想从X509Store(StoreLocation.CurrentUser)查找所有客户端认证证书

有没有办法做到这一点?即使通过获取所有然后按某个属性进行过滤以获取所有客户端身份验证证书?

【问题讨论】:

    标签: .net authentication ssl certificate client-certificates


    【解决方案1】:

    有一些扩展可以帮助识别可以用作客户端证书的内容:

    • Extended Key Usage extension,如果存在则为 id-kp-clientAuth
    • “旧版”Netscape 证书类型扩展(不是严格标准,但被广泛采用,甚至在 Netscape/Mozilla 工具之外)。

    完全没有这些扩展的证书也可以用作客户端证书,只要它与(non-extended) Key Usage extension(如果存在)兼容。您至少在(非扩展)密钥使用扩展中需要的是digitalSignature 用于客户端证书。如果您同时获得 Netscape Cert Type 和 Extended Key Usage 扩展,目前还不清楚会发生什么,尽管本着 RFC 5280 的精神,值得考虑将其用于与所有现有扩展兼容的目的:

    如果证书包含两个密钥 使用扩展和扩展密钥 使用扩展,然后是两个扩展 必须独立处理并且 证书必须仅用于 与两者一致的目的 扩展名。如果没有目的 与这两个扩展一致, 则不得使用证书 出于任何目的。

    NSS Technical Note 3 (All About Certificate Extensions) 应该很有趣。

    【讨论】:

    • 我忘了补充,你还需要检查链中CA证书所需的扩展值(见NSS技术说明)。
    【解决方案2】:

    您需要检查每个证书的Extensions。据我所知,一旦你使用了Key Usage 扩展,你应该拥有你需要的所有信息。

    编辑 实际上,对于客户端身份验证,您可能需要增强型密钥使用扩展。我没有客户端身份验证证书来测试它,但以下打印了我拥有的服务器证书的“服务器身份验证”:

            var cert1 = new X509Certificate2(/* Path to certificate */);
            foreach (var ext in cert1.Extensions)
            {
                var eku = ext as X509EnhancedKeyUsageExtension;
                if (eku != null)
                {
                    foreach (var oid in eku.EnhancedKeyUsages)
                    {
                        Console.WriteLine(oid.FriendlyName);
                    }
                }
            }
    

    【讨论】:

    • 我安装了一个用户身份验证证书,为此我浏览了所有 .Extensions,但其中没有一个看起来对这个目的实际上有用。 X509EnhancedKeyUsageExtension 类型中也没有它们
    • @dr. evil - 我刚刚使用我们的测试 CA(标准 Windows CA)生成了一个客户端身份验证证书,并且代码打印了“客户端身份验证”。如果您的证书没有 EnhancedKeyUsage 扩展,它有哪些扩展? (我的客户端身份验证证书也有 X509KeyUsageExtension,带有 DataEncipherment、KeyEncipherment、NonRepudiation、DigitalSignature)
    • 它有 1-X509BasicConstraintsExtension, 3-X509Extension ("Netscape comment", "Subject Key Identifier","Auth Key")
    猜你喜欢
    • 1970-01-01
    • 2011-04-09
    • 2013-10-07
    • 2013-01-26
    • 2018-02-12
    • 2023-04-10
    • 2022-06-23
    • 2012-09-01
    • 1970-01-01
    相关资源
    最近更新 更多