SslStreamSecurityBindingElement Klas

Definitie

Vertegenwoordigt een aangepast bindingselement dat ondersteuning biedt voor kanaalbeveiliging met behulp van een 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 class SslStreamSecurityBindingElement : System.ServiceModel.Channels.BindingElement
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
    interface ITransportTokenAssertionProvider
    interface IPolicyExportExtension
Public Class SslStreamSecurityBindingElement
Inherits BindingElement
Public Class SslStreamSecurityBindingElement
Inherits StreamUpgradeBindingElement
Implements IPolicyExportExtension, ITransportTokenAssertionProvider
Overname
SslStreamSecurityBindingElement
Overname
SslStreamSecurityBindingElement
Implementeringen

Opmerkingen

Transporten die gebruikmaken van een streamgeoriënteerd protocol, zoals TCP en named pipes, ondersteunen stroomgebaseerde transportupgrades. Met name Windows Communication Foundation (WCF) biedt beveiligingsupgrades. De configuratie van deze transportbeveiliging wordt ingekapseld door deze klasse en SslStreamSecurityBindingElementdoor , die kan worden geconfigureerd en toegevoegd aan een aangepaste binding. Bovendien kan een derde partij hun eigen aangepaste StreamSecurityBindingElementschrijven. Deze bindingselementen breiden de StreamUpgradeBindingElement klasse uit die wordt aangeroepen om de client- en serverstreamupgradeproviders te bouwen.

Een aangepaste binding bevat een verzameling bindingselementen die in een specifieke volgorde zijn gerangschikt: het element dat de bovenkant van de bindingsstack vertegenwoordigt, wordt eerst het volgende element in de bindingsstack toegevoegd, enzovoort.

Deze klasse toevoegen aan een binding

  1. Maak een BindingElementCollection.

  2. Maak aangepaste bindingselementen boven dit bindingselement in de bindingsstack, zoals de optionele TransactionFlowBindingElement en ReliableSessionBindingElement.

  3. Voeg de gemaakte elementen toe in de volgorde die eerder aan de BindingElementCollection methode InsertItem is beschreven.

  4. Maak een exemplaar van SslStreamSecurityBindingElement en voeg deze toe aan de verzameling.

  5. Voeg aanvullende aangepaste bindingselementen toe aan de verzameling, zoals TcpTransportBindingElement.

Er zijn drie scenario's waarin u handmatig de juiste UPN/SPN op het clienteindpunt moet opgeven nadat u de WSDL hebt geïmporteerd of een aangepaste IdentityVerifier waarde opgeeft op de client SslStreamSecurityBindingElement.

  1. Er wordt geen service-identiteit gepubliceerd in WSDL. SspiNegotiatedOverTransport en HTTPS worden gebruikt (bijvoorbeeld een WSHttpBinding met SecurityMode = TransportWithMessageCredential). Als de service niet wordt uitgevoerd met de machine-id, moet u handmatig de juiste UPN/SPN opgeven op het clienteindpunt nadat de WSDL is geïmporteerd.

  2. DE DNS-service-identiteit wordt gepubliceerd in WSDL. SspiNegotiatedOverTransport en SslStreamSecurityBindingElement worden gebruikt (bijvoorbeeld NetTcpBinding met SecurityMode = TransportWithMessageCredential) in plaats van een UPN/SPN. Als de service niet wordt uitgevoerd met de computeridentiteit of als de DNS-identiteit niet de identiteit van de computer is, moet u handmatig de juiste UPN/SPN opgeven op het clienteindpunt nadat de WSDL is geïmporteerd.

  3. DNS-identiteit wordt gepubliceerd in WSDL. Als SslStreamSecurityBindingElement deze wordt overschreven op de client, moet u een aangepaste IdentityVerifier waarde opgeven voor de client SslStreamSecurityBindingElement.

De volgende code laat zien hoe u handmatig de juiste UPN/SPN opgeeft op het clienteindpunt en hoe u een aangepaste IdentityVerifier waarde opgeeft op de 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();
        }
    }

Constructors

Name Description
SslStreamSecurityBindingElement()

Initialiseert een nieuw exemplaar van de SslStreamSecurityBindingElement klasse.

SslStreamSecurityBindingElement(SslStreamSecurityBindingElement)

Initialiseert een nieuw exemplaar van de SslStreamSecurityBindingElement klasse met behulp van de waarden van een andere SslStreamSecurityBindingElement.

Eigenschappen

Name Description
IdentityVerifier

Hiermee haalt u de identiteitsverificator voor deze binding op of stelt u deze in.

RequireClientCertificate

Hiermee wordt een waarde opgehaald of ingesteld die aangeeft of een clientcertificaat vereist is voor deze binding.

SslProtocols

Hiermee geeft u de lijst met SSL/TLS-protocollen die moeten worden onderhandeld bij het gebruik van een clientreferentietype van TcpClientCredentialType.Certificate. De waarde kan een combinatie zijn van een van de volgende opsommingsleden: Ssl3, Tls, Tls11, Tls12.

Methoden

Name Description
BuildChannelFactory<TChannel>(BindingContext)

Hiermee maakt u een kanaalfactory van een opgegeven type.

BuildChannelListener<TChannel>(BindingContext)

Hiermee maakt u een kanaallistener van een opgegeven type.

BuildClientStreamUpgradeProvider(BindingContext)

Hiermee maakt u een exemplaar op de client van de StreamUpgradeProvider client op basis van de opgegeven kanaalcontext.

BuildServerStreamUpgradeProvider(BindingContext)

Hiermee maakt u een exemplaar op de server van de StreamUpgradeProvider server op basis van de opgegeven kanaalcontext.

CanBuildChannelFactory<TChannel>(BindingContext)

Hiermee wordt een waarde opgehaald die aangeeft of een kanaalfactory van het opgegeven type kan worden gebouwd.

CanBuildChannelListener<TChannel>(BindingContext)

Hiermee wordt een waarde opgehaald die aangeeft of een kanaallistener van het opgegeven type kan worden gebouwd.

Clone()

Hiermee maakt u een nieuw exemplaar dat een kopie is van het huidige exemplaar.

Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetProperty<T>(BindingContext)

Hiermee haalt u een opgegeven object op uit de BindingContext.

GetTransportTokenAssertion()

Hiermee wordt het XmlElement transporttoken opgehaald dat wordt gebruikt in de beveiligingsbinding.

GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
ShouldSerializeIdentityVerifier()

Hiermee wordt een waarde opgehaald die aangeeft of de identificatieverificator moet worden geserialiseerd.

ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)

Expliciete interface-implementaties

Name Description
IPolicyExportExtension.ExportPolicy(MetadataExporter, PolicyConversionContext)

Hiermee exporteert u een aangepaste beleidsverklaring over bindingen.

Van toepassing op