Ich stand vor dem folgenden Problem.
Ich führe den folgenden Code aus
var binaryData = File.ReadAllBytes(pathToPfxFile);
var cert = new X509Certificate2(binaryData, password);
in zwei Prozessen. Einer der Prozesse läuft unter LOCAL_SYSTEM
und dort ist dieser Code erfolgreich. Ein anderes wird in IIS unter einem lokalen Benutzerkonto ausgeführt, das zur lokalen Gruppe "Benutzer" gehört, und dort wird die folgende Ausnahme angezeigt:
System.Security.Cryptography.CryptographicException
Object was not found.
at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
at System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(Byte[] rawData, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx)
at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags)
at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData, String password)
//my code here
Also habe ich ein bisschen gegoogelt und diese Antwort auf eine ähnliche Frage gefunden. Ich habe versucht, LoadUserProfile
den Anwendungspool zu aktivieren , und er funktioniert jetzt.
Das Problem ist, dass ich nicht verstehe, was genau passiert, wenn ich einstelle LoadUserProfile
und welche Konsequenzen dies haben könnte. Ich meine, wenn es eine "gute" Sache ist, warum ist es dann nicht standardmäßig "an" und warum ist es schließlich da?
Was genau passiert, wenn ich mich LoadUserProfile
im IIS-Pool einstelle und welche negativen Konsequenzen kann dies haben?
new X509Certificate2(keyFilePath, keyFilePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet)
wodurch das Schreiben des privaten Schlüssels in den Speicher vermieden wird und keine Administratorrechte auf dem Server erforderlich sind.
new X509Certificate2(binaryData, password, X509KeyStorageFlags.MachineKeySet)
so ändern, dass kein Benutzerprofil erforderlich ist.