X509Store Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Reprezentuje magazyn X.509, który jest magazynem fizycznym, w którym certyfikaty są utrwalane i zarządzane. Klasa ta nie może być dziedziczona.
public ref class X509Store sealed : IDisposable
public ref class X509Store sealed
public sealed class X509Store : IDisposable
public sealed class X509Store
type X509Store = class
interface IDisposable
type X509Store = class
Public NotInheritable Class X509Store
Implements IDisposable
Public NotInheritable Class X509Store
- Dziedziczenie
-
X509Store
- Implementuje
Przykłady
Ta sekcja zawiera dwa przykłady. W pierwszym przykładzie pokazano, jak można otworzyć standardowe magazyny X.509 i wyświetlić listę liczby certyfikatów w każdym z nich.
W drugim przykładzie pokazano, jak można dodawać i usuwać pojedyncze certyfikaty i zakresy certyfikatów.
Przykład 1
Ten przykład próbuje otworzyć każdy magazyn standardowy w każdej lokalizacji standardowej na bieżącym komputerze. Wyświetla podsumowanie pokazujące, czy każdy magazyn istnieje, a jeśli tak, liczba zawartych w nim certyfikatów.
W przykładzie tworzony jest X509Store obiekt dla każdej kombinacji standardowej nazwy i lokalizacji standardowej. Wywołuje metodę Open z flagą OpenFlags.OpenExistingOnly , która otwiera magazyn fizyczny tylko wtedy, gdy już istnieje. Jeśli magazyn fizyczny istnieje, w przykładzie użyto Namewłaściwości , Locationi Certificates w celu wyświetlenia liczby certyfikatów w magazynie.
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
public class Example
{
static void Main()
{
Console.WriteLine("\r\nExists Certs Name and Location");
Console.WriteLine("------ ----- -------------------------");
foreach (StoreLocation storeLocation in (StoreLocation[])
Enum.GetValues(typeof(StoreLocation)))
{
foreach (StoreName storeName in (StoreName[])
Enum.GetValues(typeof(StoreName)))
{
X509Store store = new X509Store(storeName, storeLocation);
try
{
store.Open(OpenFlags.OpenExistingOnly);
Console.WriteLine("Yes {0,4} {1}, {2}",
store.Certificates.Count, store.Name, store.Location);
}
catch (CryptographicException)
{
Console.WriteLine("No {0}, {1}",
store.Name, store.Location);
}
}
Console.WriteLine();
}
}
}
/* This example produces output similar to the following:
Exists Certs Name and Location
------ ----- -------------------------
Yes 1 AddressBook, CurrentUser
Yes 25 AuthRoot, CurrentUser
Yes 136 CA, CurrentUser
Yes 55 Disallowed, CurrentUser
Yes 20 My, CurrentUser
Yes 36 Root, CurrentUser
Yes 0 TrustedPeople, CurrentUser
Yes 1 TrustedPublisher, CurrentUser
No AddressBook, LocalMachine
Yes 25 AuthRoot, LocalMachine
Yes 131 CA, LocalMachine
Yes 55 Disallowed, LocalMachine
Yes 3 My, LocalMachine
Yes 36 Root, LocalMachine
Yes 0 TrustedPeople, LocalMachine
Yes 1 TrustedPublisher, LocalMachine
*/
Option Strict On
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates
Module Example
Sub Main()
Console.WriteLine(vbCrLf & "Exists Certs Name and Location")
Console.WriteLine("------ ----- -------------------------")
For Each storeLocation As StoreLocation In _
CType([Enum].GetValues(GetType(StoreLocation)), StoreLocation())
For Each storeName As StoreName In _
CType([Enum].GetValues(GetType(StoreName)), StoreName())
Dim store As New X509Store(StoreName, StoreLocation)
Try
store.Open(OpenFlags.OpenExistingOnly)
Console.WriteLine("Yes {0,4} {1}, {2}", _
store.Certificates.Count, store.Name, store.Location)
Catch e As CryptographicException
Console.WriteLine("No {0}, {1}", _
store.Name, store.Location)
End Try
Next
Console.WriteLine()
Next
End Sub
End Module
' This example produces output similar to the following:
'Exists Certs Name and Location
'------ ----- -------------------------
'Yes 1 AddressBook, CurrentUser
'Yes 25 AuthRoot, CurrentUser
'Yes 136 CA, CurrentUser
'Yes 55 Disallowed, CurrentUser
'Yes 20 My, CurrentUser
'Yes 36 Root, CurrentUser
'Yes 0 TrustedPeople, CurrentUser
'Yes 1 TrustedPublisher, CurrentUser
'No AddressBook, LocalMachine
'Yes 25 AuthRoot, LocalMachine
'Yes 131 CA, LocalMachine
'Yes 55 Disallowed, LocalMachine
'Yes 3 My, LocalMachine
'Yes 36 Root, LocalMachine
'Yes 0 TrustedPeople, LocalMachine
'Yes 1 TrustedPublisher, LocalMachine
Przykład 2
Ten przykład otwiera magazyn certyfikatów X.509, dodaje i usuwa certyfikaty, a następnie zamyka magazyn. Przyjęto założenie, że masz trzy certyfikaty do dodania i usunięcia z magazynu lokalnego.
#using <System.dll>
#using <System.Security.dll>
using namespace System;
using namespace System::Security::Cryptography;
using namespace System::Security::Cryptography::X509Certificates;
using namespace System::IO;
int main()
{
//Create new X509 store called teststore from the local certificate store.
X509Store ^ store = gcnew X509Store( "teststore",StoreLocation::CurrentUser );
store->Open( OpenFlags::ReadWrite );
X509Certificate2 ^ certificate = gcnew X509Certificate2;
//Create certificates from certificate files.
//You must put in a valid path to three certificates in the following constructors.
X509Certificate2 ^ certificate1 = gcnew X509Certificate2( "c:\\mycerts\\*****.cer" );
X509Certificate2 ^ certificate2 = gcnew X509Certificate2( "c:\\mycerts\\*****.cer" );
X509Certificate2 ^ certificate5 = gcnew X509Certificate2( "c:\\mycerts\\*****.cer" );
//Create a collection and add two of the certificates.
X509Certificate2Collection ^ collection = gcnew X509Certificate2Collection;
collection->Add( certificate2 );
collection->Add( certificate5 );
//Add certificates to the store.
store->Add( certificate1 );
store->AddRange( collection );
X509Certificate2Collection ^ storecollection = dynamic_cast<X509Certificate2Collection^>(store->Certificates);
Console::WriteLine( "Store name: {0}", store->Name );
Console::WriteLine( "Store location: {0}", store->Location );
System::Collections::IEnumerator^ myEnum = storecollection->GetEnumerator();
while ( myEnum->MoveNext() )
{
X509Certificate2 ^ x509 = safe_cast<X509Certificate2 ^>(myEnum->Current);
Console::WriteLine( "certificate name: {0}", x509->Subject );
}
//Remove a certificate.
store->Remove( certificate1 );
X509Certificate2Collection ^ storecollection2 = dynamic_cast<X509Certificate2Collection^>(store->Certificates);
Console::WriteLine( "{1}Store name: {0}", store->Name, Environment::NewLine );
System::Collections::IEnumerator^ myEnum1 = storecollection2->GetEnumerator();
while ( myEnum1->MoveNext() )
{
X509Certificate2 ^ x509 = safe_cast<X509Certificate2 ^>(myEnum1->Current);
Console::WriteLine( "certificate name: {0}", x509->Subject );
}
//Remove a range of certificates.
store->RemoveRange( collection );
X509Certificate2Collection ^ storecollection3 = dynamic_cast<X509Certificate2Collection^>(store->Certificates);
Console::WriteLine( "{1}Store name: {0}", store->Name, Environment::NewLine );
if ( storecollection3->Count == 0 )
{
Console::WriteLine( "Store contains no certificates." );
}
else
{
System::Collections::IEnumerator^ myEnum2 = storecollection3->GetEnumerator();
while ( myEnum2->MoveNext() )
{
X509Certificate2 ^ x509 = safe_cast<X509Certificate2 ^>(myEnum2->Current);
Console::WriteLine( "certificate name: {0}", x509->Subject );
}
}
//Close the store.
store->Close();
}
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.IO;
public class X509store2
{
public static void Main (string[] args)
{
//Create new X509 store called teststore from the local certificate store.
X509Store store = new X509Store ("teststore", StoreLocation.CurrentUser);
store.Open (OpenFlags.ReadWrite);
X509Certificate2 certificate = new X509Certificate2 ();
//Create certificates from certificate files.
//You must put in a valid path to three certificates in the following constructors.
X509Certificate2 certificate1 = new X509Certificate2 ("c:\\mycerts\\*****.cer");
X509Certificate2 certificate2 = new X509Certificate2 ("c:\\mycerts\\*****.cer");
X509Certificate2 certificate5 = new X509Certificate2 ("c:\\mycerts\\*****.cer");
//Create a collection and add two of the certificates.
X509Certificate2Collection collection = new X509Certificate2Collection ();
collection.Add (certificate2);
collection.Add (certificate5);
//Add certificates to the store.
store.Add (certificate1);
store.AddRange (collection);
X509Certificate2Collection storecollection = (X509Certificate2Collection)store.Certificates;
Console.WriteLine ("Store name: {0}", store.Name);
Console.WriteLine ("Store location: {0}", store.Location);
foreach (X509Certificate2 x509 in storecollection)
{
Console.WriteLine("certificate name: {0}",x509.Subject);
}
//Remove a certificate.
store.Remove (certificate1);
X509Certificate2Collection storecollection2 = (X509Certificate2Collection)store.Certificates;
Console.WriteLine ("{1}Store name: {0}", store.Name, Environment.NewLine);
foreach (X509Certificate2 x509 in storecollection2)
{
Console.WriteLine ("certificate name: {0}", x509.Subject);
}
//Remove a range of certificates.
store.RemoveRange (collection);
X509Certificate2Collection storecollection3 = (X509Certificate2Collection)store.Certificates;
Console.WriteLine ("{1}Store name: {0}", store.Name, Environment.NewLine);
if (storecollection3.Count == 0)
{
Console.WriteLine ("Store contains no certificates.");
}
else
{
foreach (X509Certificate2 x509 in storecollection3)
{
Console.WriteLine ("certificate name: {0}", x509.Subject);
}
}
//Close the store.
store.Close ();
}
}
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates
Imports System.IO
Class X509store2
Shared Sub Main(ByVal args() As String)
'Create new X509 store called teststore from the local certificate store.
Dim store As New X509Store("teststore", StoreLocation.CurrentUser)
store.Open(OpenFlags.ReadWrite)
Dim certificate As New X509Certificate2()
'Create certificates from certificate files.
'You must put in a valid path to three certificates in the following constructors.
Dim certificate1 As New X509Certificate2("c:\mycerts\*****.cer")
Dim certificate2 As New X509Certificate2("c:\mycerts\*****.cer")
Dim certificate5 As New X509Certificate2("c:\mycerts\*****.cer")
'Create a collection and add two of the certificates.
Dim collection As New X509Certificate2Collection()
collection.Add(certificate2)
collection.Add(certificate5)
'Add certificates to the store.
store.Add(certificate1)
store.AddRange(collection)
Dim storecollection As X509Certificate2Collection = CType(store.Certificates, X509Certificate2Collection)
Console.WriteLine("Store name: {0}", store.Name)
Console.WriteLine("Store location: {0}", store.Location)
Dim x509 As X509Certificate2
For Each x509 In storecollection
Console.WriteLine("certificate name: {0}", x509.Subject)
Next x509
'Remove a certificate.
store.Remove(certificate1)
Dim storecollection2 As X509Certificate2Collection = CType(store.Certificates, X509Certificate2Collection)
Console.WriteLine("{1}Store name: {0}", store.Name, Environment.NewLine)
Dim x509a As X509Certificate2
For Each x509a In storecollection2
Console.WriteLine("certificate name: {0}", x509a.Subject)
Next x509a
'Remove a range of certificates.
store.RemoveRange(collection)
Dim storecollection3 As X509Certificate2Collection = CType(store.Certificates, X509Certificate2Collection)
Console.WriteLine("{1}Store name: {0}", store.Name, Environment.NewLine)
If storecollection3.Count = 0 Then
Console.WriteLine("Store contains no certificates.")
Else
Dim x509b As X509Certificate2
For Each x509b In storecollection3
Console.WriteLine("certificate name: {0}", x509b.Subject)
Next x509b
End If
'Close the store.
store.Close()
End Sub
End Class
Uwagi
Ta klasa służy do pracy z magazynem X.509.
Ważne
Począwszy od .NET Framework 4.6, ten typ implementuje IDisposable interfejs. Po zakończeniu korzystania z typu należy usunąć go bezpośrednio lub pośrednio. Aby bezpośrednio usunąć typ, wywołaj jego Dispose metodę try
/catch
w bloku. Aby usunąć go pośrednio, użyj konstrukcji języka, takiej jak using
(w języku C#) lub Using
(w Visual Basic). Aby uzyskać więcej informacji, zobacz sekcję "Using an Object that Implements IDisposable" (Używanie obiektu implementujące interfejs IDisposable) w temacie interfejsu IDisposable .
W przypadku aplikacji przeznaczonych dla .NET Framework 4.5.2 i starszych wersji X509Store klasa nie implementuje interfejsu IDisposable i dlatego nie ma Dispose
metody.
Konstruktory
X509Store() |
Inicjuje X509Store nowe wystąpienie klasy przy użyciu magazynu certyfikatów osobistych bieżącego użytkownika. |
X509Store(IntPtr) |
Inicjuje X509Store nowe wystąpienie klasy przy użyciu dojścia |
X509Store(StoreLocation) |
Inicjuje nowe wystąpienie X509Store klasy przy użyciu osobistego magazynu certyfikatów z określonej wartości lokalizacji magazynu. |
X509Store(StoreName) |
Inicjuje nowe wystąpienie X509Store klasy przy użyciu określonej nazwy magazynu z magazynów certyfikatów bieżącego użytkownika. |
X509Store(StoreName, StoreLocation) |
Inicjuje X509Store nowe wystąpienie klasy przy użyciu określonych StoreName wartości i StoreLocation . |
X509Store(StoreName, StoreLocation, OpenFlags) |
Inicjuje X509Store nowe wystąpienie klasy przy użyciu określonej nazwy magazynu i wartości lokalizacji magazynu, a następnie otwiera je przy użyciu określonych flag. |
X509Store(String) |
Inicjuje X509Store nowe wystąpienie klasy przy użyciu określonej nazwy magazynu. |
X509Store(String, StoreLocation) |
Inicjuje X509Store nowe wystąpienie klasy przy użyciu określonej nazwy magazynu i lokalizacji magazynu. |
X509Store(String, StoreLocation, OpenFlags) |
Inicjuje X509Store nowe wystąpienie klasy przy użyciu określonej nazwy magazynu i wartości lokalizacji magazynu, a następnie otwiera je przy użyciu określonych flag. |
Właściwości
Certificates |
Zwraca kolekcję certyfikatów znajdujących się w magazynie certyfikatów X.509. |
IsOpen |
Pobiera wartość wskazującą, czy wystąpienie jest połączone z otwartym magazynem certyfikatów. |
Location |
Pobiera lokalizację magazynu certyfikatów X.509. |
Name |
Pobiera nazwę magazynu certyfikatów X.509. |
StoreHandle |
IntPtr Pobiera dojście do sklepu |
Metody
Add(X509Certificate2) |
Dodaje certyfikat do magazynu certyfikatów X.509. |
AddRange(X509Certificate2Collection) |
Dodaje kolekcję certyfikatów do magazynu certyfikatów X.509. |
Close() |
Zamyka magazyn certyfikatów X.509. |
Dispose() |
Zwalnia zasoby używane przez ten X509Storeelement . |
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
Open(OpenFlags) |
Otwiera magazyn certyfikatów X.509 lub tworzy nowy magazyn w zależności od OpenFlags ustawień flagi. |
Remove(X509Certificate2) |
Usuwa certyfikat z magazynu certyfikatów X.509. |
RemoveRange(X509Certificate2Collection) |
Usuwa szereg certyfikatów z magazynu certyfikatów X.509. |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |