SslStreamSecurityBindingElement Sınıf

Tanım

SSL akışı kullanarak kanal güvenliğini destekleyen özel bir bağlama öğesini temsil eder.

public ref class SslStreamSecurityBindingElement : System::ServiceModel::Channels::BindingElement
public ref class SslStreamSecurityBindingElement : System::ServiceModel::Channels::StreamUpgradeBindingElement
public ref class SslStreamSecurityBindingElement : System::ServiceModel::Channels::StreamUpgradeBindingElement, System::ServiceModel::Channels::ITransportTokenAssertionProvider, System::ServiceModel::Description::IPolicyExportExtension
public class SslStreamSecurityBindingElement : System.ServiceModel.Channels.BindingElement
public class SslStreamSecurityBindingElement : System.ServiceModel.Channels.StreamUpgradeBindingElement
public class SslStreamSecurityBindingElement : System.ServiceModel.Channels.StreamUpgradeBindingElement, System.ServiceModel.Channels.ITransportTokenAssertionProvider, System.ServiceModel.Description.IPolicyExportExtension
type SslStreamSecurityBindingElement = class
    inherit BindingElement
type SslStreamSecurityBindingElement = class
    inherit StreamUpgradeBindingElement
type SslStreamSecurityBindingElement = class
    inherit StreamUpgradeBindingElement
    interface ITransportTokenAssertionProvider
    interface IPolicyExportExtension
Public Class SslStreamSecurityBindingElement
Inherits BindingElement
Public Class SslStreamSecurityBindingElement
Inherits StreamUpgradeBindingElement
Public Class SslStreamSecurityBindingElement
Inherits StreamUpgradeBindingElement
Implements IPolicyExportExtension, ITransportTokenAssertionProvider
Devralma
SslStreamSecurityBindingElement
Devralma
SslStreamSecurityBindingElement
Uygulamalar

Açıklamalar

TCP ve adlandırılmış kanallar gibi akış odaklı bir protokol kullanan aktarımlar, akış tabanlı aktarım yükseltmelerini destekler. Özellikle, Windows Communication Foundation (WCF) güvenlik yükseltmeleri sağlar. Bu aktarım güvenliğinin yapılandırması hem bu sınıf hem de SslStreamSecurityBindingElementtarafından yapılandırılabilir ve özel bağlamaya eklenebilir. Buna ek olarak, üçüncü taraf kendi özel StreamSecurityBindingElementyazabilir. Bu bağlama öğeleri, istemci ve sunucu akışı yükseltme sağlayıcılarını derlemek için çağrılan sınıfını genişletir StreamUpgradeBindingElement .

Özel bağlama, belirli bir sırada düzenlenmiş bağlama öğelerinin koleksiyonunu içerir: bağlama yığınının üst kısmını temsil eden öğe önce eklenir, bağlama yığınındaki bir sonraki öğe ikinci olarak eklenir ve bu şekilde devam eder.

Bu sınıfı bağlamaya eklemek için

  1. oluşturun BindingElementCollection.

  2. Bağlama yığınında bu bağlama öğesinin üzerinde olan isteğe bağlı TransactionFlowBindingElement ve ReliableSessionBindingElementgibi özel bağlama öğeleri oluşturun.

  3. Oluşturulan öğeleri daha önce açıklanan sırayla yöntemini kullanarak InsertItem öğesine BindingElementCollection ekleyin.

  4. örneğini SslStreamSecurityBindingElement oluşturun ve koleksiyona ekleyin.

  5. Koleksiyonuna gibi TcpTransportBindingElementek özel bağlama öğeleri ekleyin.

