In meiner Anwendung, ein Zertifikat zur Client-Authentifizierung programmatisch auf die MY
-Speichern mit dem folgenden Code hinzugefügt importiert:Was die Auswirkungen des `PersistKeySet`-StorageFlag ist, wenn ein Zertifikat in C#
//certData is a byte[]
//password is a SecureString
X509Certificate2 certificate = new X509Certificate2(certData, password, X509KeyStorageFlags.Exportable);
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
try
{
store.Open(OpenFlags.ReadWrite);
store.Add(certificate);
}
finally
{
store.Close();
}
Mit diesem Code wurde das Zertifikat korrekt in den MY
-Store (Fingerabdruck- und Zertifizierungskette auch korrekt) auf allen von mir getesteten Computern importiert.
Aber auf einigen Computern (Windows 7 Professional SP1 und Widnows Server 2008 R2 mit lokalem Benutzerkonto) konnte das Zertifikat anschließend nicht für Client-Authentifizierung verwendet werden ("konnte keine Vertrauensstellung für den sicheren SSL/TLS-Kanal herstellen")). Auf einem Windows 8.1 Enterprise-Computer mit Domänenbenutzerkonto funktionierte die Authentifizierung manchmal, aber nicht immer.
Ich probierte einige Dinge aus, und fand schließlich eine Lösung in X509KeyStorageFlags.PersistKeySet
zu den Speicherflags hinzuzufügen. So ist die erste Zeile ist jetzt:
X509Certificate2 certificate = new X509Certificate2(certData, password, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
Mit diesen Flaggen könnte das Zertifikat auf allen Geräten verwendet werden. Obwohl ich bin froh, dass meine Anwendung jetzt in der erwarteten Weise funktioniert, würde ich gerne verstehen warum? Was genau macht das PersistKeySet-Flag und warum hat es Einfluss darauf, wann und von wem das Zertifikat verwendet werden kann?
MSDN war in diesem Fall nicht sehr hilfreich.
Kann mit dem Schlüssel in Verbindung stehen, der in einem temporären Container anstelle eines permanenten Containers installiert wird. Sehen Sie hier für Details: https://support.microsoft.com/en-gb/kb/950090 – momar