SslStreamSecurityBindingElement SslStreamSecurityBindingElement SslStreamSecurityBindingElement SslStreamSecurityBindingElement Class

Définition

Représente un élément de liaison personnalisé qui prend en charge la sécurité de canal à l'aide d'un flux SSL.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
Héritage
SslStreamSecurityBindingElementSslStreamSecurityBindingElementSslStreamSecurityBindingElementSslStreamSecurityBindingElement
Implémente

Remarques

Les transports qui utilisent un protocole orienté flux de données, tel que TCP, et des canaux nommés prennent en charge les mises à niveau de transport basées sur le flux de données.Transports that use a stream-oriented protocol such as TCP and named pipes support stream-based transport upgrades. Plus précisément, Windows Communication Foundation (WCF) fournit des mises à niveau de sécurité.Specifically, Windows Communication Foundation (WCF) provides security upgrades. La configuration de cette sécurité des transports est encapsulée par cette classe ainsi que par SslStreamSecurityBindingElement, qui peut être configuré et peut être ajouté à une liaison personnalisée.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. En outre, il est possible d'écrire son propre élément StreamSecurityBindingElement personnalisé.In addition, a third party can write their own custom StreamSecurityBindingElement. Ces éléments de liaison étendent la classe StreamUpgradeBindingElement qui est appelée pour générer les fournisseurs de mise à niveau de flux client et serveur.These binding elements extend the StreamUpgradeBindingElement class that is called to build the client and server stream upgrade providers.

Une liaison personnalisée contient une collection d’éléments de liaison réorganisés dans un ordre spécifique : l’élément qui représente le haut de la pile de liaison est ajouté en premier, l’élément suivant dans la pile de liaison est ajouté en deuxième position, etc.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.

Pour ajouter cette classe à une liaisonTo add this class to a binding

  1. Créer un BindingElementCollection.Create a BindingElementCollection.

  2. Créez des éléments de liaison personnalisés placés au-dessus de cet élément de liaison dans la pile de liaisons, par exemple les objets facultatifs TransactionFlowBindingElement et ReliableSessionBindingElement.Create custom binding elements that are above this binding element in the binding stack, such as the optional TransactionFlowBindingElement and ReliableSessionBindingElement.

  3. Ajoutez à BindingElementCollection les éléments créés dans l'ordre décrit précédemment, à l'aide de la méthode InsertItem.Add the created elements in the order described previously to the BindingElementCollection using the InsertItem method.

  4. Créez une instance de SslStreamSecurityBindingElement et ajoutez-la à la collection.Create an instance of SslStreamSecurityBindingElement and add it to the collection.

  5. Ajoutez tout élément de liaison personnalisé supplémentaire à la collection, tel que TcpTransportBindingElement.Add any additional custom binding elements to the collection, such as TcpTransportBindingElement.

Il existe trois scénarios dans lesquels vous devez manuellement spécifier l’UPN/SPN correct sur le point de terminaison client après avoir importé le WSDL, ou spécifier une personnalisée IdentityVerifier sur le client 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. Aucune identité de service n'est publiée dans WSDL.No service identity is published in WSDL. SspiNegotiatedOverTransport et HTTPS sont utilisés (par exemple, un objet WSHttpBinding avec SecurityMode = TransportWithMessageCredential).SspiNegotiatedOverTransport and HTTPS are used (for example, a WSHttpBinding with SecurityMode = TransportWithMessageCredential). Si le service ne s'exécute pas avec l'identité d'ordinateur, vous devez spécifier manuellement l'UPN/SPN correct sur le point de terminaison client après avoir importé le 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. Identité du service DNS est publiée dans WSDL.DNS service identity is published in WSDL. SspiNegotiatedOverTransport et SslStreamSecurityBindingElement sont utilisés (par exemple, NetTcpBinding avec SecurityMode = TransportWithMessageCredential) au lieu d'un UPN/SPN.SspiNegotiatedOverTransport and SslStreamSecurityBindingElement are used (for example, NetTcpBinding with SecurityMode = TransportWithMessageCredential) instead of a UPN/SPN. Si le service ne s'exécute pas avec l'identité d'ordinateur ou si l'identité DNS ne correspond pas à l'identité d'ordinateur, vous devez spécifier manuellement l'UPN/SPN correct sur le point de terminaison client après avoir importé le 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. L'identité DNS est publiée dans WSDL.DNS identity is published in WSDL. Si l'objet SslStreamSecurityBindingElement est remplacé sur le client, vous devez spécifier un objet IdentityVerifier personnalisé sur l'objet SslStreamSecurityBindingElementdu client.If SslStreamSecurityBindingElement is overridden on the client, you must specify a custom IdentityVerifier on the client's SslStreamSecurityBindingElement.

