共用方式為


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)。 例如 "Encrypting File System" 或 "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 值。 值不一定要在未來。 例如,您可以使用 FindByTimeNotYetValid 尋找當年開始生效的憑證,方法是找出上一年度最後一天之 Find(X509FindType, Object, Boolean)FindByTimeNotYetValid 運算結果與 Find(X509FindType, Object, Boolean)FindByTimeValidNow 運算的交集。

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 傳回的憑證聯集代表查詢集合中的所有憑證。

適用於