WSDL'yi içeri aktardıktan sonra istemci uç noktasında doğru UPN/SPN'yi el ile belirtmeniz veya istemcinin SslStreamSecurityBindingElementüzerinde bir özel IdentityVerifier değer belirtmeniz gereken üç senaryo vardır.

  1. WSDL'de hiçbir hizmet kimliği yayımlanmaz. SspiNegotiatedOverTransportve HTTPS kullanılır (örneğin, SecurityMode = TransportWithMessageCredentialile ).WSHttpBinding Hizmet makine kimliğiyle çalışmıyorsa, WSDL'yi içeri aktardıktan sonra istemci uç noktasında doğru UPN/SPN'yi el ile belirtmeniz gerekir.

  2. DNS hizmet kimliği WSDL'de yayımlanır. SspiNegotiatedOverTransport ve SslStreamSecurityBindingElement upn/SPN yerine kullanılır (örneğin SecurityMode NetTcpBinding = TransportWithMessageCredentialile). Hizmet makine kimliğiyle çalışmıyorsa veya DNS kimliği makinenin kimliği değilse, WSDL'yi içeri aktardıktan sonra istemci uç noktasında doğru UPN/SPN'yi el ile belirtmeniz gerekir.

  3. DNS kimliği WSDL'de yayımlanır. SslStreamSecurityBindingElement İstemcide geçersiz kılınırsa, istemcinin SslStreamSecurityBindingElementüzerinde özel IdentityVerifier bir belirtmelisiniz.

Aşağıdaki kod, istemci uç noktasında doğru UPN/SPN'nin nasıl el ile belirtileceğini ve ayrıca istemcinin SslStreamSecurityBindingElementüzerinde bir özel IdentityVerifier değerin nasıl belirtileceğini gösterir.

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Net;  
using System.IdentityModel.Claims;  
using System.IdentityModel.Policy;  
using System.Security.Cryptography.X509Certificates;  
using System.ServiceModel;  
using System.ServiceModel.Channels;  
using System.ServiceModel.Description;  
using System.ServiceModel.Security;  
using System.Xml;  

namespace ServiceNamespace  
{  
    [ServiceContract]  
    interface IService  
    {  
        [OperationContract]  
        void DoSomething();  
    }  

    class DnsIdentityVerifier : IdentityVerifier  
    {  
        DnsEndpointIdentity _expectedIdentity;  

        public DnsIdentityVerifier(EndpointAddress serviceEndpoint)  
        {  
            _expectedIdentity = new DnsEndpointIdentity(serviceEndpoint.Uri.DnsSafeHost);  
        }  

        public override bool CheckAccess(EndpointIdentity identity, AuthorizationContext authContext)  
        {  
            Claim dnsClaim = authContext.Claims().Single(claim => claim.ClaimType == ClaimTypes.Dns);  
            return String.Equals(_expectedIdentity.IdentityClaim.Resource, dnsClaim.Resource);  
        }  

        public override bool TryGetIdentity(EndpointAddress reference, out EndpointIdentity identity)  
        {  
            identity = _expectedIdentity;  
            return true;  
        }  
    }  

    static class LinqExtensionForClaims  
    {  
        public static IEnumerable<Claim> Claims(this AuthorizationContext authContext)  
        {  
            if (null != authContext.ClaimSets)  
            {  
                foreach (ClaimSet claimSet in authContext.ClaimSets)  
                {  
                    if (null != claimSet)  
                    {  
                        foreach (Claim claim in claimSet)  
                        {  
                            yield return claim;  
                        }  
                    }  
                }  
            }  
        }  
    }  

    class Service : IService  
    {  
        public void DoSomething()  
        {  
            Console.WriteLine("Service called.");  
        }  
    }  

    class Program  
    {  
        static void Main(string[] args)  
        {  
            string hostname = Dns.GetHostEntry(String.Empty).HostName;  
            NetTcpBinding serviceBinding = new NetTcpBinding(SecurityMode.TransportWithMessageCredential);  

            ServiceHost serviceHost = new ServiceHost(typeof(Service), new Uri(String.Format("net.tcp://{0}:8080/Service", hostname)));  
            serviceHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, "8a 42 1b eb cf 8a 14 b1 de 83 d9 a5 70 88 0a 62 f9 bf 69 06");  
            ServiceEndpoint serviceEndpoint = serviceHost.AddServiceEndpoint(typeof(IService), serviceBinding, "Endpoint");  
            serviceHost.Open();  

