SslStreamSecurityBindingElement Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt ein benutzerdefiniertes Bindungselement dar, das die Kanalsicherheit mithilfe eines SSL-Datenstroms unterstützt.
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
- Vererbung
- Vererbung
- Implementiert
Hinweise
Transporte, die ein streamorientiertes Protokoll wie TCP und named pipes verwenden, unterstützen streambasierte Transportupgrades. Insbesondere stellt Windows Communication Foundation (WCF) Sicherheitsupgrades bereit. Die Konfiguration dieser Transportsicherheit wird von dieser Klasse sowie von SslStreamSecurityBindingElementdieser Klasse gekapselt, die konfiguriert und einer benutzerdefinierten Bindung hinzugefügt werden kann. Darüber hinaus kann ein Drittanbieter eigene benutzerdefinierte StreamSecurityBindingElementSchreiben. Diese Bindungselemente erweitern die Klasse, die StreamUpgradeBindingElement aufgerufen wird, um die Client- und Serverstreamupgradeanbieter zu erstellen.
Eine benutzerdefinierte Bindung enthält eine Auflistung von Bindungselementen, die in einer bestimmten Reihenfolge angeordnet sind: Das Element, das den Anfang des Bindungsstapels darstellt, wird zuerst hinzugefügt, das nächste Element unten im Bindungsstapel wird zweiten hinzugefügt usw.
So fügen Sie diese Klasse einer Bindung hinzu
Erstellen Sie eine BindingElementCollection.
Erstellen Sie benutzerdefinierte Bindungselemente, die über diesem Bindungselement im Bindungsstapel liegen, z. B. optional TransactionFlowBindingElement und ReliableSessionBindingElement.
Fügen Sie die erstellten Elemente in der zuvor beschriebenen Reihenfolge zur BindingElementCollection Verwendung der InsertItem Methode hinzu.
Erstellen Sie eine Instanz der SslStreamSecurityBindingElement Auflistung, und fügen Sie sie der Auflistung hinzu.
Fügen Sie der Auflistung zusätzliche benutzerdefinierte Bindungselemente hinzu, z TcpTransportBindingElement. B. .
Es gibt drei Szenarien, in denen Sie den richtigen UPN/SPN entweder manuell auf dem Clientendpunkt angeben müssen, nachdem Sie die WSDL importiert haben, oder einen Benutzerdefinierten IdentityVerifier für den Client SslStreamSecurityBindingElementangeben müssen.
In WSDL wird keine Dienstidentität veröffentlicht. SspiNegotiatedOverTransport und HTTPS werden verwendet (z. B. ein WSHttpBinding mit SecurityMode = TransportWithMessageCredential). Wenn der Dienst nicht mit der Computeridentität ausgeführt wird, müssen Sie den richtigen UPN/SPN auf dem Clientendpunkt nach dem Importieren der WSDL manuell angeben.
Die DNS-Dienstidentität wird in WSDL veröffentlicht. SspiNegotiatedOverTransport und SslStreamSecurityBindingElement werden verwendet (z. B NetTcpBinding . mit SecurityMode = TransportWithMessageCredential) anstelle eines UPN/SPN. Wenn der Dienst nicht mit der Computeridentität ausgeführt wird oder die DNS-Identität nicht die Identität des Computers ist, müssen Sie nach dem Importieren der WSDL manuell den richtigen UPN/SPN auf dem Clientendpunkt angeben.
Die DNS-Identität wird in WSDL veröffentlicht. Wenn SslStreamSecurityBindingElement auf dem Client außer Kraft gesetzt wird, müssen Sie einen benutzerdefinierten Wert IdentityVerifier für den Client SslStreamSecurityBindingElementangeben.
Der folgende Code zeigt, wie Sie den richtigen UPN/SPN auf dem Clientendpunkt manuell angeben und wie Sie einen benutzerdefinierten Benutzer IdentityVerifier auf dem Client SslStreamSecurityBindingElementangeben.
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
| Name | Beschreibung |
|---|---|
| SslStreamSecurityBindingElement() |
Initialisiert eine neue Instanz der SslStreamSecurityBindingElement-Klasse. |
| SslStreamSecurityBindingElement(SslStreamSecurityBindingElement) |
Initialisiert eine neue Instanz der SslStreamSecurityBindingElement Klasse mithilfe der Werte aus einem anderen SslStreamSecurityBindingElement. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| IdentityVerifier |
Dient zum Abrufen oder Festlegen der Identitätsprüfung für diese Bindung. |
| RequireClientCertificate |
Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob ein Clientzertifikat für diese Bindung erforderlich ist. |
| SslProtocols |
Gibt die Liste der SSL/TLS-Protokolle an, die bei Verwendung eines Clientanmeldeinformationstyps von TcpClientCredentialType.Certificate ausgehandelt werden sollen. Der Wert kann eine Kombination aus einem der folgenden Enumerationsmember sein: Ssl3, Tls, Tls11, Tls12. |
Methoden
| Name | Beschreibung |
|---|---|
| BuildChannelFactory<TChannel>(BindingContext) |
Erstellt eine Kanalfactory eines angegebenen Typs. |
| BuildChannelListener<TChannel>(BindingContext) |
Erstellt einen Kanallistener eines angegebenen Typs. |
| BuildClientStreamUpgradeProvider(BindingContext) |
Erstellt eine Instanz auf dem Client des StreamUpgradeProvider basierenden Kanalkontexts. |
| BuildServerStreamUpgradeProvider(BindingContext) |
Erstellt eine Instanz auf dem Server des StreamUpgradeProvider bereitgestellten Kanalkontexts. |
| CanBuildChannelFactory<TChannel>(BindingContext) |
Ruft einen Wert ab, der angibt, ob eine Kanalfactory des angegebenen Typs erstellt werden kann. |
| CanBuildChannelListener<TChannel>(BindingContext) |
Ruft einen Wert ab, der angibt, ob ein Kanallistener des angegebenen Typs erstellt werden kann. |
| Clone() |
Erstellt eine neue Instanz, die eine Kopie der aktuellen Instanz ist. |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetProperty<T>(BindingContext) |
Ruft ein angegebenes Objekt aus der BindingContext. |
| GetTransportTokenAssertion() |
Ruft ab, das XmlElement das transporttoken darstellt, das in der Sicherheitsbindung verwendet wird. |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| ShouldSerializeIdentityVerifier() |
Ruft einen Wert ab, der angibt, ob der Identifizierungsprüfer serialisiert werden soll. |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
Explizite Schnittstellenimplementierungen
| Name | Beschreibung |
|---|---|
| IPolicyExportExtension.ExportPolicy(MetadataExporter, PolicyConversionContext) |
Exportiert eine benutzerdefinierte Richtlinien assertion zu Bindungen. |