SslStreamSecurityBindingElement Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Représente un élément de liaison personnalisé qui prend en charge la sécurité des canaux à l’aide d’un flux SSL.
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
- Héritage
- Héritage
- Implémente
Remarques
Les transports qui utilisent un protocole orienté flux, tel que TCP et des canaux nommés, prennent en charge les mises à niveau de transport basées sur les flux. Plus précisément, Windows Communication Foundation (WCF) fournit des mises à niveau de sécurité. La configuration de cette sécurité de transport est encapsulée par cette classe, ainsi que par SslStreamSecurityBindingElement, qui peut être configurée et ajoutée à une liaison personnalisée. En outre, un tiers peut écrire son propre code personnalisé StreamSecurityBindingElement. Ces éléments de liaison étendent la StreamUpgradeBindingElement classe appelée pour générer les fournisseurs de mise à niveau de flux de client et de serveur.
Une liaison personnalisée contient une collection d’éléments de liaison organisés dans un ordre spécifique : l’élément qui représente le haut de la pile de liaisons est ajouté en premier, l’élément suivant vers le bas dans la pile de liaisons est ajouté deuxièmement, et ainsi de suite.
Pour ajouter cette classe à une liaison
Créer un BindingElementCollection.
Créez des éléments de liaison personnalisés au-dessus de cet élément de liaison dans la pile de liaisons, comme le facultatif TransactionFlowBindingElement et ReliableSessionBindingElement.
Ajoutez les éléments créés dans l’ordre décrit précédemment à l’aide BindingElementCollection de la InsertItem méthode.
Créez une instance de SslStreamSecurityBindingElement la collection et ajoutez-la à la collection.
Ajoutez tous les éléments de liaison personnalisés supplémentaires à la collection, par TcpTransportBindingElementexemple .
Il existe trois scénarios dans lesquels vous devez spécifier manuellement l’UPN/SPN correct sur le point de terminaison client après l’importation du WSDL, ou spécifier une personnalisée IdentityVerifier sur le client SslStreamSecurityBindingElement.
Aucune identité de service n’est publiée dans WSDL. SspiNegotiatedOverTransport et HTTPS sont utilisés (par exemple, avec WSHttpBinding SecurityMode = TransportWithMessageCredential). Si le service n’est pas en cours d’exécution avec l’identité de l’ordinateur, vous devez spécifier manuellement l’UPN/SPN correct sur le point de terminaison client après l’importation du fichier WSDL.
L’identité du service DNS est publiée dans WSDL. SspiNegotiatedOverTransport et SslStreamSecurityBindingElement sont utilisés (par exemple, NetTcpBinding avec SecurityMode = TransportWithMessageCredential) au lieu d’un UPN/SPN. Si le service n’est pas en cours d’exécution avec l’identité de l’ordinateur ou si l’identité DNS n’est pas l’identité de l’ordinateur, vous devez spécifier manuellement le nom de principal principal d’utilisateur /principal d’upn sur le point de terminaison client après l’importation du fichier WSDL.
L’identité DNS est publiée dans WSDL. Si SslStreamSecurityBindingElement elle est remplacée sur le client, vous devez spécifier une personnalisée IdentityVerifier sur le client SslStreamSecurityBindingElement.
Le code suivant montre comment spécifier manuellement l’UPN/SPN correct sur le point de terminaison client, ainsi que comment spécifier une valeur personnalisée IdentityVerifier sur le client 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
| Nom | Description |
|---|---|
| SslStreamSecurityBindingElement() |
Initialise une nouvelle instance de la classe SslStreamSecurityBindingElement. |
| SslStreamSecurityBindingElement(SslStreamSecurityBindingElement) |
Initialise une nouvelle instance de la SslStreamSecurityBindingElement classe à l’aide des valeurs d’une autre SslStreamSecurityBindingElement. |
Propriétés
| Nom | Description |
|---|---|
| IdentityVerifier |
Obtient ou définit le vérificateur d’identité pour cette liaison. |
| RequireClientCertificate |
Obtient ou définit une valeur qui spécifie si un certificat client est requis pour cette liaison. |
| SslProtocols |
Spécifie la liste des protocoles SSL/TLS à négocier lors de l’utilisation d’un type d’informations d’identification client de TcpClientCredentialType.Certificate. La valeur peut être une combinaison d’un des membres d’énumération suivants : Ssl3, Tls, Tls11, Tls12. |
Méthodes
| Nom | Description |
|---|---|
| BuildChannelFactory<TChannel>(BindingContext) |
Crée une fabrique de canaux d’un type spécifié. |
| BuildChannelListener<TChannel>(BindingContext) |
Crée un écouteur de canal d’un type spécifié. |
| BuildClientStreamUpgradeProvider(BindingContext) |
Crée une instance sur le client du contexte de StreamUpgradeProvider canal fourni. |
| BuildServerStreamUpgradeProvider(BindingContext) |
Crée une instance sur le serveur du contexte de StreamUpgradeProvider canal fourni. |
| CanBuildChannelFactory<TChannel>(BindingContext) |
Obtient une valeur qui indique si une fabrique de canal du type spécifié peut être générée. |
| CanBuildChannelListener<TChannel>(BindingContext) |
Obtient une valeur qui indique si un écouteur de canal du type spécifié peut être généré. |
| Clone() |
Crée une instance qui est une copie de l’instance actuelle. |
| Equals(Object) |
Détermine si l’objet spécifié est égal à l’objet actuel. (Hérité de Object) |
| GetHashCode() |
Sert de fonction de hachage par défaut. (Hérité de Object) |
| GetProperty<T>(BindingContext) |
Obtient un objet spécifié à partir du BindingContext. |
| GetTransportTokenAssertion() |
Obtient le XmlElement jeton de transport utilisé dans la liaison de sécurité. |
| GetType() |
Obtient la Type de l’instance actuelle. (Hérité de Object) |
| MemberwiseClone() |
Crée une copie superficielle du Objectactuel. (Hérité de Object) |
| ShouldSerializeIdentityVerifier() |
Obtient une valeur qui indique si le vérificateur d’identification doit être sérialisé. |
| ToString() |
Retourne une chaîne qui représente l’objet actuel. (Hérité de Object) |
Implémentations d’interfaces explicites
| Nom | Description |
|---|---|
| IPolicyExportExtension.ExportPolicy(MetadataExporter, PolicyConversionContext) |
Exporte une assertion de stratégie personnalisée sur les liaisons. |