Taşıma Güvenliği Genel Bakış
Windows Communication Foundation'daki (WCF) aktarım güvenliği mekanizmaları, kullanılan bağlamaya ve taşımaya bağlıdır. Örneğin, sınıfı kullanılırken WSHttpBinding aktarım HTTP'dir ve aktarımın güvenliğini sağlamaya yönelik birincil mekanizma, genellikle HTTPS olarak adlandırılan HTTP üzerinden Güvenli Yuva Katmanı 'dır (SSL). Bu konu, WCF sistem tarafından sağlanan bağlamalarda kullanılan başlıca aktarım güvenliği mekanizmalarını ele alır.
Not
SSL güvenliği .NET Framework 3.5 ve üzeri ile kullanıldığında, WCF istemcisi hizmetin sertifikasında sertifika zinciri doğrulaması gerçekleştirmek için hem sertifika deposundaki ara sertifikaları hem de SSL anlaşması sırasında alınan ara sertifikaları kullanır. .NET Framework 3.0 yalnızca yerel sertifika deposunda yüklü olan ara sertifikaları kullanır.
Uyarı
Aktarım güvenliği kullanıldığında özelliğin Thread.CurrentPrincipal üzerine yazılabilir. Bunun olmasını önlemek için olarak ServiceAuthorizationBehavior.PrincipalPermissionModePrincipalPermissionMode.Noneayarlayın. ServiceAuthorizationBehavior , hizmet açıklamasında ayarlanabilen bir hizmet davranışıdır.
TemelHttpBinding
Varsayılan olarak, BasicHttpBinding sınıfı güvenlik sağlamaz. Bu bağlama, güvenliği uygulamayan Web hizmeti sağlayıcılarıyla birlikte çalışabilirlik için tasarlanmıştır. Ancak, özelliğini dışında Noneherhangi bir değere ayarlayarak Mode güvenliği açabilirsiniz. Aktarım güvenliğini etkinleştirmek için özelliğini olarak Transportayarlayın.
IIS ile Birlikte Çalışma
BasicHttpBinding sınıfı öncelikli olarak mevcut Web hizmetleriyle birlikte çalışabilmek için kullanılır ve bu hizmetlerin çoğu Internet Information Services (IIS) tarafından barındırılır. Sonuç olarak, bu bağlamanın aktarım güvenliği IIS siteleriyle sorunsuz bir şekilde birlikte çalışma için tasarlanmıştır. Bu işlem, güvenlik modu Transport olarak ayarlanıp istemci kimlik bilgisi türü ayarlanarak yapılır. Kimlik bilgisi türü değerleri IIS dizin güvenlik mekanizmalarına karşılık gelir. Aşağıdaki kod, ayarlanan modu ve kimlik bilgisi türünün Windows olarak ayarlandığını gösterir. Hem istemci hem de sunucu aynı Windows etki alanında olduğunda bu yapılandırmayı kullanabilirsiniz.
BasicHttpBinding b = new BasicHttpBinding();
b.Security.Mode = BasicHttpSecurityMode.Transport ;
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
Dim b As BasicHttpBinding = New BasicHttpBinding()
b.Security.Mode = BasicHttpSecurityMode.Transport
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
Veya yapılandırmada:
<bindings>
<basicHttpBinding>
<binding name="SecurityByTransport">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>
Aşağıdaki bölümlerde diğer istemci kimlik bilgileri türleri açıklanmıştır.
Temel
Bu, IIS'deki Temel kimlik doğrulama yöntemine karşılık gelir. Bu modu kullanırken IIS sunucusunun Windows kullanıcı hesapları ve uygun NTFS dosya sistemi izinleri ile yapılandırılması gerekir. IIS 6.0 hakkında daha fazla bilgi için bkz . Temel Kimlik Doğrulamasını Etkinleştirme ve Bölge Adını Yapılandırma. IIS 7.0 hakkında daha fazla bilgi için bkz . Temel Kimlik Doğrulamasını Yapılandırma (IIS 7).
Sertifika
IIS'de istemcilerin bir sertifikayla oturum açmasını zorunlu kılan bir seçenek vardır. Bu özellik, IIS'nin bir istemci sertifikasını bir Windows hesabıyla eşlemesini de sağlar. IIS 6.0 hakkında daha fazla bilgi için bkz . IIS 6.0'da İstemci Sertifikalarını Etkinleştirme. IIS 7.0 hakkında daha fazla bilgi için bkz . IIS 7'de Sunucu Sertifikalarını Yapılandırma.
Özet
Özet kimlik doğrulaması Temel kimlik doğrulamasına benzer, ancak kimlik bilgilerini düz metin yerine karma olarak gönderme avantajı sunar. IIS 6.0 hakkında daha fazla bilgi için bkz . IIS 6.0'da Özet Kimlik Doğrulaması. IIS 7.0 hakkında daha fazla bilgi için bkz . Özet Kimlik Doğrulamasını Yapılandırma (IIS 7).
Windows
Bu, IIS'de tümleşik Windows kimlik doğrulamasına karşılık gelir. Bu değere ayarlandığında, sunucunun etki alanı denetleyicisi olarak Kerberos protokolünü kullanan bir Windows etki alanında da bulunması beklenir. Sunucu Kerberos destekli bir etki alanında değilse veya Kerberos sistemi başarısız olursa, sonraki bölümde açıklanan NT LAN Manager (NTLM) değerini kullanabilirsiniz. IIS 6.0 hakkında daha fazla bilgi için bkz . IIS 6.0'da Tümleşik Windows Kimlik Doğrulaması. IIS 7.0 hakkında daha fazla bilgi için bkz . IIS 7'de Sunucu Sertifikalarını Yapılandırma.
NTLM
Bu, Kerberos protokolü başarısız olursa sunucunun kimlik doğrulaması için NTLM kullanmasını sağlar. IIS 6.0'da IIS'yi yapılandırma hakkında daha fazla bilgi için bkz . NTLM Kimlik Doğrulamasını Zorlama. IIS 7.0 için Windows kimlik doğrulaması NTLM kimlik doğrulamasını içerir. Daha fazla bilgi için bkz . IIS 7'de Sunucu Sertifikalarını Yapılandırma.
WsHttpBinding
WSHttpBinding sınıfı, WS-* belirtimlerini uygulayan hizmetlerle birlikte çalışma için tasarlanmıştır. Bu bağlamanın aktarım güvenliği, HTTP veya HTTPS üzerinden Güvenli Yuva Katmanı (SSL) şeklindedir. SSL kullanan bir WCF uygulaması oluşturmak için iis kullanarak uygulamayı barındırın. Alternatif olarak, şirket içinde barındırılan bir uygulama oluşturuyorsanız, X.509 sertifikasını bilgisayardaki belirli bir bağlantı noktasına bağlamak için HttpCfg.exe aracını kullanın. Bağlantı noktası numarası, WCF uygulamasının bir parçası olarak uç nokta adresi olarak belirtilir. Aktarım modu kullanılırken uç nokta adresi HTTPS protokollerini içermelidir, aksi takdirde çalışma zamanında bir özel durum oluşturulur. Daha fazla bilgi için bkz . HTTP Aktarım Güvenliği.
İstemci kimlik doğrulaması için sınıfının özelliğini HttpTransportSecurity numaralandırma değerlerinden HttpClientCredentialType birine ayarlayınClientCredentialType. Numaralandırma değerleri, için BasicHttpBinding istemci kimlik bilgisi türleriyle aynıdır ve IIS hizmetleriyle barındırılacak şekilde tasarlanmıştır.
Aşağıdaki örnekte, Windows'un istemci kimlik bilgisi türüyle kullanılan bağlama gösterilmektedir.
// The code uses a shortcut to specify the security mode to Transport.
WSHttpBinding b = new WSHttpBinding(SecurityMode.Transport);
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
' The code uses a shortcut to specify the security mode to Transport.
Dim b As WSHttpBinding = New WSHttpBinding(SecurityMode.Transport)
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
WSDualHttpBinding
Bu bağlama yalnızca ileti düzeyi güvenlik sağlar, aktarım düzeyi güvenlik sağlamaz.
NetTcpBinding
sınıfı, NetTcpBinding ileti aktarımı için TCP kullanır. Aktarım modu güvenliği, TCP üzerinden Aktarım Katmanı Güvenliği (TLS) uygulanarak sağlanır. TLS uygulaması işletim sistemi tarafından sağlanır.
Ayrıca, aşağıdaki kodda gösterildiği gibi sınıfının özelliğini TcpTransportSecurity değerlerden birine ayarlayarak ClientCredentialType istemcinin TcpClientCredentialType kimlik bilgisi türünü belirtebilirsiniz.
NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType =
TcpClientCredentialType.Certificate;
Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate
İstemci
İstemcide, sınıfının yöntemini X509CertificateInitiatorClientCredential kullanarak SetCertificate bir sertifika belirtmeniz gerekir.
Not
Windows güvenliği kullanıyorsanız, sertifika gerekmez.
Aşağıdaki kod, sertifikayı benzersiz olarak tanımlayan parmak izini kullanır. Sertifikalar hakkında daha fazla bilgi için bkz . Sertifikalarla Çalışma.
NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;
EndpointAddress a = new EndpointAddress("net.tcp://contoso.com/TcpAddress");
ChannelFactory<ICalculator> cf = new ChannelFactory<ICalculator>(b, a);
cf.Credentials.ClientCertificate.SetCertificate(
StoreLocation.LocalMachine,
StoreName.My,
X509FindType.FindByThumbprint,
"0000000000000000000000000000000000000000");
Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate
Dim a As New EndpointAddress("net.tcp://contoso.com/TcpAddress")
Dim cf As ChannelFactory(Of ICalculator) = New ChannelFactory(Of ICalculator)(b, a)
cf.Credentials.ClientCertificate.SetCertificate( _
StoreLocation.LocalMachine, _
StoreName.My, _
X509FindType.FindByThumbprint, _
"0000000000000000000000000000000000000000")
Alternatif olarak, davranışlar bölümünde clientCredentials ><öğesini kullanarak istemcinin yapılandırmasında sertifikayı belirtin.
<behaviors>
<behavior>
<clientCredentials>
<clientCertificate findValue= "101010101010101010101010101010000000000"
storeLocation="LocalMachine" storeName="My"
X509FindType="FindByThumbPrint">
</clientCertificate>
</clientCredentials>
</behavior>
</behaviors>
NetNamedPipeBinding
NetNamedPipeBinding sınıfı verimli makine içi iletişim için tasarlanmıştır; yani aynı bilgisayarda çalışan işlemler için tasarlanmıştır, ancak adlandırılmış kanal kanalları aynı ağdaki iki bilgisayar arasında oluşturulabilir. Bu bağlama yalnızca aktarım düzeyi güvenlik sağlar. Bu bağlamayı kullanarak uygulama oluştururken uç nokta adreslerinin uç nokta adresinin protokolü olarak "net.pipe" içermesi gerekir.
WSFederationHttpBinding
Aktarım güvenliği kullanılırken bu bağlama, verilen belirteçle (TransportWithMessageCredential) HTTPS olarak bilinen HTTP üzerinden SSL kullanır. Federasyon uygulamaları hakkında daha fazla bilgi için bkz . Federasyon ve Verilen Belirteçler.
Netpeertcpbinding
NetPeerTcpBinding sınıfı, eşler arası ağ özelliği kullanılarak verimli iletişim için tasarlanmış güvenli bir aktarımdır. Sınıfın ve bağlamanın adıyla belirtildiği gibi, TCP protokoldür. Güvenlik modu Aktarım olarak ayarlandığında bağlama, TCP üzerinden TLS uygular. Eşler arası özellik hakkında daha fazla bilgi için bkz . Eşler Arası Ağ.
MsmqIntegrationBinding ve NetMsmqBinding
Message Queuing ile aktarım güvenliğinin (daha önce MSMQ olarak adlandırılıyor) eksiksiz bir tartışması için bkz . Aktarım Güvenliğini Kullanarak İletileri Güvenli Hale Getirme.