Postupy: Zabezpečení služby certifikátem X.509
Zabezpečení služby pomocí certifikátu X.509 je základní technika, kterou většina vazeb ve Windows Communication Foundation (WCF) používá. Toto téma vás provede postupem konfigurace služby v místním prostředí s certifikátem X.509.
Předpokladem je platný certifikát, který lze použít k ověření serveru. Certifikát musí být vystaven serveru důvěryhodnou certifikační autoritou. Pokud certifikát není platný, žádný klient, který se pokouší použít službu, nebude službě důvěřovat a následně nebude provedeno žádné připojení. Další informace o používání certifikátů naleznete v tématu Práce s certifikáty.
Konfigurace služby s certifikátem pomocí kódu
Vytvořte kontrakt služby a implementovanou službu. Další informace naleznete v tématu Návrh a implementace služeb.
Vytvořte instanci WSHttpBinding třídy a nastavte její režim zabezpečení na Message, jak je znázorněno v následujícím kódu.
// Create a binding and set the security mode to Message. WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
' Create a binding and set the security mode to Message. Dim b As New WSHttpBinding(SecurityMode.Message)
Vytvořte dvě Type proměnné, jednu pro typ kontraktu a implementovaný kontrakt, jak je znázorněno v následujícím kódu.
Type contractType = typeof(ICalculator); Type implementedContract = typeof(Calculator);
Dim contractType = GetType(ICalculator) Dim implementedContract = GetType(Calculator)
Vytvořte instanci Uri třídy pro základní adresu služby.
WSHttpBinding
Vzhledem k tomu, že se používá přenos HTTP, musí identifikátor URI (Uniform Resource Identifier) začínat tímto schématem nebo windows Communication Foundation (WCF) vyvolá výjimku při otevření služby.Uri baseAddress = new Uri("http://localhost:8044/base");
Dim baseAddress As New Uri("http://localhost:8044/base")
Vytvořte novou instanci ServiceHost třídy s implementovanou proměnnou typu kontraktu a identifikátorem URI.
ServiceHost sh = new ServiceHost(implementedContract, baseAddress);
Dim sh As New ServiceHost(implementedContract, baseAddress)
ServiceEndpoint Přidejte do služby metoduAddServiceEndpoint. Předejte kontrakt, vazbu a adresu koncového bodu konstruktoru, jak je znázorněno v následujícím kódu.
sh.AddServiceEndpoint(contractType, b, "Calculator");
sh.AddServiceEndpoint(contractType, b, "Calculator")
Nepovinné. Chcete-li načíst metadata ze služby, vytvořte nový ServiceMetadataBehavior objekt a nastavte HttpGetEnabled vlastnost na
true
.ServiceMetadataBehavior sm = new ServiceMetadataBehavior(); sm.HttpGetEnabled = true; sh.Description.Behaviors.Add(sm);
Dim sm As New ServiceMetadataBehavior() sm.HttpGetEnabled = True With sh .Description.Behaviors.Add(sm)
SetCertificate Použijte metodu X509CertificateRecipientServiceCredential třídy k přidání platného certifikátu do služby. Metoda může k vyhledání certifikátu použít jednu z několika metod. Tento příklad používá FindBySubjectName výčet. Výčet určuje, že zadaná hodnota je název entity, pro kterou byl certifikát vystaven.
sh.Credentials.ServiceCertificate.SetCertificate( StoreLocation.LocalMachine ,StoreName.My, X509FindType.FindBySubjectName ,"localhost");
.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, _ StoreName.My, _ X509FindType.FindBySubjectName, _ "localhost")
Voláním Open metody spusťte službu naslouchání. Pokud vytváříte konzolovou aplikaci, zavolejte metodu ReadLine , aby byla služba ve stavu naslouchání.
sh.Open(); Console.WriteLine("Listening"); Console.ReadLine();
.Open() Console.WriteLine("Listening") Console.ReadLine()
Příklad
Následující příklad používá metodu SetCertificate ke konfiguraci služby s certifikátem X.509.
// Create a binding and set the security mode to Message.
WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
Type contractType = typeof(ICalculator);
Type implementedContract = typeof(Calculator);
Uri baseAddress = new Uri("http://localhost:8044/base");
ServiceHost sh = new ServiceHost(implementedContract, baseAddress);
sh.AddServiceEndpoint(contractType, b, "Calculator");
ServiceMetadataBehavior sm = new ServiceMetadataBehavior();
sm.HttpGetEnabled = true;
sh.Description.Behaviors.Add(sm);
sh.Credentials.ServiceCertificate.SetCertificate(
StoreLocation.LocalMachine ,StoreName.My,
X509FindType.FindBySubjectName ,"localhost");
sh.Open();
Console.WriteLine("Listening");
Console.ReadLine();
sh.Close();
' Create a binding and set the security mode to Message.
Dim b As New WSHttpBinding(SecurityMode.Message)
Dim contractType = GetType(ICalculator)
Dim implementedContract = GetType(Calculator)
Dim baseAddress As New Uri("http://localhost:8044/base")
Dim sh As New ServiceHost(implementedContract, baseAddress)
sh.AddServiceEndpoint(contractType, b, "Calculator")
Dim sm As New ServiceMetadataBehavior()
sm.HttpGetEnabled = True
With sh
.Description.Behaviors.Add(sm)
.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, _
StoreName.My, _
X509FindType.FindBySubjectName, _
"localhost")
.Open()
Console.WriteLine("Listening")
Console.ReadLine()
.Close()
End With
Probíhá kompilace kódu
Ke kompilaci kódu se vyžadují následující obory názvů: