Wenn Sie über ein Zertifikat und den zugehörigen privaten Schlüssel verfügen (als Objekt X509Certificate2
), können Sie die Objektkette certificate.PrivateKey.CspKeyContainerInfo.HardwareDevice
überprüfen (HardwareDevice Eigenschaft). Wenn die Eigenschaft true
zurückgibt, wird der Schlüssel auf einer Smartcard gespeichert und höchstwahrscheinlich (aber nicht notwendig) wird eine PIN bestätigt, wenn Sie versuchen, auf den Schlüssel zuzugreifen. Dies funktioniert, wenn der Schlüssel im herkömmlichen Cryptographic Service Provider (CSP) gespeichert wird.
Moderne Karten unterstützen moderne Providertypen, Key Storage Provider (KSP) genannt, die in .NET schlecht unterstützt werden. Dies bedeutet, dass, wenn der Schlüssel in der Hardware-KSP gespeichert ist, die HasPrivateKey
Eigenschaft (des Objekts X509Certificate2
) True
zurückgibt und PrivateKey
null
ist. In diesem Fall müssen Sie zusätzliche Arbeit leisten, indem Sie systemeigene CryptoAPI-Funktionen in der NCrypt-Familie aufrufen. Ab .NET 4.6+ gibt es mehrere Erweiterungsmethoden in der Klasse X509Certificate2
, mit denen Providerinformationen abgerufen werden können: X509Certificate2 Extension Methods.