Sertifika Kimlik Doğrulama ile Taşıma Güvenliği

Bu makalede, aktarım güvenliği kullanılırken sunucu ve istemci kimlik doğrulaması için X.509 sertifikalarının kullanılması ele alınmaktadır. X.509 sertifikaları hakkında daha fazla bilgi için bkz . X.509 Ortak Anahtar Sertifikaları. Sertifikaların genellikle üçüncü taraf sertifika veren bir sertifika yetkilisi tarafından verilmesi gerekir. Bir Windows Server etki alanında Active Directory Sertifika Hizmetleri, etki alanındaki istemci bilgisayarlara sertifika vermek için kullanılabilir. Bu senaryoda hizmet, Güvenli Yuva Katmanı (SSL) ile yapılandırılan Internet Information Services (IIS) altında barındırılır. Hizmet, istemcilerin sunucunun kimliğini doğrulamasına izin vermek için bir SSL (X.509) sertifikasıyla yapılandırılır. İstemci ayrıca hizmetin istemci kimliğini doğrulamasını sağlayan bir X.509 sertifikasıyla yapılandırılır. Sunucunun sertifikasına istemci tarafından, istemcinin sertifikasına ise sunucu tarafından güvenilmelidir. Hizmet ve istemcinin birbirlerinin kimliğini nasıl doğruladağıtmalarına ilişkin gerçek mekanikler bu makalenin kapsamı dışındadır. Daha fazla bilgi için bkz . Wikipedia'da Dijital İmza .

Bu senaryo, aşağıdaki diyagramda gösterildiği gibi bir istek/yanıt iletisi deseni uygular.

Secure transfer using certificates

Hizmetle sertifika kullanma hakkında daha fazla bilgi için bkz . Sertifikalarla Çalışma ve Nasıl yapılır: SSL Sertifikası ile Bağlantı Noktası Yapılandırma. Aşağıdaki tabloda senaryonun çeşitli özellikleri açıklanmaktadır.

Characteristic Açıklama
Güvenlik Modu Taşıma
Birlikte çalışabilirlik Mevcut Web hizmeti istemcileri ve hizmetleriyle.
Kimlik Doğrulaması (Sunucu)

Kimlik Doğrulaması (İstemci)
Evet (SSL sertifikası kullanarak)

Evet (X.509 sertifikası kullanarak)
Veri Bütünlüğü Yes
Veri Gizliliği Yes
Taşıma HTTPS
Bağlama WSHttpBinding

Hizmeti Yapılandırma

Bu senaryodaki hizmet IIS altında barındırıldığından, bir web.config dosyasıyla yapılandırılır. Aşağıdaki web.config dosyasında aktarım güvenliğini ve X.509 istemci kimlik bilgilerini kullanacak şekilde yapılandırma WSHttpBinding gösterilmektedir.

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

İstemciyi Yapılandırma

İstemci kodda veya app.config dosyasında yapılandırılabilir. Aşağıdaki örnekte, kodda istemcinin nasıl yapılandırılır gösterilmektedir.

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

Alternatif olarak, istemciyi aşağıdaki örnekte gösterildiği gibi bir App.config dosyasında yapılandırabilirsiniz:

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

Ayrıca bkz.