Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Tümleşik Windows kimlik doğrulamasının ve ilgili ad alanları içindeki HttpWebRequest, HttpListener, SmtpClient, SslStream, , NegotiateStreamve ilgili sınıfları System.Net tarafından nasıl işleneceğini etkileyen geliştirmeler yapılmıştır. Güvenliği geliştirmek için genişletilmiş koruma desteği eklendi.
Bu değişiklikler, tümleşik Windows kimlik doğrulamasının kullanıldığı web isteklerinde bulunmak ve yanıtları almak için bu sınıfları kullanan uygulamaları etkileyebilir. Bu değişiklik, tümleşik Windows kimlik doğrulamasını kullanacak şekilde yapılandırılmış web sunucularını ve istemci uygulamalarını da etkileyebilir.
Bu değişiklikler, tümleşik Windows kimlik doğrulamasının kullanıldığı başka tür isteklerde bulunmak ve yanıt almak için bu sınıfları kullanan uygulamaları da etkileyebilir.
Genişletilmiş korumayı desteklemek için yapılan değişiklikler yalnızca Windows 7 ve Windows Server 2008 R2'de bulunan uygulamalarda kullanılabilir. Genişletilmiş koruma özellikleri Windows'un önceki sürümlerinde kullanılamaz.
Genel Bakış
Tümleşik Windows kimlik doğrulaması tasarımı, bazı kimlik bilgileri sınaması yanıtlarının evrensel olmasını sağlar, yani bunlar yeniden kullanılabilir veya iletilebilir. Sınama yanıtları, hedef belirli bilgilerle ve tercihen kanala özgü bazı bilgilerle en azından oluşturulmalıdır. Hizmetler daha sonra kimlik bilgisi sınaması yanıtlarının Hizmet Asıl Adı (SPN) gibi hizmete özgü bilgiler içerdiğini güvence altına almak için genişletilmiş koruma sağlayabilir. Kimlik bilgisi değişimlerindeki bu bilgilerle, hizmetler yanlış kullanılmış olabilecek kimlik bilgisi sınaması yanıtlarının kötü amaçlı kullanımına karşı daha iyi koruma sağlayabilecektir.
Genişletilmiş koruma tasarımı, kimlik doğrulama geçişi saldırılarını azaltmak için tasarlanmış kimlik doğrulama protokollerine yönelik bir geliştirmedir. Kanal ve hizmet bağlama bilgileri kavramı etrafında döner.
Genel hedefler şunlardır:
İstemci genişletilmiş korumayı destekleyecek şekilde güncelleştirilirse, uygulamaların desteklenen tüm kimlik doğrulama protokollerine bir kanal bağlama ve hizmet bağlama bilgileri sağlaması gerekir. Kanal bağlama bilgileri yalnızca bağlanılacak bir kanal (TLS) olduğunda sağlanabilir. Hizmet bağlama bilgileri her zaman sağlanmalıdır.
Düzgün yapılandırılan güncelleştirilmiş sunucular, istemci kimlik doğrulama belirtecinde mevcut olduğunda kanal ve hizmet bağlama bilgilerini doğrulayabilir ve kanal bağlamaları eşleşmiyorsa kimlik doğrulama girişimini reddedebilir. Dağıtım senaryosuna bağlı olarak sunucular kanal bağlamasını, hizmet bağlamasını veya her ikisini de doğrulayabilir.
Güncelleştirilmiş sunucular, ilkeye göre kanal bağlama bilgilerini içermeyen alt düzey istemci isteklerini kabul edebilir veya reddedebilirsiniz.
Genişletilmiş koruma tarafından kullanılan bilgiler aşağıdaki iki bölümden birini veya ikisini birden içerir:
Kanal Bağlama Belirteci veya CBT.
Hizmet Asıl Adı veya SPN biçiminde Hizmet Bağlama bilgileri.
Hizmet Bağlama bilgileri, istemcinin belirli bir hizmet uç noktasında kimlik doğrulaması yapma amacının göstergesidir. İstemciden sunucuya aşağıdaki özelliklerle iletilir:
SPN değeri, istemci kimlik doğrulamasını düz metin biçiminde gerçekleştiren sunucu tarafından kullanılabilir olmalıdır.
SPN değeri geneldir.
SPN aktarım sırasında şifrelemeyle korunmalıdır, böylece ortadaki adam saldırısı değerini ekleyemez, kaldıramaz veya değiştiremez.
CBT, dış güvenli kanalın (TLS gibi) iç, istemci tarafından kimliği doğrulanmış bir kanal üzerinden bir konuşmaya bağlamak (bağlamak) için kullanılan bir özelliğidir. CBT aşağıdaki özelliklere sahip olmalıdır (IETF RFC 5056 tarafından da tanımlanır):
Dış kanal mevcut olduğunda CBT değerinin, konuşmanın hem istemci hem de sunucu tarafı tarafından bağımsız olarak ulaşılan dış kanalı veya sunucu uç noktasını tanımlayan bir özellik olması gerekir.
İstemci tarafından gönderilen CBT değeri, saldırganın etkiebileceği bir şey olmamalıdır.
CBT değerinin gizliliği konusunda hiçbir garanti verilmemektedir. Ancak bu, hizmet bağlamasının yanı sıra kanal bağlama bilgilerinin değerinin, CBT'yi taşıyan protokol tarafından şifrelenebileceği için kimlik doğrulaması yapan sunucu dışındaki herhangi bir sunucu tarafından her zaman incelenebileceği anlamına gelmez.
CBT, aktarım sırasında bir saldırganın değerini ekleyememesi, kaldıramaması veya değiştirememesi için kriptografik olarak bütünlüğü korunacak şekilde koruma altında olmalıdır.
Kanal bağlama, istemcinin SPN ve CBT'yi sunucuya kurcalamaya dayanıklı bir şekilde aktarması ile gerçekleştirilir. Sunucu, kanal bağlama bilgilerini ilkesine uygun olarak doğrular ve hedef olduğunu düşünmediği kimlik doğrulama girişimlerini reddeder. Bu şekilde, iki kanal kriptografik olarak birbirine bağlanır.
Mevcut istemciler ve uygulamalarla uyumluluğu korumak için, bir sunucu henüz genişletilmiş korumayı desteklemeyen istemcilerin kimlik doğrulama girişimlerine izin verecek şekilde yapılandırılabilir. Bu, "tamamen sağlamlaştırılmış" yapılandırmanın aksine "kısmen sağlamlaştırılmış" yapılandırma olarak adlandırılır.
ve System.Net ad alanları içindeki System.Net.Security birden çok bileşen, bir çağrı uygulaması adına tümleşik Windows kimlik doğrulaması gerçekleştirir. Bu bölümde, tümleşik Windows kimlik doğrulaması kullanımlarında genişletilmiş koruma eklemek için System.Net bileşenlerinde yapılan değişiklikler açıklanmaktadır.
Genişletilmiş koruma şu anda Windows 7'de desteklenmektedir. Bir uygulamanın işletim sisteminin genişletilmiş korumayı desteklenip desteklemediğini belirleyebilmesi için bir mekanizma sağlanır.
Genişletilmiş Koruma desteğinde yapılan değişiklikler
Tümleşik Windows kimlik doğrulaması ile kullanılan kimlik doğrulama işlemi, kullanılan kimlik doğrulama protokolüne bağlı olarak, genellikle hedef bilgisayar tarafından verilen ve istemci bilgisayara geri gönderilen bir sınama içerir. Genişletilmiş koruma bu kimlik doğrulama işlemine yeni özellikler ekler
System.Security.Authentication.ExtendedProtection ad alanı, uygulamalar için genişletilmiş koruma sağlayarak kimlik doğrulaması desteği sağlar. ChannelBinding Bu ad alanında sınıfı bir kanal bağlamasını temsil eder. ExtendedProtectionPolicy Bu ad alanında sınıfı, gelen istemci bağlantılarını doğrulamak için sunucu tarafından kullanılan genişletilmiş koruma ilkesini temsil eder. Diğer sınıf üyeleri ekstra koruma ile kullanılır.
Sunucu uygulamaları için bu sınıflar aşağıdakileri içerir:
Aşağıdaki öğelere sahip bir ExtendedProtectionPolicy:
OSSupportsExtendedProtection İşletim sisteminin genişletilmiş koruma ile tümleşik Windows kimlik doğrulamasını destekleyip desteklemediğini gösteren özellik.
PolicyEnforcement Genişletilmiş koruma ilkesinin ne zaman uygulanması gerektiğini gösteren değer.
ProtectionScenario Dağıtım senaryolarını gösteren bir değer. Bu, genişletilmiş korumanın nasıl kontrol edildiğini etkiler.
İstemci tarafından kimlik doğrulamasının hedeflenen hedefi olarak sağlanan SPN ile eşleştirmek için kullanılan özel SPN listesini içeren isteğe bağlı ServiceNameCollection .
Doğrulamada kullanılacak özel bir kanal bağlaması içeren isteğe bağlı bir ChannelBinding. Bu senaryo yaygın bir durum değildir
System.Security.Authentication.ExtendedProtection.Configuration ad alanı, uygulamalar için gelişmiş koruma kullanarak kimlik doğrulama yapılandırmasına destek sağlar.
Mevcut System.Net ad alanında genişletilmiş korumayı desteklemek için bir dizi özellik değişikliği yapıldı. Bu değişiklikler şunlardır:
Bir aktarım bağlamını TransportContext temsil eden ad alanına yeni System.Net bir sınıf eklendi.
Yeni EndGetRequestStream ve GetRequestStream aşırı yükleme yöntemleri, HttpWebRequest sınıfında istemci uygulamaları için genişletilmiş korumayı desteklemek amacıyla TransportContext öğesinin alınmasına izin verir.
HttpListener ve HttpListenerRequest sınıflarına sunucu uygulamalarını desteklemek için eklemeler.
Mevcut System.Net.Mail ad alanında SMTP istemci uygulamaları için genişletilmiş korumayı desteklemek üzere bir özellik değişikliği yapıldı:
- TargetName sınıfında, SMTP istemci uygulamaları için genişletilmiş koruma kullanılırken kimlik doğrulaması için kullanılacak SPN'yi temsil eden bir özellik.SmtpClient
Mevcut System.Net.Security ad alanında genişletilmiş korumayı desteklemek için bir dizi özellik değişikliği yapıldı. Bu değişiklikler şunlardır:
İstemci uygulamaları için genişletilmiş korumayı desteklemek adına CBT'nin geçirilmesine izin veren yeni BeginAuthenticateAsClient ve AuthenticateAsClient aşırı yükleme yöntemleri NegotiateStream sınıfına eklenmiştir.
Yeni BeginAuthenticateAsServer ve AuthenticateAsServer aşırı yükleme yöntemlerinin, sınıfındaki NegotiateStream sunucu uygulamaları için genişletilmiş koruma sağlamak üzere bir ExtendedProtectionPolicy geçirilmesine izin verir.
İstemci ve sunucu uygulamaları için genişletilmiş korumayı desteklemek amacıyla, TransportContext sınıfında yeni bir SslStream özelliği.
SmtpNetworkElement ad alanında, SMTP istemcilerinin genişletilmiş koruma yapılandırmasını desteklemek amacıyla bir özellik eklendi System.Net.Security.
İstemci Uygulamaları için Genişletilmiş Koruma
Çoğu istemci uygulaması için genişletilmiş koruma desteği otomatik olarak gerçekleşir. HttpWebRequest ve SmtpClient sınıfları, Windows'un temeldeki sürümü genişletilmiş korumayı desteklediğinde genişletilmiş korumayı destekler. Bir HttpWebRequest örneği, Uri'den oluşturulan bir SPN gönderir. Varsayılan olarak, örnek SmtpClient SMTP posta sunucusunun ana bilgisayar adından oluşan bir SPN gönderir.
Özel kimlik doğrulaması için istemci uygulamaları, HttpWebRequest.EndGetRequestStream(IAsyncResult, TransportContext) ve CBT'yi almak amacıyla HttpWebRequest.GetRequestStream(TransportContext) sınıfında bulunan HttpWebRequest, TransportContext, ya da GetChannelBinding yöntemlerini kullanabilir.
Bir HttpWebRequest örneği tarafından belirli bir hizmete gönderilen entegre Windows kimlik doğrulaması için kullanılacak SPN, CustomTargetNameDictionary özelliği ayarlanarak geçersiz kılınabilir.
özelliği, TargetName SMTP bağlantısı için tümleşik Windows kimlik doğrulaması için kullanılacak özel bir SPN ayarlamak için kullanılabilir.
Sunucu Uygulamaları için Genişletilmiş Koruma
HttpListener OTOMATIK olarak HTTP kimlik doğrulaması gerçekleştirirken hizmet bağlamalarını doğrulama mekanizmaları sağlar.
En güvenli senaryo, ön ekler için HTTPS:// genişletilmiş korumayı etkinleştirmektir. Bu durumda, HttpListener.ExtendedProtectionPolicy öğesini ExtendedProtectionPolicy, PolicyEnforcement ile WhenSupported veya Always olarak ayarlayın ve ProtectionScenario öğesi TransportSelected olarak ayarlansın. WhenSupported değeri, HttpListener öğesini kısmen güçlendirilmiş moda geçirirken, Always ise tam güçlendirilmiş moda karşılık gelir.
Bu yapılandırmada, dış güvenli kanal üzerinden sunucuya istek gönderildiğinde, dış kanal bir kanal bağlaması için sorgulanır. Bu kanal bağlayıcısı, kimlik doğrulama blobundaki kanal bağlayıcısının eşleştiğini doğrulayan kimlik doğrulama SSPI çağrılarına geçirilir. Üç olası sonuç vardır:
Sunucunun temel işletim sistemi genişletilmiş korumayı desteklemez. İstek uygulamaya sunulmaz ve istemciye yetkisiz (401) yanıt döndürülür. İzleme kaynağına hatanın HttpListener nedenini belirten bir ileti kaydedilir.
SSPI çağrısı, istemcinin, dış kanaldan alınan beklenen değerle eşleşmeyen bir kanal bağlaması belirttiğini veya sunucudaki genişletilmiş koruma ilkesi Always için yapılandırıldığında istemcinin kanal bağlaması sağlayamadığını gösterir. Her iki durumda da istek uygulamaya sunulmaz ve istemciye yetkisiz (401) yanıt döndürülür. İzleme kaynağına hatanın HttpListener nedenini belirten bir ileti kaydedilir.
İstemci doğru kanal bağlamasını belirtir veya sunucudaki genişletilmiş koruma ilkesi WhenSupported ile yapılandırıldığından kanal bağlaması belirtmeden bağlanmasına izin verilir. İstek, işleme için uygulamaya döndürülür. Hizmet adı denetimi otomatik olarak yapılmaz. Bir uygulama, ServiceName özelliğini kullanarak kendi hizmet adı doğrulamasını gerçekleştirmeyi seçebilir, ancak bu koşullar altında bu gereksizdir.
Bir uygulama, HTTP isteğinin gövdesinde ileri geri geçirilen blobları temel alarak kimlik doğrulaması gerçekleştirmek için kendi SSPI çağrılarını yapar ve kanal bağlamayı desteklemek isterse, bunu yerel Win32 HttpListener işlevine geçirmek için kullanarak dış güvenli kanaldan beklenen kanal bağlamasını alması gerekir. Bunu yapmak için TransportContext özelliğini kullanın ve CBT'yi almak için GetChannelBinding yöntemini çağırın. Yalnızca uç nokta bağlamaları desteklenir.
Endpoint dışında bir şey belirtilirse, bir NotSupportedException fırlatılır. Temel alınan işletim sistemi kanal bağlamayı destekliyorsa, GetChannelBinding yöntemi, ChannelBinding işlevine, SafeHandle parametresinde geçirilen bir SecBuffer yapısının pvBuffer üyesi olarak geçirebileceğiniz bir işaretçiyi saran bir pInput döndürür.
Size özelliği, kanal bağlamasının uzunluğunu bayt cinsinden içerir. Temel alınan işletim sistemi kanal bağlamalarını desteklemiyorsa, işlev null döndürecektir.
Başka bir olası senaryo, proxy'ler kullanılmadığında ön ekler için HTTP:// genişletilmiş korumayı etkinleştirmektir. Bu durumda, HttpListener.ExtendedProtectionPolicy öğesini ExtendedProtectionPolicy, PolicyEnforcement ile WhenSupported veya Always olarak ayarlayın ve ProtectionScenario öğesi TransportSelected olarak ayarlansın. WhenSupported değeri, HttpListener öğesini kısmen güçlendirilmiş moda geçirirken, Always ise tam güçlendirilmiş moda karşılık gelir.
İzin verilen hizmet adlarının varsayılan listesi, HttpListener ile tescil edilmiş ön ekler temel alınarak oluşturulur. Bu varsayılan liste, DefaultServiceNames özelliği aracılığıyla incelenebilir. Bu liste kapsamlı değilse, bir uygulama varsayılan hizmet adı listesi yerine kullanılacak sınıfın ExtendedProtectionPolicy oluşturucusunda özel bir hizmet adı koleksiyonu belirtebilir.
Bu yapılandırmada, dış güvenli kanal kimlik doğrulaması olmadan sunucuya bir istek yapıldığında kanal bağlama denetimi olmadan normal şekilde devam eder. Kimlik doğrulaması başarılı olursa, istemcinin sağladığı hizmet adı için bağlam sorgulanır ve kabul edilebilir hizmet adları listesinde doğrulanır. Dört olası sonuç vardır:
Sunucunun temel işletim sistemi genişletilmiş korumayı desteklemez. İstek uygulamaya sunulmaz ve istemciye yetkisiz (401) yanıt döndürülür. İzleme kaynağına hatanın HttpListener nedenini belirten bir ileti kaydedilir.
İstemcinin temel işletim sistemi genişletilmiş korumayı desteklemez. Yapılandırmada WhenSupported kimlik doğrulama girişimi başarılı olur ve istek uygulamaya döndürülür. Yapılandırmada Always kimlik doğrulama girişimi başarısız olur. İstek uygulamaya sunulmaz ve istemciye yetkisiz (401) yanıt döndürülür. İzleme kaynağına hatanın HttpListener nedenini belirten bir ileti kaydedilir.
İstemcinin temel işletim sistemi genişletilmiş korumayı destekler, ancak uygulama bir hizmet bağlaması belirtmedi. İstek uygulamaya sunulmaz ve istemciye yetkisiz (401) yanıt döndürülür. İzleme kaynağına hatanın HttpListener nedenini belirten bir ileti kaydedilir.
İstemci bir hizmet bağlaması belirtti. Hizmet bağlaması, izin verilen hizmet bağlamaları listesiyle karşılaştırılır. Eşleşirse, istek uygulamaya döndürülür. Aksi takdirde istek uygulamaya sunulmaz ve istemciye otomatik olarak yetkisiz (401) yanıt döndürülür. İzleme kaynağına hatanın HttpListener nedenini belirten bir ileti kaydedilir.
İzin verilen kabul edilebilir hizmet adları listesini kullanan bu basit yaklaşım yetersiz kalıyorsa, bir uygulama ServiceName özelliğini sorgulayarak kendi hizmet adı doğrulamasını sağlayabilir. Yukarıdaki 1 ve 2 durumlarında, özellik null'yi döndürecektir. Durum 3'te, boş bir string döndürür. 4 olması durumunda, istemci tarafından belirtilen hizmet adı döndürülür.
Bu genişletilmiş koruma özellikleri, sunucu uygulamaları tarafından diğer istek türleriyle ve güvenilen proxy'ler kullanıldığında kimlik doğrulaması için de kullanılabilir.