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


103

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

다음 코드를 실행합니다.

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 풀에 설정하면 정확히 어떤 일이 발생 하며 어떤 부정적인 결과가 발생할 수 있습니까?


6
나중에 사용자 프로필을로드하는 것이 문제가되는 new X509Certificate2(binaryData, password, X509KeyStorageFlags.MachineKeySet)경우 사용자 프로필이 필요하지 않도록 인증서로드를로 변경할 수 있습니다 .
vcsjones 2013-06-28

1
ApplicationPoolIdentity로 실행하는 경우 new X509Certificate2(keyFilePath, keyFilePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet)저장소에 개인 키를 쓰지 않고 서버에 대한 관리 권한이 필요하지 않은 사용 을 원할 것 입니다.
Nate

답변:


117

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

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.


1
+1 앱 풀 ID로 NETWORK SERVICE의 경우 ApplicationPoolIdentity가 성공하지 못했습니다.
David d C e Freitas

3
"사용자 프로필을로드하지 않은 IIS 6에서 실행되는 앱과의 하위 호환성이 깨질 수 있습니다." 성능 (프로파일이 실제로로드되어야합니다. 즉, 예를 들어 HKCU 레지스트리 하이브로드)과 보안 (더 큰 잠재적 벡터) 관련 사항도 있다고 생각합니다.
Sören Kuklau 2015

1
LoadUserProfile=trueIIS 에서 설정 하고 기본 임시 폴더 % TEMP % 위치를 C:\Users\C:\Users\AccountName\AppData\Local\Temp다른 곳 으로 변경할 수 있습니까? 예 "D : \ AppTempData"
Murali Murugesan

Murali Murugesan-이 질문에 대한 답을 얻었습니까? 나는 같은 문제가 있습니다. 기본 Temp 디렉터리를 변경하고 싶습니다.
VBAHole

1
몇 년 전에 X509 클라이언트 인증서 인증으로 보호되는 원격 웹 서비스를 호출하는 백엔드 서비스를 구축했습니다. 개인 인증서는 사용자 프로필에 저장되기 때문에 서비스를 설치할 때 사용자 프로필을 만드는 서비스의 로그온 계정으로 대상 서버에 로그온 한 다음 클라이언트 인증서를 로그온 계정의 인증서 저장소에 설치해야했습니다. 그 후 클라이언트 인증서는 런타임에로드됩니다.
Craig Boland
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.