X509FindType 枚举

定义

指定 Find(X509FindType, Object, Boolean) 方法搜索的值的类型。

public enum class X509FindType
public enum X509FindType
type X509FindType = 
Public Enum X509FindType
继承
X509FindType

字段

名称 说明
FindByThumbprint 0

findValue该方法的参数Find(X509FindType, Object, Boolean)必须是表示证书指纹的字符串。

FindBySubjectName 1

findValue方法的参数Find(X509FindType, Object, Boolean)必须是表示证书使用者名称的字符串。 这比枚举值提供的 FindBySubjectDistinguishedName 搜索更具体。 FindBySubjectName使用值,该方法Find(X509FindType, Object, Boolean)使用提供的值执行不区分大小写的字符串比较。 例如,如果将“MyCert”传递给 Find(X509FindType, Object, Boolean) 该方法,它将查找包含该字符串的使用者名称的所有证书,而不考虑其他使用者值。 按可分辨名称进行搜索是更精确的搜索。

FindBySubjectDistinguishedName 2

findValue该方法的参数Find(X509FindType, Object, Boolean)必须是表示证书使用者可分辨名称的字符串。 这是比枚举值提供的 FindBySubjectName 更具体的搜索。 FindBySubjectDistinguishedName使用该值,该方法Find(X509FindType, Object, Boolean)对整个可分辨名称执行不区分大小写的字符串比较。 按使用者名称搜索是不太精确的搜索。

FindByIssuerName 3

findValue方法的参数Find(X509FindType, Object, Boolean)必须是表示证书的颁发者名称的字符串。 这比枚举值提供的 FindByIssuerDistinguishedName 搜索更具体。 FindByIssuerName使用值,该方法Find(X509FindType, Object, Boolean)使用提供的值执行不区分大小写的字符串比较。 例如,如果将“MyCA”传递给 Find(X509FindType, Object, Boolean) 该方法,它将查找包含该字符串的颁发者名称的所有证书,而不考虑其他颁发者值。

FindByIssuerDistinguishedName 4

findValue该方法的参数Find(X509FindType, Object, Boolean)必须是表示证书的颁发者可分辨名称的字符串。 这是比枚举值提供的 FindByIssuerName 更具体的搜索。 FindByIssuerDistinguishedName使用该值,该方法Find(X509FindType, Object, Boolean)对整个可分辨名称执行不区分大小写的字符串比较。 按颁发者名称搜索是不太精确的搜索。

FindBySerialNumber 5

findValue该方法的参数Find(X509FindType, Object, Boolean)必须是一个字符串,表示证书对话框显示的证书的序列号,但不包含空格或方法返回。GetSerialNumberString()

FindByTimeValid 6

findValue该方法的参数Find(X509FindType, Object, Boolean)必须是DateTime本地时间中的值。 可用于 Now 查找所有当前有效的证书。

FindByTimeNotYetValid 7

findValue该方法的参数Find(X509FindType, Object, Boolean)必须是DateTime本地时间中的值。 该值不必在将来。 例如,可以使用 FindByTimeNotYetValid 查找在当前年份生效的证书,方法是获取去年最后一Find(X509FindType, Object, Boolean)天的操作FindByTimeNotYetValid结果与操作Find(X509FindType, Object, Boolean)FindByTimeValid结果Now的交集。

FindByTimeExpired 8

findValue该方法的参数Find(X509FindType, Object, Boolean)必须是DateTime本地时间中的值。 例如,可以通过从操作Find(X509FindType, Object, Boolean)结果FindByTimeExpired中消除当年最后一Find(X509FindType, Object, Boolean)天的操作Now结果,找到在年底之前有效的所有证书。

FindByTemplateName 9

findValue该方法的参数Find(X509FindType, Object, Boolean)必须是表示证书的模板名称的字符串,例如“ClientAuth”。 模板名称是一个 X509 版本 3 扩展,用于指定证书的使用。

FindByApplicationPolicy 10

findValue该方法的参数Find(X509FindType, Object, Boolean)必须是表示应用程序策略友好名称或证书的对象标识符(OID 或Oid)的字符串。 例如,可以使用“加密文件系统”或“1.3.6.1.4.1.311.10.3.4”。 对于要本地化的应用程序,必须使用 OID 值,因为友好名称已本地化。

FindByCertificatePolicy 11

findValue该方法的参数Find(X509FindType, Object, Boolean)必须是表示证书策略的友好名称或对象标识符(OID 或Oid)的字符串。 最佳做法是使用 OID,例如“1.3.6.1.4.1.311.10.3.4”。 对于要本地化的应用程序,必须使用 OID,因为友好名称已本地化。

FindByExtension 12

findValue该方法的参数Find(X509FindType, Object, Boolean)必须是描述要查找的扩展的字符串。 对象标识符(OID)通常用于指示 Find(X509FindType, Object, Boolean) 方法搜索具有与 OID 值匹配的扩展的所有证书。

FindByKeyUsage 13

findValue该方法的参数Find(X509FindType, Object, Boolean)必须是表示密钥用法的字符串,或者是表示包含所有请求密钥用法的位掩码的整数。 对于字符串值,一次只能指定一个键用法,但 Find(X509FindType, Object, Boolean) 可以在级联序列中使用该方法来获取所请求用法的交集。 例如, findValue 可以将参数设置为“KeyEncipherment”或整数(0x30指示“KeyEncipherment”和“DataEncipherment”)。 X509KeyUsageFlags还可以使用枚举的值。

