Dela via


Transportsäkerhet med certifikatautentisering

Den här artikeln beskriver hur du använder X.509-certifikat för server- och klientautentisering när du använder transportsäkerhet. Mer information om X.509-certifikat finns i Certifikat för offentliga X.509-nycklar. Certifikat måste utfärdas av en certifikatutfärdare, som ofta är utfärdare av certifikat från tredje part. På en Windows Server-domän kan Active Directory Certificate Services användas för att utfärda certifikat till klientdatorer på domänen. I det här scenariot finns tjänsten under Internet Information Services (IIS) som konfigureras med Secure Sockets Layer (SSL). Tjänsten har konfigurerats med ett SSL-certifikat (X.509) så att klienter kan verifiera serverns identitet. Klienten är också konfigurerad med ett X.509-certifikat som gör att tjänsten kan verifiera klientens identitet. Serverns certifikat måste vara betrott av klienten och klientens certifikat måste vara betrott av servern. Den faktiska mekaniken för hur tjänsten och klienten verifierar varandras identitet ligger utanför omfånget för den här artikeln. Mer information finns i Digital signatur på Wikipedia.

Det här scenariot implementerar ett mönster för begäran/svarsmeddelande enligt följande diagram.

Secure transfer using certificates

Mer information om hur du använder ett certifikat med en tjänst finns i Arbeta med certifikat och Så här konfigurerar du en port med ett SSL-certifikat. I följande tabell beskrivs de olika egenskaperna för scenariot.

Characteristic beskrivning
Säkerhetsläge Transport
Samverkan Med befintliga webbtjänstklienter och -tjänster.
Autentisering (server)

Autentisering (klient)
Ja (med ett SSL-certifikat)

Ja (med ett X.509-certifikat)
Dataintegritet Ja
Datasekretess Ja
Transport HTTPS
Bindning WSHttpBinding

Konfigurera tjänsten

Eftersom tjänsten i det här scenariot finns under IIS konfigureras den med en web.config-fil. Följande web.config visar hur du konfigurerar WSHttpBinding att använda transportsäkerhet och X.509-klientautentiseringsuppgifter.

<configuration>  
  <system.serviceModel>  
    <protocolMapping>  
      <add scheme="https" binding="wsHttpBinding" />  
    </protocolMapping>  
    <bindings>  
      <wsHttpBinding>  
        <!-- configure wsHttp binding with Transport security mode and clientCredentialType as Certificate -->  
        <binding>  
          <security mode="Transport">  
            <transport clientCredentialType="Certificate"/>
          </security>  
        </binding>  
      </wsHttpBinding>  
    </bindings>  
    <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->  
    <behaviors>  
      <serviceBehaviors>  
        <behavior>
           <serviceDebug includeExceptionDetailInFaults="True" />  
        </behavior>  
      </serviceBehaviors>  
    </behaviors>  
  </system.serviceModel>  
</configuration>  

Konfigurera klienten

Klienten kan konfigureras i kod eller i en app.config-fil. I följande exempel visas hur du konfigurerar klienten i kod.

// Create the binding.  
var myBinding = new WSHttpBinding();  
myBinding.Security.Mode = SecurityMode.Transport;  
myBinding.Security.Transport.ClientCredentialType =  
   HttpClientCredentialType.Certificate;  
  
// Create the endpoint address. Note that the machine name
// must match the subject or DNS field of the X.509 certificate  
// used to authenticate the service.
var ea = new  
   EndpointAddress("https://localhost/CalculatorService/service.svc");  
  
// Create the client. The code for the calculator
// client is not shown here. See the sample applications  
// for examples of the calculator code.  
var cc =  
   new CalculatorClient(myBinding, ea);  
  
// The client must specify a certificate trusted by the server.  
cc.ClientCredentials.ClientCertificate.SetCertificate(  
    StoreLocation.CurrentUser,  
    StoreName.My,  
    X509FindType.FindBySubjectName,  
    "contoso.com");  
  
// Begin using the client.  
Console.WriteLine(cc.Add(100, 1111));  
//...  
cc.Close();  

Du kan också konfigurera klienten i en App.config-fil enligt följande exempel:

<configuration>  
  <system.serviceModel>  
    <client>  
      <!-- this endpoint has an https: address -->  
      <endpoint address=" https://localhost/CalculatorService/service.svc "
                behaviorConfiguration="endpointCredentialBehavior"  
                binding="wsHttpBinding"
                bindingConfiguration="Binding1"
                contract="Microsoft.Samples.TransportSecurity.ICalculator"/>  
    </client>  
    <behaviors>  
      <endpointBehaviors>  
        <behavior name="endpointCredentialBehavior">  
          <clientCredentials>  
            <clientCertificate findValue="contoso.com"  
                               storeLocation="CurrentUser"  
                               storeName="My"  
                               x509FindType="FindBySubjectName" />  
          </clientCredentials>  
        </behavior>  
      </endpointBehaviors>  
    </behaviors>  
    <bindings>  
      <wsHttpBinding>  
        <!-- configure wsHttpbinding with Transport security mode  
                   and clientCredentialType as Certificate -->  
        <binding name="Binding1">  
          <security mode="Transport">  
            <transport clientCredentialType="Certificate"/>  
          </security>  
        </binding>  
      </wsHttpBinding>  
    </bindings>  
  </system.serviceModel>  
  
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>  

Se även