Delen via


Procedure: Transportbeveiliging en berichtreferenties gebruiken

Het beveiligen van een service met zowel transport- als berichtreferenties maakt gebruik van zowel transport- als berichtbeveiligingsmodi in WcF (Windows Communication Foundation). Kortom, transportlaagbeveiliging biedt integriteit en vertrouwelijkheid, terwijl beveiliging op berichtenlaag verschillende referenties biedt die niet mogelijk zijn met strikte transportbeveiligingsmechanismen. Dit onderwerp bevat de basisstappen voor het implementeren van transport met berichtreferenties met behulp van de WSHttpBinding en NetTcpBinding bindingen. Zie Instructies voor het instellen van de beveiligingsmodus voor meer informatie over het instellen van de beveiligingsmodus : De beveiligingsmodus instellen.

Bij het instellen van de beveiligingsmodus TransportWithMessageCredentialbepaalt het transport het daadwerkelijke mechanisme dat de beveiliging op transportniveau biedt. Voor HTTP is het mechanisme Secure Sockets Layer (SSL) via HTTP (HTTPS); voor TCP is het SSL via TCP of Windows.

Als het transport HTTP is (met behulp van de WSHttpBinding), biedt SSL via HTTP de beveiliging op transportniveau. In dat geval moet u de computer die als host fungeert voor de service configureren met een SSL-certificaat dat is gebonden aan een poort, zoals verderop in dit onderwerp wordt weergegeven.

Als het transport TCP is (met behulp van de NetTcpBinding), is standaard de opgegeven beveiliging op transportniveau Windows-beveiliging of SSL via TCP. Wanneer u SSL via TCP gebruikt, moet u het certificaat opgeven met behulp van de SetCertificate methode, zoals verderop in dit onderwerp wordt weergegeven.

De WSHttpBinding gebruiken met een certificaat voor transportbeveiliging (in code)

  1. Gebruik het hulpprogramma HttpCfg.exe om een SSL-certificaat te binden aan een poort op de computer. Zie Procedure: Een poort configureren met een SSL-certificaat voor meer informatie.

  2. Maak een exemplaar van de WSHttpBinding klasse en stel de Mode eigenschap in op TransportWithMessageCredential.

  3. Stel de ClientCredentialType eigenschap in op een geschikte waarde. (Zie voor meer informatie Een referentietype selecteren.) In de volgende code wordt de Certificate waarde gebruikt.

  4. Maak een exemplaar van de Uri klasse met een geschikt basisadres. Houd er rekening mee dat het adres het https-schema moet gebruiken en de werkelijke naam van de computer moet bevatten en het poortnummer waaraan het SSL-certificaat is gebonden. (U kunt ook het basisadres instellen in de configuratie.)

  5. Voeg een service-eindpunt toe met behulp van de AddServiceEndpoint methode.

  6. Maak het exemplaar van de ServiceHost methode en roep de Open methode aan, zoals wordt weergegeven in de volgende code.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.TransportWithMessageCredential;
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
    
    // The SSL certificate is bound to port 8006 using the HttpCfg.exe tool.
    Uri httpsAddress = new Uri("https://localMachineName:8006/base");
    ServiceHost sh = new ServiceHost(typeof(Calculator), httpsAddress);
    sh.AddServiceEndpoint(typeof(ICalculator), b, "HttpsCalculator");
    sh.Open();
    Console.WriteLine("Listening");
    Console.ReadLine();
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.TransportWithMessageCredential
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
    
    ' The SSL certificate is bound to port 8006 using the HttpCfg.exe tool.
    Dim httpsAddress As New Uri("https://localMachineName:8006/base")
    Dim sh As New ServiceHost(GetType(Calculator), httpsAddress)
    sh.AddServiceEndpoint(GetType(ICalculator), b, "HttpsCalculator")
    sh.Open()
    Console.WriteLine("Listening")
    Console.ReadLine()
    

NetTcpBinding gebruiken met een certificaat voor transportbeveiliging (in code)

  1. Maak een exemplaar van de NetTcpBinding klasse en stel de Mode eigenschap in op TransportWithMessageCredential.

  2. Stel de ClientCredentialType waarde in op een geschikte waarde. In de volgende code wordt de Certificate waarde gebruikt.

  3. Maak een exemplaar van de Uri klasse met een geschikt basisadres. Houd er rekening mee dat het adres het schema net.tcp moet gebruiken. (U kunt ook het basisadres instellen in de configuratie.)

  4. Maak het exemplaar van de ServiceHost klasse.

  5. Gebruik de SetCertificate methode van de X509CertificateRecipientServiceCredential klasse om expliciet het X.509-certificaat voor de service in te stellen.

  6. Voeg een service-eindpunt toe met behulp van de AddServiceEndpoint methode.

  7. Roep de Open methode aan, zoals wordt weergegeven in de volgende code.

    NetTcpBinding b = new NetTcpBinding(SecurityMode.TransportWithMessageCredential);
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
    Uri netTcpAddress = new Uri("net.tcp://baseAddress");
    ServiceHost sh = new ServiceHost(typeof(Calculator), netTcpAddress);
    sh.Credentials.ServiceCertificate.SetCertificate(
        StoreLocation.LocalMachine, StoreName.My,
        X509FindType.FindByIssuerName, "Contoso.com");
    sh.AddServiceEndpoint(typeof(ICalculator), b, "TcpCalculator");
    sh.Open();
    Console.WriteLine("Listening");
    Console.ReadLine();
    
    Dim b As New NetTcpBinding(SecurityMode.TransportWithMessageCredential)
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
    Dim netTcpAddress As New Uri("net.tcp://baseAddress")
    Dim sh As New ServiceHost(GetType(Calculator), netTcpAddress)
    sh.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByIssuerName, "Contoso.com")
    sh.AddServiceEndpoint(GetType(ICalculator), b, "TcpCalculator")
    sh.Open()
    Console.WriteLine("Listening")
    Console.ReadLine()
    