FindBySubjectKeyIdentifier 14

findValue该方法的参数Find(X509FindType, Object, Boolean)必须是一个字符串,表示十六进制中的主题密钥标识符,如 UI 中显示的“F3E815D45E83B8477B9284113C64EF208E897112”。

示例

以下示例打开当前用户的个人证书存储区,仅查找有效的证书,允许用户选择证书,然后将证书信息写入控制台。 输出取决于所选证书。

using System;
using System.Security.Cryptography;
using System.Security.Permissions;
using System.IO;
using System.Security.Cryptography.X509Certificates;

class CertSelect
{
    static void Main()
    {
        X509Store store = new X509Store("MY",StoreLocation.CurrentUser);
        store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

        X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
        X509Certificate2Collection fcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid,DateTime.Now,false);
        X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection, "Test Certificate Select","Select a certificate from the following list to get information on that certificate",X509SelectionFlag.MultiSelection);
        Console.WriteLine("Number of certificates: {0}{1}",scollection.Count,Environment.NewLine);

        foreach (X509Certificate2 x509 in scollection)
        {
            try
            {
                byte[] rawdata = x509.RawData;
                Console.WriteLine("Content Type: {0}{1}",X509Certificate2.GetCertContentType(rawdata),Environment.NewLine);
                Console.WriteLine("Friendly Name: {0}{1}",x509.FriendlyName,Environment.NewLine);
                Console.WriteLine("Certificate Verified?: {0}{1}",x509.Verify(),Environment.NewLine);
                Console.WriteLine("Simple Name: {0}{1}",x509.GetNameInfo(X509NameType.SimpleName,true),Environment.NewLine);
                Console.WriteLine("Signature Algorithm: {0}{1}",x509.SignatureAlgorithm.FriendlyName,Environment.NewLine);
                Console.WriteLine("Public Key: {0}{1}",x509.PublicKey.Key.ToXmlString(false),Environment.NewLine);
                Console.WriteLine("Certificate Archived?: {0}{1}",x509.Archived,Environment.NewLine);
                Console.WriteLine("Length of Raw Data: {0}{1}",x509.RawData.Length,Environment.NewLine);
                X509Certificate2UI.DisplayCertificate(x509);
                x509.Reset();
            }
            catch (CryptographicException)
            {
                Console.WriteLine("Information could not be written out for this certificate.");
            }
        }
        store.Close();
    }
}
Imports System.Security.Cryptography
Imports System.Security.Permissions
Imports System.IO
Imports System.Security.Cryptography.X509Certificates

Class CertSelect

    Shared Sub Main()

        Dim store As New X509Store("MY", StoreLocation.CurrentUser)
        store.Open(OpenFlags.ReadOnly Or OpenFlags.OpenExistingOnly)

        Dim collection As X509Certificate2Collection = CType(store.Certificates, X509Certificate2Collection)
        Dim fcollection As X509Certificate2Collection = CType(collection.Find(X509FindType.FindByTimeValid, DateTime.Now, False), X509Certificate2Collection)
        Dim scollection As X509Certificate2Collection = X509Certificate2UI.SelectFromCollection(fcollection, "Test Certificate Select", "Select a certificate from the following list to get information on that certificate", X509SelectionFlag.MultiSelection)
        Console.WriteLine("Number of certificates: {0}{1}", scollection.Count, Environment.NewLine)
         
        For Each x509 As X509Certificate2 In scollection
            Try
                Dim rawdata As Byte() = x509.RawData
                Console.WriteLine("Content Type: {0}{1}", X509Certificate2.GetCertContentType(rawdata), Environment.NewLine)
                Console.WriteLine("Friendly Name: {0}{1}", x509.FriendlyName, Environment.NewLine)
                Console.WriteLine("Certificate Verified?: {0}{1}", x509.Verify(), Environment.NewLine)
                Console.WriteLine("Simple Name: {0}{1}", x509.GetNameInfo(X509NameType.SimpleName, True), Environment.NewLine)
                Console.WriteLine("Signature Algorithm: {0}{1}", x509.SignatureAlgorithm.FriendlyName, Environment.NewLine)
                Console.WriteLine("Public Key: {0}{1}", x509.PublicKey.Key.ToXmlString(False), Environment.NewLine)
                Console.WriteLine("Certificate Archived?: {0}{1}", x509.Archived, Environment.NewLine)
                Console.WriteLine("Length of Raw Data: {0}{1}", x509.RawData.Length, Environment.NewLine)
                X509Certificate2UI.DisplayCertificate(x509)
                x509.Reset()         
             Catch cExcept As CryptographicException
                 Console.WriteLine("Information could not be written out for this certificate.")
             End Try
        Next x509

        store.Close()
    End Sub
End Class

注解

X509FindType标识方法的参数findValueFind提供的值的类型。 可以使用 X509FindType 主题名称、指纹、序列号、有效日期范围或其他值搜索 X509Certificate2 集合。

可以使用值类型的组合 FindByTime 来查找在给定时间范围内有效的证书。 使用 FindByTimeValid、FindByTimeNotYetValid 和 FindByTimeExpired 返回的证书联合表示查询集合中的所有证书。

适用于