Le code suivant indique comment spécifier manuellement l'UPN/SPN correct sur le point de terminaison client, ainsi que comment spécifier un objet IdentityVerifier personnalisé sur l'objet SslStreamSecurityBindingElementdu client.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();  
        }  
    }  

Constructeurs

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

Initialise une nouvelle instance de la classe SslStreamSecurityBindingElement.Initializes a new instance of the SslStreamSecurityBindingElement class.

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

Initialise une nouvelle instance de la classe SslStreamSecurityBindingElement à l'aide des valeurs d'un autre SslStreamSecurityBindingElement.Initializes a new instance of the SslStreamSecurityBindingElement class using the values from another SslStreamSecurityBindingElement.

Propriétés

IdentityVerifier IdentityVerifier IdentityVerifier IdentityVerifier

Obtient ou définit le vérificateur d'identité pour cette liaison.Gets or sets the identity verifier for this binding.

RequireClientCertificate RequireClientCertificate RequireClientCertificate RequireClientCertificate

Obtient ou définit une valeur qui spécifie si un certificat client est requis pour la liaison.Gets or sets a value that specifies whether a client certificate is required for this binding.

SslProtocols SslProtocols SslProtocols SslProtocols

Spécifie la liste des protocoles SSL/TLS pour négocier lors de l’utilisation du type d’informations d’identification du client TcpClientCredentialType.Certificate.Specifies the list of SSL/TLS protocols to negotiate when using a client credential type of TcpClientCredentialType.Certificate. La valeur peut être une combinaison d’un ou plusieurs des membres de l’énumération suivante : Ssl3, Tls, Tls11, Tls12.The value can be a combination of one of more of the following enumeration members: Ssl3, Tls, Tls11, Tls12.

Méthodes

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

Crée une fabrique de canaux d'un type spécifié.Creates a channel factory of a specified type.

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

Crée un écouteur de canal d'un type spécifié.Creates a channel listener of a specified type.

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

Crée une instance sur le client du StreamUpgradeProvider basé sur le contexte de canal fourni.Creates an instance on the client of the StreamUpgradeProvider based on the channel context provided.

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

Crée une instance sur le serveur du StreamUpgradeProvider basé sur le contexte de canal fourni.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)

Obtient une valeur qui indique si une fabrication de canal du type spécifié peut être créée.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)

Obtient une valeur qui indique si un écouteur de canal du type spécifié peut être créé.Gets a value that indicates whether a channel listener of the specified type can be built.

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

Crée une instance qui est une copie de l’instance actuelle.Creates a new instance that is a copy of the current instance.

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

Détermine si l'objet spécifié est identique à l'objet actuel.Determines whether the specified object is equal to the current object.

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

Fait office de fonction de hachage par défaut.Serves as the default hash function.

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

Obtient un objet spécifié à partir de l'objet BindingContext.Gets a specified object from the BindingContext.

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

Obtient la XmlElement qui représente le jeton de transport utilisé dans la liaison de sécurité.Gets the XmlElement that represents the transport token used in the security binding.

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

Obtient le Type de l'instance actuelle.Gets the Type of the current instance.

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

Crée une copie superficielle de l'objet Object actuel.Creates a shallow copy of the current Object.

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

Obtient une valeur indiquant si le vérificateur d'identité doit être sérialisé.Gets a value that indicates whether the identify verifier should be serialized.

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

Retourne une chaîne qui représente l'objet actuel.Returns a string that represents the current object.

(Inherited from Object)

Implémentations d’interfaces explicites

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

Exporte une assertion de stratégie personnalisée concernant les liaisons.Exports a custom policy assertion about bindings.

S’applique à