Chính xác thì điều gì sẽ xảy ra khi tôi đặt LoadUserProfile của nhóm IIS?


103

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_SYSTEMvà 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 LoadUserProfilenhó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 LoadUserProfilevà 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 LoadUserProfiletrong nhóm IIS và nó có thể gây ra những hậu quả tiêu cực nào?


6
Chỉ là suy nghĩ sau, nếu việc tải hồ sơ người dùng là vấn đề với bạn, bạn có thể thay đổi việc tải chứng chỉ của mình new X509Certificate2(binaryData, password, X509KeyStorageFlags.MachineKeySet)thành hồ sơ người dùng không cần thiết.
vcsjones

1
Nếu chạy dưới dạng ApplicationPoolIdentity, bạn sẽ muốn sử dụng tính năng 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ủ.
Nate

Câu trả lời:


117

Ý 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 ở đó?

IIS 6 không bao giờ tải hồ sơ người dùng. Tôi cho rằng điều này được tắt theo mặc định để giữ cho hành vi nhất quán và quản trị viên phải chọn tham gia.

Tôi đã cố gắng bật LoadUserProfile cho nhóm ứng dụng và nó hoạt động ngay bây giờ.

Điều này rất có thể là do Nhà cung cấp dịch vụ mật mã của Windows đang cố gắng lưu trữ hoặc tải khóa cho chứng chỉ của bạn trong cửa hàng người dùng và vì hồ sơ không có sẵn nên không có ngữ cảnh mật mã . Lưu ý rằng Load User Profilecài đặt chỉ áp dụng cho tài khoản người dùng. Các tài khoản dịch vụ như NETWORK SERVICE và ApplicationPoolIdentity có cách xử lý đặc biệt.

Điều gì sẽ xảy ra khi tôi đặt LoadUserProfile trong nhóm IIS

Vâng, hồ sơ người dùng đã được tải. Điều này bao gồm kho lưu trữ mật mã của họ, các biến môi trường như% TEMP% và các biến khác.

Những gì cuối cùng nó kết thúc LoadUserProfileđược gọi là IIS khi AppPool khởi động.

nó có thể có những hậu quả tiêu cực nào?

Nó có thể phá vỡ khả năng tương thích ngược với một ứng dụng chạy trên IIS 6, ứng dụng này không tải được hồ sơ người dùng. Các biến môi trường được tải. Ví dụ: khi Tải hồ sơ người dùng là true, biến môi trường% TEMP% là C:\Users\AccountName\AppData\Local\Temp(ví dụ). Khi sai, nó C:\WINDOWS\Temp.


1
+1 Đối với DỊCH VỤ MẠNG làm danh tính nhóm ứng dụng, nhưng ApplicationPoolIdentity không thành công với tôi.
David d C e Freitas

3
"Nó có thể phá vỡ khả năng tương thích ngược với một ứng dụng chạy trên IIS 6, ứng dụng này không tải được hồ sơ người dùng." Tôi đoán nó cũng có hiệu suất (hồ sơ thực sự phải được tải; điều này có nghĩa là, ví dụ, tải tổ chức đăng ký HKCU) và các tác động bảo mật (vectơ tiềm năng lớn hơn).
Sören Kuklau,

1
Có thể đặt LoadUserProfile=truetrong IIS và thay đổi vị trí thư mục tạm thời mặc định% TEMP% từ C:\Users\C:\Users\AccountName\AppData\Local\Tempmột nơi khác không? ví dụ "D: \ AppTempData"
Murali Murugesan,

Murali Murugesan - bạn đã bao giờ nhận được câu trả lời cho câu hỏi này chưa? Tôi có cùng một vấn đề. Tôi muốn thay đổi thư mục Temp mặc định.
VBAHole

1
Cách đây nhiều năm, tôi đã xây dựng một dịch vụ back-end gọi vào một dịch vụ web từ xa được bảo vệ bằng xác thực Chứng chỉ ứng dụng khách X509. Vì chứng chỉ cá nhân được lưu trữ trong hồ sơ của người dùng, nên khi cài đặt dịch vụ, tôi phải đăng nhập vào máy chủ đích làm tài khoản đăng nhập của dịch vụ, tạo hồ sơ người dùng, sau đó cài đặt chứng chỉ khách vào kho chứng chỉ của tài khoản đăng nhập. Sau đó, chứng chỉ ứng dụng khách sẽ tải tại thời điểm chạy.
Craig Boland
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.