            CustomBinding clientBinding = new CustomBinding(serviceBinding.CreateBindingElements());  
            SslStreamSecurityBindingElement sslStream = clientBinding.Elements.Find<SslStreamSecurityBindingElement>();  
            sslStream.IdentityVerifier = new DnsIdentityVerifier(serviceEndpoint.Address);  

            ChannelFactory<IService> channelFactory = new ChannelFactory<IService>(clientBinding, new EndpointAddress(serviceEndpoint.Address.Uri, UpnEndpointIdentity.CreateUpnIdentity("username@domain")));  
            channelFactory.Credentials.Windows.AllowNtlm = false;  
            IService channel = channelFactory.CreateChannel();  
            channel.DoSomething();  
        }  
    }  

Oluşturucular

SslStreamSecurityBindingElement()

SslStreamSecurityBindingElement sınıfının yeni bir örneğini başlatır.

SslStreamSecurityBindingElement(SslStreamSecurityBindingElement)

Başka SslStreamSecurityBindingElementbir öğesinin SslStreamSecurityBindingElement değerlerini kullanarak sınıfının yeni bir örneğini başlatır.

Özellikler

IdentityVerifier

Bu bağlama için kimlik doğrulayıcısını alır veya ayarlar.

RequireClientCertificate

Bu bağlama için bir istemci sertifikası gerekip gerekmediğini belirten bir değer alır veya ayarlar.

SslProtocols

TcpClientCredentialType.Certificate istemci kimlik bilgisi türü kullanılırken anlaşacak SSL/TLS protokollerinin listesini belirtir. Değer, aşağıdaki numaralandırma üyelerinden birinin daha fazlasının birleşimi olabilir: Ssl3, Tls, Tls11, Tls12.

Yöntemler

BuildChannelFactory<TChannel>(BindingContext)

Belirtilen türde bir kanal fabrikası oluşturur.

BuildChannelListener<TChannel>(BindingContext)

Belirtilen türde bir kanal dinleyicisi oluşturur.

BuildChannelListener<TChannel>(BindingContext)

Bağlama bağlamından belirtilen türde kanalları kabul etmek için bir kanal dinleyicisi başlatır.

(Devralındığı yer: BindingElement)
BuildClientStreamUpgradeProvider(BindingContext)

sağlanan kanal bağlamını StreamUpgradeProvider temel alarak istemcisinde bir örnek oluşturur.

BuildServerStreamUpgradeProvider(BindingContext)

Sağlanan kanal bağlamını StreamUpgradeProvider temel alarak sunucusunda bir örnek oluşturur.

BuildServerStreamUpgradeProvider(BindingContext)

Sağlanan kanal bağlamını StreamUpgradeProvider temel alarak sunucusunda bir örnek oluşturur.

(Devralındığı yer: StreamUpgradeBindingElement)
CanBuildChannelFactory<TChannel>(BindingContext)

Belirtilen türdeki bir kanal fabrikasının oluşturulup oluşturulamayacağını gösteren bir değer alır.

CanBuildChannelListener<TChannel>(BindingContext)

Belirtilen türdeki bir kanal dinleyicisinin oluşturulup oluşturulamayacağını gösteren bir değer alır.

CanBuildChannelListener<TChannel>(BindingContext)

Bağlama öğesinin belirli bir kanal türü için dinleyici oluşturup oluşturamayacağını gösteren bir değer döndürür.

(Devralındığı yer: BindingElement)
Clone()

Geçerli örneğin kopyası olan yeni bir örnek oluşturur.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetProperty<T>(BindingContext)

öğesinden BindingContextbelirtilen nesneyi alır.

GetTransportTokenAssertion()

XmlElement Güvenlik bağlamasında kullanılan aktarım belirtecini temsil eden öğesini alır.

GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ShouldSerializeIdentityVerifier()

Tanımlayıcı doğrulayıcının seri hale getirilip getirilmeyeceğini belirten bir değer alır.

ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Belirtik Arabirim Kullanımları

IPolicyExportExtension.ExportPolicy(MetadataExporter, PolicyConversionContext)

Bağlamalar hakkında özel bir ilke onaylama işlemi dışarı aktarır.

Şunlara uygulanır