[c#] IIS 풀의 LoadUserProfile을 설정하면 정확히 어떻게됩니까?

나는 다음과 같은 문제에 직면했습니다.

다음 코드를 실행합니다.

var binaryData = File.ReadAllBytes(pathToPfxFile);
var cert = new X509Certificate2(binaryData, password);

두 가지 과정에서. 프로세스 중 하나가 아래에서 실행 LOCAL_SYSTEM되고이 코드가 성공합니다. 다른 하나는 “Users”로컬 그룹에 속하는 로컬 사용자 계정으로 IIS 내부에서 실행되며 다음과 같은 예외가 발생합니다.

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

그래서 나는 약간의 Google 검색을 통해 비슷한 질문에 대한 답변 을 찾았습니다 . LoadUserProfile응용 프로그램 풀 을 활성화하려고 시도했지만 이제 작동합니다.

문제는 내가 설정했을 때 정확히 어떤 일이 일어나고 LoadUserProfile어떤 결과가 발생할지 알 수 없다는 것입니다. “좋은”것이라면 왜 기본적으로 “켜져 있지”않고 왜 거기에있는 거죠?

LoadUserProfileIIS 풀에 설정하면 정확히 어떤 일이 발생 하며 어떤 부정적인 결과가 발생할 수 있습니까?



답변

“좋은”것이라면 왜 기본적으로 “켜져 있지”않고 왜 거기에있는 거죠?

IIS 6은 사용자 프로필을로드하지 않았습니다. 행동을 일관되게 유지하기 위해 기본적으로이 기능이 꺼져 있다고 가정하고 관리자가 이에 동의해야합니다.

응용 프로그램 풀에 대해 LoadUserProfile을 활성화하려고 시도했으며 이제 작동합니다.

이는 Windows 암호화 서비스 공급자가 사용자 저장소에 인증서에 대한 키를 저장하거나로드하려고했고 프로필을 사용할 수 없어 암호화 컨텍스트를 사용할 수 없기 때문일 가능성이 큽니다 . 참고한다는 Load User Profile설정은 사용자 계정에 적용됩니다. NETWORK SERVICE 및 ApplicationPoolIdentity와 같은 서비스 계정에는 특별한 처리가 있습니다.

IIS 풀에서 LoadUserProfile을 설정하면 정확히 어떻게 되나요?

글쎄, 사용자 프로필이로드되었습니다. 여기에는 암호화 저장소, % TEMP %와 같은 환경 변수 및 기타 변수가 포함됩니다.

결국 요약 LoadUserProfile되는 것은 AppPool이 시작될 때 IIS에 의해 호출됩니다.

어떤 부정적인 결과를 가져올 수 있습니까?

사용자 프로필을로드하지 않은 IIS 6에서 실행 된 앱과의 하위 호환성이 깨질 수 있습니다. 환경 변수가로드됩니다. 예를 들어 사용자 프로필로드가 참이면 % TEMP % 환경 변수는 다음과 같습니다 C:\Users\AccountName\AppData\Local\Temp. 거짓이면 C:\WINDOWS\Temp.


답변