2016-04-04 24 views
0

Ich kann die auf der eingeführten Smartcard vorhandenen Zertifikate aufzählen, aber wie kann man entscheiden, dass die im Windows-Zertifikatspeicher vorhandenen Zertifikate mit der Smartcard in Verbindung stehen, auch wenn keine Smartcard eingesetzt ist?Wie zu entscheiden, dass ein Zertifikat in der Filiale Smartcard-bezogen ist oder nicht?

Wie kann ich wissen, ob ein Zertifikat aus dem Geschäft nach einer PIN fragt, bevor es verwendet wird, wenn keine Smartcard vorhanden ist?

Antwort

2

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 PrivateKeynull 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.