Şu sorunla karşılaştım.
Aşağıdaki kodu çalıştırıyorum
var binaryData = File.ReadAllBytes(pathToPfxFile);
var cert = new X509Certificate2(binaryData, password);
iki süreçte. İşlemlerden biri altında çalışır LOCAL_SYSTEM
ve orada bu kod başarılı olur. Bir diğeri IIS içinde "Kullanıcılar" yerel grubuna ait bir yerel kullanıcı hesabı altında çalışıyor ve orada aşağıdaki istisnayı alıyorum:
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
Bu yüzden biraz Google'da araştırdım ve benzer bir soruya bu cevabı buldum . LoadUserProfile
Uygulama havuzunu etkinleştirmeyi denedim ve şimdi çalışıyor.
Sorun şu LoadUserProfile
ki, ayarladığımda tam olarak ne olduğunu ve bunun ne gibi sonuçları olabileceğini anlamıyorum . Demek istediğim, eğer bu "iyi" bir şeyse, o zaman neden varsayılan olarak "açık" değil ve sonuçta neden orada?
LoadUserProfile
IIS havuzunu ayarladığımda tam olarak ne olur ve bunun ne gibi olumsuz sonuçları olabilir?
new X509Certificate2(keyFilePath, keyFilePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet)
, özel anahtarı depoya yazmaktan kaçınan ve sunucuda yönetici ayrıcalıkları gerektirmeyen kullanmak isteyeceksiniz.
new X509Certificate2(binaryData, password, X509KeyStorageFlags.MachineKeySet)
bir kullanıcı profiline gerek kalmayacak şekilde değiştirebilirsiniz.