Sdílet prostřednictvím


Zabezpečení přenosu s ověřováním certifikátu

Tento článek popisuje použití certifikátů X.509 pro ověřování serveru a klientů při použití zabezpečení přenosu. Další informace o certifikátech X.509 naleznete v tématu Certifikáty veřejného klíče X.509. Certifikáty musí vydat certifikační autorita, což je často vystavitel certifikátů třetí strany. V doméně Systému Windows Server lze službu Active Directory Certificate Services použít k vydávání certifikátů klientským počítačům v doméně. V tomto scénáři je služba hostovaná ve službě Internetová informační služba (IIS), která je nakonfigurovaná s protokolem SSL (Secure Sockets Layer). Služba je nakonfigurovaná pomocí certifikátu SSL (X.509), který klientům umožňuje ověřit identitu serveru. Klient je také nakonfigurován s certifikátem X.509, který službě umožňuje ověřit identitu klienta. Certifikát serveru musí být důvěryhodný klientem a certifikát klienta musí být serverem důvěryhodný. Skutečná mechanika toho, jak služba a klient ověřuje identitu ostatních, je nad rámec tohoto článku. Další informace naleznete v tématu Digitální podpis na Wikipedii.

Tento scénář implementuje vzor zprávy žádosti a odpovědi, jak je znázorněno v následujícím diagramu.

Secure transfer using certificates

Další informace o použití certifikátu se službou najdete v tématu Práce s certifikáty a postupy: Konfigurace portu s certifikátem SSL. Následující tabulka popisuje různé charakteristiky scénáře.

Charakteristika Popis
Režim zabezpečení Přeprava
Vzájemná funkční spolupráce S existujícími klienty a službami webových služeb.
Ověřování (server)

Ověřování (klient)
Ano (použití certifikátu SSL)

Ano (pomocí certifikátu X.509)
Integrita dat Ano
Důvěrnost dat Ano
Přeprava HTTPS
Vazba WSHttpBinding

Konfigurace služby

Vzhledem k tomu, že služba v tomto scénáři je hostovaná ve službě IIS, je nakonfigurována se souborem web.config. Následující web.config ukazuje, jak nakonfigurovat WSHttpBinding použití přenosového zabezpečení a přihlašovacích údajů klienta X.509.

<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>  

Konfigurace klienta

Klient je možné nakonfigurovat v kódu nebo v souboru app.config. Následující příklad ukazuje, jak nakonfigurovat klienta v kódu.

// 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();  

Případně můžete klienta nakonfigurovat v souboru App.config, jak je znázorněno v následujícím příkladu:

<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>  

Viz také