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