Sdílet prostřednictvím


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

  1. Vytvořte kontrakt služby a implementovanou službu. Další informace naleznete v tématu Návrh a implementace služeb.

  2. 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)
    
  3. 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)
    
  4. 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")
    
  5. 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)
    
  6. 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")
    
  7. 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)
    
  8. 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")
    
  9. 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ů:

Viz také