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_SYSTEM
dan 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 LoadUserProfile
untuk pool aplikasi dan berfungsi sekarang.
Masalahnya adalah saya tidak mengerti apa yang sebenarnya terjadi ketika saya menetapkan LoadUserProfile
dan 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 LoadUserProfile
di 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.