Tôi phải đối mặt với vấn đề sau đây.
Tôi chạy đoạn mã sau
var binaryData = File.ReadAllBytes(pathToPfxFile);
var cert = new X509Certificate2(binaryData, password);
trong hai quá trình. Một trong các quy trình đang chạy LOCAL_SYSTEM
và mã này thành công. Một cái khác chạy bên trong IIS trong tài khoản người dùng cục bộ thuộc nhóm cục bộ "Người dùng" và ở đó tôi nhận được ngoại lệ sau:
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
Vì vậy, tôi đã tìm kiếm trên Google một chút và tìm thấy câu trả lời này cho một loại câu hỏi tương tự. Tôi đã cố gắng kích hoạt LoadUserProfile
nhóm ứng dụng và nó hoạt động ngay bây giờ.
Vấn đề là tôi không hiểu chính xác điều gì sẽ xảy ra khi tôi đặt LoadUserProfile
và những hậu quả có thể gây ra. Ý tôi là nếu đó là một điều "tốt" thì tại sao nó không được "bật" theo mặc định và rốt cuộc tại sao nó lại ở đó?
Chính xác thì điều gì sẽ xảy ra khi tôi đặt LoadUserProfile
trong nhóm IIS và nó có thể gây ra những hậu quả tiêu cực nào?
new X509Certificate2(keyFilePath, keyFilePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet)
này tránh ghi khóa cá nhân vào cửa hàng và sẽ không yêu cầu đặc quyền quản trị trên máy chủ.
new X509Certificate2(binaryData, password, X509KeyStorageFlags.MachineKeySet)
thành hồ sơ người dùng không cần thiết.