IIS havuzunun LoadUserProfile değerini ayarladığımda tam olarak ne olur?


103

Şu sorunla karşılaştım.

Aşağıdaki kodu çalıştırıyorum

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

iki süreçte. İşlemlerden biri altında çalışır LOCAL_SYSTEMve orada bu kod başarılı olur. Bir diğeri IIS içinde "Kullanıcılar" yerel grubuna ait bir yerel kullanıcı hesabı altında çalışıyor ve orada aşağıdaki istisnayı alıyorum:

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

Bu yüzden biraz Google'da araştırdım ve benzer bir soruya bu cevabı buldum . LoadUserProfileUygulama havuzunu etkinleştirmeyi denedim ve şimdi çalışıyor.

Sorun şu LoadUserProfileki, ayarladığımda tam olarak ne olduğunu ve bunun ne gibi sonuçları olabileceğini anlamıyorum . Demek istediğim, eğer bu "iyi" bir şeyse, o zaman neden varsayılan olarak "açık" değil ve sonuçta neden orada?

LoadUserProfileIIS havuzunu ayarladığımda tam olarak ne olur ve bunun ne gibi olumsuz sonuçları olabilir?


6
Sonradan düşündüğümüzde, kullanıcı profilini yüklemek sizin için bir sorunsa, sertifika yüklemenizi new X509Certificate2(binaryData, password, X509KeyStorageFlags.MachineKeySet)bir kullanıcı profiline gerek kalmayacak şekilde değiştirebilirsiniz.
vcsjones

1
ApplicationPoolIdentity olarak çalışıyorsanız new X509Certificate2(keyFilePath, keyFilePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet), özel anahtarı depoya yazmaktan kaçınan ve sunucuda yönetici ayrıcalıkları gerektirmeyen kullanmak isteyeceksiniz.
Nate

Yanıtlar:


117

Demek istediğim, eğer bu "iyi" bir şeyse, o zaman neden varsayılan olarak "açık" değil ve sonuçta neden orada?

IIS 6 hiçbir zaman kullanıcı profillerini yüklemedi. Davranışı tutarlı kılmak için bunun varsayılan olarak kapalı olduğunu ve bir yöneticinin bunu kabul etmesi gerektiğini varsayıyorum.

Uygulama havuzu için LoadUserProfile'ı etkinleştirmeyi denedim ve şimdi çalışıyor.

Bunun nedeni büyük olasılıkla Windows Şifreleme Hizmeti Sağlayıcısının sertifikanız için kullanıcı deposunda bir anahtar depolamaya veya yüklemeye çalıştığı ve bir profil mevcut olmadığı için bir şifreleme bağlamının kullanılamadığıdır. Load User ProfileAyarın yalnızca kullanıcı hesapları için geçerli olduğunu unutmayın . NETWORK SERVICE ve ApplicationPoolIdentity gibi Hizmet Hesapları özel işlemlere sahiptir.

LoadUserProfile'ı IIS havuzunda ayarladığımda tam olarak ne oluyor?

Eh, kullanıcı profili yüklendi. Bu, kriptografik depolarını,% TEMP% gibi ortam değişkenlerini ve diğerlerini içerir.

Sonunda kaynattığı şey LoadUserProfile, AppPool başladığında IIS tarafından çağrılır.

ne gibi olumsuz sonuçları olabilir?

Kullanıcı profilini yüklemeyen IIS 6'da çalışan bir uygulamayla geriye dönük uyumluluğu bozabilir. Ortam değişkenleri yüklenir. Örneğin, Kullanıcı Profilini Yükle doğru olduğunda,% TEMP% ortam değişkeni C:\Users\AccountName\AppData\Local\Temp(örneğin) olur. Yanlış olduğunda C:\WINDOWS\Temp.


1
Uygulama havuzu kimliği olarak NETWORK SERVICE için +1, ancak ApplicationPoolIdentity benim için başarılı olmadı.
David d C e Freitas

3
"Kullanıcı profilini yüklemeyen IIS 6 üzerinde çalışan bir uygulamayla geriye dönük uyumluluğu bozabilir." Sanırım performansı da var (profilin gerçekten yüklenmesi gerekiyor; bu, örneğin, HKCU kayıt kovanının yüklenmesi anlamına geliyor) ve güvenlik (daha büyük potansiyel vektör) çıkarımlarına da sahip.
Sören Kuklau

1
LoadUserProfile=trueIIS'de ayarlamak ve varsayılan geçici klasör% TEMP% konumunu C:\Users\C:\Users\AccountName\AppData\Local\Tempbaşka bir yere değiştirmek mümkün müdür ? örnek "D: \ AppTempData"
Murali Murugesan

Murali Murugesan - bu soruya hiç cevap aldınız mı? Bende de aynı sorun var. Varsayılan Temp dizininin değiştirilmesini istiyorum.
VBAHole

1
Bu yıllar önce, X509 İstemci Sertifikası kimlik doğrulaması ile korunan bir uzak web hizmetini çağıran bir arka uç hizmeti oluşturmakla karşılaştım. Kişisel sertifikalar bir kullanıcının profilinde depolandığından, hizmeti yüklerken, hizmetin oturum açma hesabı olarak hedef sunucuda oturum açmam gerekiyordu, bu bir kullanıcı profili oluşturuyor ve ardından istemci sertifikasını oturum açma hesabının sertifika deposuna yüklemem gerekiyordu. Bundan sonra, istemci sertifikası çalışma zamanında yüklenir.
Craig Boland
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.