Saya menghadapi masalah berikut.
Saya menjalankan kode berikut
var binaryData = File.ReadAllBytes(pathToPfxFile);
var cert = new X509Certificate2(binaryData, password);
dalam dua proses. Salah satu proses berjalan di bawah LOCAL_SYSTEMdan di sana kode ini berhasil. Yang lain berjalan di dalam IIS di bawah akun pengguna lokal milik grup lokal "Pengguna" dan di sana saya mendapatkan pengecualian berikut:
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
Jadi saya mencari di Google sedikit dan menemukan jawaban ini untuk pertanyaan serupa. Saya mencoba mengaktifkan LoadUserProfileuntuk pool aplikasi dan berfungsi sekarang.
Masalahnya adalah saya tidak mengerti apa yang sebenarnya terjadi ketika saya menetapkan LoadUserProfiledan konsekuensi apa yang mungkin terjadi. Maksud saya, jika itu adalah hal yang "baik" lalu mengapa tidak "aktif" secara default dan mengapa itu tetap ada?
Apa yang sebenarnya terjadi ketika saya mengatur LoadUserProfiledi kumpulan IIS dan apa konsekuensi negatif yang dapat ditimbulkannya?
new X509Certificate2(keyFilePath, keyFilePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet)yang menghindari penulisan kunci pribadi ke penyimpanan dan tidak memerlukan hak akses administratif di server.
new X509Certificate2(binaryData, password, X509KeyStorageFlags.MachineKeySet)menjadi profil pengguna tidak diperlukan.