X509FindType 枚举

定义

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

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

字段

FindByApplicationPolicy 10

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

FindByCertificatePolicy 11

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

FindByExtension 12

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

FindByIssuerDistinguishedName 4

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

FindByIssuerName 3

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

FindByKeyUsage 13

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

FindBySerialNumber 5

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

FindBySubjectDistinguishedName 2

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

FindBySubjectKeyIdentifier 14

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

FindBySubjectName 1

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

FindByTemplateName 9

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

FindByThumbprint 0

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

FindByTimeExpired 8

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

FindByTimeNotYetValid 7

Find(X509FindType, Object, Boolean) 方法的 findValue 参数必须是一个以当地时间表示的 DateTime 值。 值不必处于将来时间。 例如,通过从 FindByTimeNotYetValidFind(X509FindType, Object, Boolean)FindByTimeNotYetValid 操作的结果中采用去年最后一天的 Find(X509FindType, Object, Boolean)FindByTimeValid 操作的结果的交集,可以使用 Now 来查找已在当前年中有效的证书。

FindByTimeValid 6

Find(X509FindType, Object, Boolean) 方法的 findValue 参数必须是一个以当地时间表示的 DateTime 值。 可使用 Now 查找当前有效的所有证书。

示例

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

#using <System.dll>
#using <System.Security.dll>

using namespace System;
using namespace System::Security::Cryptography;
using namespace System::Security::Permissions;
using namespace System::IO;
using namespace System::Security::Cryptography::X509Certificates;
int main()
{
   try
   {
      X509Store ^ store = gcnew X509Store( "MY",StoreLocation::CurrentUser );
      store->Open( static_cast<OpenFlags>(OpenFlags::ReadOnly | OpenFlags::OpenExistingOnly) );
      X509Certificate2Collection ^ collection = dynamic_cast<X509Certificate2Collection^>(store->Certificates);
      X509Certificate2Collection ^ fcollection = dynamic_cast<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 );
      System::Collections::IEnumerator^ myEnum = scollection->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         X509Certificate2 ^ x509 = safe_cast<X509Certificate2 ^>(myEnum->Current);
         array<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( "Private Key: {0}{1}", x509->PrivateKey->ToXmlString( false ), 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 );
         x509->Reset();
      }
      store->Close();
   }
   catch ( CryptographicException^ ) 
   {
      Console::WriteLine( "Information could not be written out for this certificate." );
   }

}
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标识方法的 参数FindfindValue提供的值的类型。 可以使用 X509FindType 按使用者名称、指纹、序列号、有效日期范围或其他值搜索 X509Certificate2 集合。

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

适用于