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 tarafından hem de SslStreamSecurityBindingElementtarafından yapılandırılabilir ve özel bağlamaya eklenebilir. Buna ek olarak, bir üçü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ı genişletir StreamUpgradeBindingElement .

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

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

  1. BindingElementCollection oluşturun.

  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. Yöntemi kullanarakBindingElementCollection, oluşturulan öğeleri daha önce InsertItem açıklanan sırayla öğesine 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 IdentityVerifierüzerinde bir özel SslStreamSecurityBindingElement değer belirtmeniz gereken üç senaryo vardır.

  1. WSDL'de hiçbir hizmet kimliği yayımlanmaz. SspiNegotiatedOverTransport ve HTTPS kullanılır (örneğin, WSHttpBinding SecurityMode = TransportWithMessageCredentialile ). 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 IdentityVerifierüzerinde bir özel SslStreamSecurityBindingElement belirtmeniz gerekir.

Aşağıdaki kod, istemci uç noktasında doğru UPN/SPN'nin el ile nasıl belirtileceğini ve istemcinin IdentityVerifierüzerinde bir özel SslStreamSecurityBindingElement 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

Name Description
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

Name Description
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 görüşülecek SSL/TLS protokollerinin listesini belirtir. Değer, aşağıdaki sabit listesi üyelerinden birinin daha bir birleşimi olabilir: Ssl3, Tls, Tls11, Tls12.

Yöntemler

Name Description
BuildChannelFactory<TChannel>(BindingContext)

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

BuildChannelListener<TChannel>(BindingContext)

Belirtilen türde bir kanal dinleyicisi oluşturur.

BuildClientStreamUpgradeProvider(BindingContext)

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

BuildServerStreamUpgradeProvider(BindingContext)

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

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.

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()

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

GetType()

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

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

Geçerli Objectbasit bir kopyasını oluşturur.

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

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

ToString()

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

(Devralındığı yer: Object)

Belirtik Arabirim Kullanımları

Name Description
IPolicyExportExtension.ExportPolicy(MetadataExporter, PolicyConversionContext)

Bağlamalar hakkında özel bir ilke onaylamasını dışarı aktarır.

Şunlara uygulanır