2013-06-17 8 views
67

다음 문제가 발생했습니다.IIS 풀의 LoadUserProfile을 설정하면 정확히 어떻게됩니까?

나는이 개 과정에 다음 코드

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

를 실행합니다. 프로세스 중 하나가 LOCAL_SYSTEM에서 실행되며이 코드가 성공합니다.

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 

그래서 내가 조금 봤과 비슷한 질문의 종류에 this answer을 발견 : 또 다른 하나는 "사용자"로컬 그룹에 속한 로컬 사용자 계정으로 IIS 거기 나는 다음과 같은 예외가 내부 실행합니다. 응용 프로그램 풀에 대해 LoadUserProfile을 사용하려고 시도했지만 현재 작동합니다.

문제는 내가 정확히 LoadUserProfile을 설정하고 어떤 결과가 있었는지 알 수 없기 때문입니다. 나는 이것이 "좋은"것이라면 왜 기본적으로 "켜져 있지"않고 왜 결국 거기에있는 것입니까?

LoadUserProfile을 IIS 풀에 설정하면 어떤 일이 발생하며 어떤 부작용이있을 수 있습니까?

+3

사용자 프로필을로드하는 것이 문제가된다면 인증서로드를 새 X509Certificate2 (binaryData, password, X509KeyStorageFlags)로 변경할 수 있습니다.MachineKeySet)'을 사용하여 사용자 프로파일이 필요하지 않습니다. – vcsjones

답변

77

"좋은"것이라면 기본적으로 "켜져 있지"않은 이유는 무엇입니까?

IIS 6은 사용자 프로필을로드하지 않습니다. 이 동작을 일관되게 유지하기 위해 기본적으로 해제되어 있다고 가정하고 관리자는 동의를 선택해야합니다.

응용 프로그램 풀에 대해 LoadUserProfile을 사용하려고 시도했지만 현재 작동합니다.

윈도우 암호화 서비스 공급자가 저장하거나 사용자 저장소에 인증서에 대한 키를로드하려고되었고, 프로필은 사용할 수 없습니다 때문에, cryptographic context는 사용할 수 없습니다 때문 가능성이 높습니다. Load User Profile 설정은 사용자 계정에만 적용됩니다. NETWORK SERVICE 및 ApplicationPoolIdentity와 같은 서비스 계정에는 특별한 처리가 있습니다. 나는 IIS 풀

음에 LoadUserProfile을 설정할 때 정확히 어떻게됩니까

는 사용자 프로필이로드됩니다. 여기에는 암호화 저장소, % TEMP %와 같은 환경 변수 및 다른 것들이 포함됩니다.

결국 AppPool이 시작될 때 LoadUserProfile이 IIS에 의해 호출됩니다.

어떤 부작용이있을 수 있습니까?

사용자 프로필을로드하지 않은 IIS 6에서 실행되는 응용 프로그램과의 하위 호환성이 깨질 수 있습니다. 환경 변수가로드됩니다. 예를 들어 사용자 프로필로드가 true 일 때 % TEMP % 환경 변수는 C:\Users\AccountName\AppData\Local\Temp입니다 (예 :). false이면 C:\WINDOWS\Temp입니다.

+1

+1 NETWORK SERVICE에 응용 프로그램 풀 ID가 있지만 ApplicationPoolIdentity가 실패했습니다. –

+3

"사용자 프로필을로드하지 않은 IIS 6에서 실행 된 응용 프로그램과의 하위 호환성이 손상 될 수 있습니다." 나는 또한 그것이 성능 (프로파일이 실제로로드되어야 함, 즉, HKCU 레지스트리 하이브를로드하는 것을 의미 함)과 보안 (더 큰 잠재력 벡터)이 함축하고 있음을 짐작할 수 있습니다. –

+1

IIS에서 LoadUserProfile = true를 설정하고 기본 임시 폴더 % TEMP % 위치를'C : \ Users \ C : \ Users \ AccountName \ AppData \ Local \ Temp'에서 다른 위치로 변경할 수 있습니까? 예를 들어 "D : \ AppTempData"상세한 설명 –