SslStreamSecurityBindingElement SslStreamSecurityBindingElement SslStreamSecurityBindingElement SslStreamSecurityBindingElement Class

Definition

Stellt ein benutzerdefiniertes Bindungselement dar, das die Kanalsicherheit mit einem SSL-Stream unterstützt.Represents a custom binding element that supports channel security using an SSL stream.

public ref class SslStreamSecurityBindingElement : System::ServiceModel::Channels::BindingElement, 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
    interface ITransportTokenAssertionProvider
    interface IPolicyExportExtension
Public Class SslStreamSecurityBindingElement
Inherits BindingElement
Implements IPolicyExportExtension, ITransportTokenAssertionProvider
Vererbung
SslStreamSecurityBindingElementSslStreamSecurityBindingElementSslStreamSecurityBindingElementSslStreamSecurityBindingElement
Implementiert

Hinweise

Transporte, die ein streamorientiertes Protokoll wie TCP und Named Pipes verwenden, unterstützen streambasierte Transportupgrades.Transports that use a stream-oriented protocol such as TCP and named pipes support stream-based transport upgrades. Windows Communication Foundation (WCF) bietet insbesondere Sicherheitsupgrades.Specifically, Windows Communication Foundation (WCF) provides security upgrades. Die Konfiguration dieser Transportsichersicherheit wird durch diese Klasse sowie durch das SslStreamSecurityBindingElement gekapselt, die konfiguriert und einer benutzerdefinierten Bindung hinzugefügt werden können.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. Außerdem können Drittanbieter ihr eigenes benutzerdefiniertes StreamSecurityBindingElement schreiben.In addition, a third party can write their own custom StreamSecurityBindingElement. Diese Bindungselemente erweitern die StreamUpgradeBindingElement-Klasse, die zum Erstellen der Client- und Server-Streamupgradeanbieter aufgerufen wird.These binding elements extend the StreamUpgradeBindingElement class that is called to build the client and server stream upgrade providers.

Eine benutzerdefinierte Bindung enthält eine Auflistung von Bindungselementen, die in einer bestimmten Reihenfolge angeordnet sind: Das Element, das das erste Element des Bindungsstapels darstellt, wird zuerst hinzugefügt, das darauf folgende Element wird als zweites hinzugefügt usw.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.

So fügen Sie diese Klasse einer Bindung hinzuTo add this class to a binding

  1. Erstellen Sie eine BindingElementCollection.Create a BindingElementCollection.

  2. Erstellen Sie benutzerdefinierte Bindungselemente, die sich im Bindungsstapel über diesem Bindungselement befinden, wie zum Beispiel das optionale TransactionFlowBindingElement und ReliableSessionBindingElement.Create custom binding elements that are above this binding element in the binding stack, such as the optional TransactionFlowBindingElement and ReliableSessionBindingElement.

  3. Fügen Sie die erstellten Elemente in der zuvor beschriebenen Reihenfolge zu BindingElementCollection hinzu, indem Sie die InsertItem-Methode verwenden.Add the created elements in the order described previously to the BindingElementCollection using the InsertItem method.

  4. Erstellen Sie eine Instanz von SslStreamSecurityBindingElement, und fügen Sie sie zur Auflistung hinzu.Create an instance of SslStreamSecurityBindingElement and add it to the collection.

  5. Fügen Sie weitere benutzerdefinierte Bindungselemente zur Auflistung hinzu, wie zum Beispiel TcpTransportBindingElement.Add any additional custom binding elements to the collection, such as TcpTransportBindingElement.

