SslStreamSecurityBindingElement Klasa

Definicja

Reprezentuje element niestandardowego powiązania, który obsługuje zabezpieczenia kanału przy użyciu strumienia SSL.Represents a custom binding element that supports channel security using an SSL stream.

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

Uwagi

Transporty korzystające z protokołu opartego na strumieniu, takiego jak TCP i nazwane potoki, obsługują uaktualnienia transportu na podstawie strumienia.Transports that use a stream-oriented protocol such as TCP and named pipes support stream-based transport upgrades. W Windows Communication Foundation (WCF) zapewnia uaktualnienia zabezpieczeń.Specifically, Windows Communication Foundation (WCF) provides security upgrades. Konfiguracja tego zabezpieczenia transportu jest hermetyzowana przez tę klasę, a także przez SslStreamSecurityBindingElement , którą można skonfigurować i dodać do niestandardowego powiązania.The configuration of this transport security is encapsulated by this class as well as by SslStreamSecurityBindingElement, which can be configured and added to a custom binding. Ponadto inne osoby trzecie mogą pisać własne niestandardowe StreamSecurityBindingElement .In addition, a third party can write their own custom StreamSecurityBindingElement. Te elementy powiązania rozszerzają StreamUpgradeBindingElement klasę, która jest wywoływana w celu utworzenia dostawców uaktualnienia strumienia klienta i serwera.These binding elements extend the StreamUpgradeBindingElement class that is called to build the client and server stream upgrade providers.

Powiązanie niestandardowe zawiera kolekcję elementów wiążących uporządkowanych w określonej kolejności: element reprezentujący początek stosu powiązań jest dodawany jako pierwszy, następny element w dół stosu powiązań został dodany drugi i tak dalej.A custom binding contains a collection of binding elements arranged in a specific order: the element that represents the top of the binding stack is added first, the next element down in the binding stack is added second, and so on.

Aby dodać tę klasę do powiązaniaTo add this class to a binding

  1. Utwórz BindingElementCollection .Create a BindingElementCollection.

  2. Utwórz niestandardowe elementy powiązania, które znajdują się powyżej tego elementu wiązania w stosie powiązań, takie jak opcjonalne TransactionFlowBindingElement i ReliableSessionBindingElement .Create custom binding elements that are above this binding element in the binding stack, such as the optional TransactionFlowBindingElement and ReliableSessionBindingElement.

  3. Dodaj elementy utworzone w kolejności opisanej wcześniej do BindingElementCollection InsertItem metody using.Add the created elements in the order described previously to the BindingElementCollection using the InsertItem method.

  4. Utwórz wystąpienie elementu SslStreamSecurityBindingElement i Dodaj je do kolekcji.Create an instance of SslStreamSecurityBindingElement and add it to the collection.

  5. Dodaj dodatkowe niestandardowe elementy powiązania do kolekcji, np TcpTransportBindingElement ..Add any additional custom binding elements to the collection, such as TcpTransportBindingElement.

Istnieją trzy scenariusze, w których należy ręcznie określić poprawną nazwę UPN/nazwę SPN w punkcie końcowym klienta po zaimportowaniu WSDL lub określić niestandardowe IdentityVerifier na kliencie SslStreamSecurityBindingElement .There are three scenarios in which you must either manually specify the correct UPN/SPN on the client endpoint after importing the WSDL, or specify a custom IdentityVerifier on the client's SslStreamSecurityBindingElement.

  1. Żadna tożsamość usługi nie została opublikowana w języku WSDL.No service identity is published in WSDL. SspiNegotiatedOverTransporti używane są protokół HTTPS (na przykład a WSHttpBinding with SecurityMode = TransportWithMessageCredential ).SspiNegotiatedOverTransport and HTTPS are used (for example, a WSHttpBinding with SecurityMode = TransportWithMessageCredential). Jeśli usługa nie jest uruchomiona z tożsamością komputera, należy ręcznie określić poprawną nazwę UPN/SPN w punkcie końcowym klienta po zaimportowaniu WSDL.If the service is not running with the machine identity, you must manually specify the correct UPN/SPN on the client endpoint after importing the WSDL.

  2. Tożsamość usługi DNS jest publikowana w języku WSDL.DNS service identity is published in WSDL. SspiNegotiatedOverTransporti SslStreamSecurityBindingElement są używane (na przykład NetTcpBinding z atrybutem SecurityMode = TransportWithMessageCredential ) zamiast nazwy UPN/SPN.SspiNegotiatedOverTransport and SslStreamSecurityBindingElement are used (for example, NetTcpBinding with SecurityMode = TransportWithMessageCredential) instead of a UPN/SPN. Jeśli usługa nie jest uruchomiona z tożsamością komputera lub tożsamość usługi DNS nie jest tożsamością komputera, należy ręcznie określić poprawną nazwę UPN/SPN w punkcie końcowym klienta po zaimportowaniu WSDL.If the service is not running with the machine identity, or the DNS identity is not the machine's identity, you must manually specify the correct UPN/SPN on the client endpoint after importing the WSDL.

  3. Tożsamość DNS jest publikowana w języku WSDL.DNS identity is published in WSDL. Jeśli SslStreamSecurityBindingElement program zostanie zastąpiony na kliencie, należy określić niestandardowy IdentityVerifier na kliencie SslStreamSecurityBindingElement .If SslStreamSecurityBindingElement is overridden on the client, you must specify a custom IdentityVerifier on the client's SslStreamSecurityBindingElement.

Poniższy kod pokazuje, jak ręcznie określić poprawną nazwę UPN/nazwę SPN w punkcie końcowym klienta, a także jak określić niestandardowe IdentityVerifier na kliencie SslStreamSecurityBindingElement .The following code shows how to manually specify the correct UPN/SPN on the client endpoint, as well as how to specify a custom IdentityVerifier on the client's SslStreamSecurityBindingElement.

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

Konstruktory

SslStreamSecurityBindingElement()

Inicjuje nowe wystąpienie klasy SslStreamSecurityBindingElement.Initializes a new instance of the SslStreamSecurityBindingElement class.

SslStreamSecurityBindingElement(SslStreamSecurityBindingElement)

Inicjuje nowe wystąpienie SslStreamSecurityBindingElement klasy przy użyciu wartości z innego SslStreamSecurityBindingElement .Initializes a new instance of the SslStreamSecurityBindingElement class using the values from another SslStreamSecurityBindingElement.

Właściwości

IdentityVerifier

Pobiera lub ustawia weryfikator tożsamości dla tego powiązania.Gets or sets the identity verifier for this binding.

RequireClientCertificate

Pobiera lub ustawia wartość określającą, czy certyfikat klienta jest wymagany dla tego powiązania.Gets or sets a value that specifies whether a client certificate is required for this binding.

SslProtocols

Określa listę protokołów SSL/TLS, które mają być negocjowane w przypadku używania poświadczeń klienta typu TcpClientCredentialType. Certificate.Specifies the list of SSL/TLS protocols to negotiate when using a client credential type of TcpClientCredentialType.Certificate. Wartość może być kombinacją jednego z następujących elementów członkowskich wyliczenia: Ssl3, TLS, Tls11, Tls12.The value can be a combination of one of more of the following enumeration members: Ssl3, Tls, Tls11, Tls12.

Metody

BuildChannelFactory<TChannel>(BindingContext)

Tworzy fabrykę kanałów określonego typu.Creates a channel factory of a specified type.

BuildChannelListener<TChannel>(BindingContext)

Tworzy odbiornik kanału określonego typu.Creates a channel listener of a specified type.

BuildChannelListener<TChannel>(BindingContext)

Inicjuje odbiornik kanału w celu akceptowania kanałów określonego typu z kontekstu powiązania.Initializes a channel listener to accept channels of a specified type from the binding context.

(Odziedziczone po BindingElement)
BuildClientStreamUpgradeProvider(BindingContext)

Tworzy wystąpienie na kliencie na StreamUpgradeProvider podstawie podanego kontekstu kanału.Creates an instance on the client of the StreamUpgradeProvider based on the channel context provided.

BuildServerStreamUpgradeProvider(BindingContext)

Tworzy wystąpienie na serwerze na StreamUpgradeProvider podstawie podanego kontekstu kanału.Creates an instance on the server of the StreamUpgradeProvider based on the channel context provided.

CanBuildChannelFactory<TChannel>(BindingContext)

Pobiera wartość wskazującą, czy można skompilować fabrykę kanałów określonego typu.Gets a value that indicates whether a channel factory of the specified type can be built.

CanBuildChannelListener<TChannel>(BindingContext)

Pobiera wartość wskazującą, czy można skompilować odbiornik kanału określonego typu.Gets a value that indicates whether a channel listener of the specified type can be built.

CanBuildChannelListener<TChannel>(BindingContext)

Zwraca wartość wskazującą, czy element powiązania może kompilować odbiornik dla określonego typu kanału.Returns a value that indicates whether the binding element can build a listener for a specific type of channel.

(Odziedziczone po BindingElement)
Clone()

Tworzy nowe wystąpienie, które jest kopią bieżącego wystąpienia.Creates a new instance that is a copy of the current instance.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.Determines whether the specified object is equal to the current object.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.Serves as the default hash function.

(Odziedziczone po Object)
GetProperty<T>(BindingContext)

Pobiera określony obiekt z BindingContext .Gets a specified object from the BindingContext.

GetTransportTokenAssertion()

Pobiera wartość XmlElement reprezentującą token transportu używany w powiązaniu zabezpieczeń.Gets the XmlElement that represents the transport token used in the security binding.

GetType()

Pobiera Type bieżące wystąpienie.Gets the Type of the current instance.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy skróconą kopię bieżącego elementu Object .Creates a shallow copy of the current Object.

(Odziedziczone po Object)
ShouldSerializeIdentityVerifier()

Pobiera wartość wskazującą, czy identyfikacja weryfikatora powinna być serializowana.Gets a value that indicates whether the identify verifier should be serialized.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.Returns a string that represents the current object.

(Odziedziczone po Object)

Jawne implementacje interfejsu

IPolicyExportExtension.ExportPolicy(MetadataExporter, PolicyConversionContext)

Eksportuje niestandardowe potwierdzenie zasad dotyczące powiązań.Exports a custom policy assertion about bindings.

Dotyczy