NetTcpBinding gebruiken met Windows voor transportbeveiliging (in code)

  1. Maak een exemplaar van de NetTcpBinding klasse en stel de Mode eigenschap in op TransportWithMessageCredential.

  2. Stel de transportbeveiliging in om Windows te gebruiken door het ClientCredentialType in te stellen op Windows. (Houd er rekening mee dat dit de standaardwaarde is.)

  3. Stel de ClientCredentialType waarde in op een geschikte waarde. In de volgende code wordt de Certificate waarde gebruikt.

  4. Maak een exemplaar van de Uri klasse met een geschikt basisadres. Houd er rekening mee dat het adres het schema net.tcp moet gebruiken. (U kunt ook het basisadres instellen in de configuratie.)

  5. Maak het exemplaar van de ServiceHost klasse.

  6. Gebruik de SetCertificate methode van de X509CertificateRecipientServiceCredential klasse om expliciet het X.509-certificaat voor de service in te stellen.

  7. Voeg een service-eindpunt toe met behulp van de AddServiceEndpoint methode.

  8. Roep de Open methode aan, zoals wordt weergegeven in de volgende code.

    NetTcpBinding b = new NetTcpBinding(SecurityMode.TransportWithMessageCredential);
    b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
    Uri netTcpAddress = new Uri("net.tcp://Tcp");
    ServiceHost sh = new ServiceHost(typeof(Calculator), netTcpAddress);
    sh.Credentials.ServiceCertificate.SetCertificate(
        StoreLocation.LocalMachine, StoreName.My,
        X509FindType.FindByIssuerName, "Contoso.com");
    sh.AddServiceEndpoint(typeof(ICalculator), b, "TcpCalculator");
    sh.Open();
    Console.WriteLine("Listening");
    Console.ReadLine();
    
    Dim b As New NetTcpBinding(SecurityMode.TransportWithMessageCredential)
    b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
    Dim netTcpAddress As New Uri("net.tcp://Tcp")
    Dim sh As New ServiceHost(GetType(Calculator), netTcpAddress)
    sh.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByIssuerName, "Contoso.com")
    sh.AddServiceEndpoint(GetType(ICalculator), b, "TcpCalculator")
    sh.Open()
    Console.WriteLine("Listening")
    Console.ReadLine()
    

Configuratie gebruiken

De WSHttpBinding gebruiken

  1. Configureer de computer met een SSL-certificaat dat is gebonden aan een poort. (Zie voor meer informatie Procedure: Een poort configureren met een SSL-certificaat). U hoeft geen elementwaarde in te stellen <transport> met deze configuratie.

  2. Geef het clientreferentietype op voor de beveiliging op berichtniveau. In het volgende voorbeeld wordt het clientCredentialType kenmerk van het <message> element ingesteld op UserName.

    <wsHttpBinding>
    <binding name="WsHttpBinding_ICalculator">
            <security mode="TransportWithMessageCredential" >
               <message clientCredentialType="UserName" />
            </security>
    </binding>
    </wsHttpBinding>
    

NetTcpBinding gebruiken met een certificaat voor transportbeveiliging

  1. Voor SSL via TCP moet u expliciet het certificaat in het <behaviors> element opgeven. In het volgende voorbeeld wordt een certificaat opgegeven door de verlener ervan in de standaardopslaglocatie (lokale computer en persoonlijke archieven).

    <behaviors>
     <serviceBehaviors>
       <behavior name="mySvcBehavior">
           <serviceCredentials>
             <serviceCertificate findValue="contoso.com"
                                 x509FindType="FindByIssuerName" />
           </serviceCredentials>
       </behavior>
     </serviceBehaviors>
    </behaviors>
    
  2. <Een netTcpBinding> toevoegen aan de sectie Bindingen

  3. Voeg een bindingselement toe en stel het name kenmerk in op een geschikte waarde.

  4. Voeg een <security> element toe en stel het mode kenmerk in op TransportWithMessageCredential.

  5. Voeg een <message> element toe en stel het clientCredentialType kenmerk in op een juiste waarde.

    <bindings>
    <netTcpBinding>
      <binding name="myTcpBinding">
        <security mode="TransportWithMessageCredential" >
           <message clientCredentialType="Windows" />
        </security>
      </binding>
    </netTcpBinding>
    </bindings>
    

NetTcpBinding gebruiken met Windows voor transportbeveiliging

  1. <Een netTcpBinding> toevoegen aan de sectie Bindingen,

  2. Voeg een <binding> element toe en stel het name kenmerk in op een juiste waarde.

  3. Voeg een <security> element toe en stel het mode kenmerk in op TransportWithMessageCredential.

  4. Voeg een <transport> element toe en stel het clientCredentialType kenmerk in op Windows.

  5. Voeg een <message> element toe en stel het clientCredentialType kenmerk in op een juiste waarde. Met de volgende code wordt de waarde ingesteld op een certificaat.

    <bindings>
    <netTcpBinding>
      <binding name="myTcpBinding">
        <security mode="TransportWithMessageCredential" >
           <transport clientCredentialType="Windows" />
           <message clientCredentialType="Certificate" />
        </security>
      </binding>
    </netTcpBinding>
    </bindings>
    

Zie ook