Es gibt drei Szenarien, in dem Sie müssen manuell Geben Sie den richtigen UPN/SPN auf dem Clientendpunkt nach dem Importieren der WSDL oder einen benutzerdefinierten IdentityVerifier des Clients 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. Es wird keine Dienstidentität in WSDL veröffentlicht.No service identity is published in WSDL. SspiNegotiatedOverTransport und HTTPS werden verwendet (z. B. eine WSHttpBinding mit SecurityMode = TransportWithMessageCredential).SspiNegotiatedOverTransport and HTTPS are used (for example, a WSHttpBinding with SecurityMode = TransportWithMessageCredential). Wenn der Dienst nicht mit der Computeridentität ausgeführt wird, müssen Sie den richtigen UPN/SPN auf dem Clientendpunkt manuell angeben, nachdem Sie die WSDL importiert haben.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. DNS-Dienstidentität wird in WSDL veröffentlicht.DNS service identity is published in WSDL. SspiNegotiatedOverTransport und SslStreamSecurityBindingElement werden anstelle eines UPN/SPN verwendet (z. B. NetTcpBinding mit SecurityMode = TransportWithMessageCredential).SspiNegotiatedOverTransport and SslStreamSecurityBindingElement are used (for example, NetTcpBinding with SecurityMode = TransportWithMessageCredential) instead of a UPN/SPN. Wenn der Dienst nicht mit der Computeridentität ausgeführt wird oder die DNS-Identität nicht der Computeridentität entspricht, müssen Sie den richtigen UPN/SPN auf dem Clientendpunkt manuell angeben, nachdem Sie die WSDL importiert haben.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. Die DNS-Identität wird in WSDL veröffentlicht.DNS identity is published in WSDL. Wenn SslStreamSecurityBindingElement auf dem Client überschrieben wird, müssen Sie für das IdentityVerifier des Clients einen benutzerdefinierten SslStreamSecurityBindingElement angeben.If SslStreamSecurityBindingElement is overridden on the client, you must specify a custom IdentityVerifier on the client's SslStreamSecurityBindingElement.

Im folgenden Code wird gezeigt, wie der richtige UPN/SPN manuell auf dem Clientendpunkt angegeben wird und wie ein benutzerdefinierter IdentityVerifier für das SslStreamSecurityBindingElement des Clients angegeben wird.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();  
        }  
    }  

Konstruktoren

SslStreamSecurityBindingElement() SslStreamSecurityBindingElement() SslStreamSecurityBindingElement() SslStreamSecurityBindingElement()

Initialisiert eine neue Instanz der SslStreamSecurityBindingElement-Klasse.Initializes a new instance of the SslStreamSecurityBindingElement class.

SslStreamSecurityBindingElement(SslStreamSecurityBindingElement) SslStreamSecurityBindingElement(SslStreamSecurityBindingElement) SslStreamSecurityBindingElement(SslStreamSecurityBindingElement) SslStreamSecurityBindingElement(SslStreamSecurityBindingElement)

Initialisiert eine neue Instanz der SslStreamSecurityBindingElement-Klasse mithilfe der Werte eines anderen SslStreamSecurityBindingElement.Initializes a new instance of the SslStreamSecurityBindingElement class using the values from another SslStreamSecurityBindingElement.

Eigenschaften

IdentityVerifier IdentityVerifier IdentityVerifier IdentityVerifier

Ruft die Identitätsüberprüfung für diese Bindung ab oder legt sie fest.Gets or sets the identity verifier for this binding.

RequireClientCertificate RequireClientCertificate RequireClientCertificate RequireClientCertificate

Ruft einen Wert ab oder legt einen Wert fest, der angibt, ob für diese Bindung ein Clientzertifikat erforderlich ist.Gets or sets a value that specifies whether a client certificate is required for this binding.

SslProtocols SslProtocols SslProtocols SslProtocols

Gibt die Liste der bei Verwendung des Client-Anmeldeinformationstyps "TcpClientCredentialType.Certificate" auszuhandelnden SSL/TLS-Protokolle an.Specifies the list of SSL/TLS protocols to negotiate when using a client credential type of TcpClientCredentialType.Certificate. Der Wert kann eine Kombination aus einem oder mehreren der folgenden Enumerationsmember sein: Ssl3, Tls, Tls11, Tls12.The value can be a combination of one of more of the following enumeration members: Ssl3, Tls, Tls11, Tls12.

Methoden

BuildChannelFactory<TChannel>(BindingContext) BuildChannelFactory<TChannel>(BindingContext) BuildChannelFactory<TChannel>(BindingContext) BuildChannelFactory<TChannel>(BindingContext)

