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?
sumber
new X509Certificate2(binaryData, password, X509KeyStorageFlags.MachineKeySet)
menjadi profil pengguna tidak diperlukan.new X509Certificate2(keyFilePath, keyFilePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet)
yang menghindari penulisan kunci pribadi ke penyimpanan dan tidak memerlukan hak akses administratif di server.Jawaban:
IIS 6 tidak pernah memuat profil pengguna. Saya akan menganggap ini dinonaktifkan secara default untuk menjaga perilaku konsisten, dan administrator harus memilih untuk itu.
Hal ini kemungkinan besar karena Penyedia Layanan Kriptografik Windows mencoba menyimpan atau memuat kunci untuk sertifikat Anda di penyimpanan pengguna, dan karena profil tidak tersedia, konteks kriptografik tidak tersedia. Perhatikan bahwa
Load User Profile
pengaturan hanya berlaku untuk akun pengguna. Akun Layanan seperti NETWORK SERVICE dan ApplicationPoolIdentity memiliki penanganan khusus.Nah, profil pengguna sudah dimuat. Ini termasuk penyimpanan kriptografi mereka, variabel lingkungan seperti% TEMP%, dan lainnya.
Apa intinya
LoadUserProfile
disebut oleh IIS ketika AppPool dimulai.Ini dapat merusak kompatibilitas mundur dengan aplikasi yang berjalan di IIS 6, yang tidak memuat profil pengguna. Variabel lingkungan dimuat. Misalnya, saat Muat Profil Pengguna benar, variabel lingkungan% TEMP% adalah
C:\Users\AccountName\AppData\Local\Temp
(misalnya). Ketika salah, ituC:\WINDOWS\Temp
.sumber
LoadUserProfile=true
di IIS dan mengubah lokasi folder temp default% TEMP% dariC:\Users\C:\Users\AccountName\AppData\Local\Temp
ke tempat lain? contoh "D: \ AppTempData"