Erstellt eine Kanalfactory eines angegebenen Typs.Creates a channel factory of a specified type.

BuildChannelListener<TChannel>(BindingContext) BuildChannelListener<TChannel>(BindingContext) BuildChannelListener<TChannel>(BindingContext) BuildChannelListener<TChannel>(BindingContext)

Erstellt einen Kanallistener eines angegebenen Typs.Creates a channel listener of a specified type.

BuildClientStreamUpgradeProvider(BindingContext) BuildClientStreamUpgradeProvider(BindingContext) BuildClientStreamUpgradeProvider(BindingContext) BuildClientStreamUpgradeProvider(BindingContext)

Erstellt basierend auf dem bereitgestellten Kanalkontext eine Instanz auf dem Client des StreamUpgradeProvider.Creates an instance on the client of the StreamUpgradeProvider based on the channel context provided.

BuildServerStreamUpgradeProvider(BindingContext) BuildServerStreamUpgradeProvider(BindingContext) BuildServerStreamUpgradeProvider(BindingContext) BuildServerStreamUpgradeProvider(BindingContext)

Erstellt basierend auf dem bereitgestellten Kanalkontext eine Instanz auf dem Server des StreamUpgradeProvider.Creates an instance on the server of the StreamUpgradeProvider based on the channel context provided.

CanBuildChannelFactory<TChannel>(BindingContext) CanBuildChannelFactory<TChannel>(BindingContext) CanBuildChannelFactory<TChannel>(BindingContext) CanBuildChannelFactory<TChannel>(BindingContext)

Ruft einen Wert ab, der angibt, ob eine Kanalfactory des angegebenen Kanaltyps erstellt werden kann.Gets a value that indicates whether a channel factory of the specified type can be built.

CanBuildChannelListener<TChannel>(BindingContext) CanBuildChannelListener<TChannel>(BindingContext) CanBuildChannelListener<TChannel>(BindingContext) CanBuildChannelListener<TChannel>(BindingContext)

Ruft einen Wert ab, der angibt, ob ein Kanallistener des angegebenen Typs erstellt werden kann.Gets a value that indicates whether a channel listener of the specified type can be built.

Clone() Clone() Clone() Clone()

Erstellt eine neue Instanz, die eine Kopie der aktuellen Instanz darstellt.Creates a new instance that is a copy of the current instance.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Fungiert als Standardhashfunktion.Serves as the default hash function.

(Inherited from Object)
GetProperty<T>(BindingContext) GetProperty<T>(BindingContext) GetProperty<T>(BindingContext) GetProperty<T>(BindingContext)

Ruft ein angegebenes Objekt aus dem BindingContext ab.Gets a specified object from the BindingContext.

GetTransportTokenAssertion() GetTransportTokenAssertion() GetTransportTokenAssertion() GetTransportTokenAssertion()

Ruft das XmlElement ab, das das Transporttoken darstellt, das in der Sicherheitsbindung verwendet wird.Gets the XmlElement that represents the transport token used in the security binding.

GetType() GetType() GetType() GetType()

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

(Inherited from Object)
ShouldSerializeIdentityVerifier() ShouldSerializeIdentityVerifier() ShouldSerializeIdentityVerifier() ShouldSerializeIdentityVerifier()

Ruft einen Wert ab, der angibt, ob die Identitätsüberprüfung serialisiert werden soll.Gets a value that indicates whether the identify verifier should be serialized.

ToString() ToString() ToString() ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

(Inherited from Object)

Explizite Schnittstellenimplementierungen

IPolicyExportExtension.ExportPolicy(MetadataExporter, PolicyConversionContext) IPolicyExportExtension.ExportPolicy(MetadataExporter, PolicyConversionContext) IPolicyExportExtension.ExportPolicy(MetadataExporter, PolicyConversionContext) IPolicyExportExtension.ExportPolicy(MetadataExporter, PolicyConversionContext)

Exportiert eine benutzerdefinierte Richtlinienassertion über Bindungen.Exports a custom policy assertion about bindings.

Gilt für: