Aracılığıyla paylaş


Nasıl yapılır: Taşıma Güveniği ve İleti Kimlik Bilgilerini Kullanma

Bir hizmetin hem aktarım hem de ileti kimlik bilgileriyle güvenliğini sağlamak, Windows Communication Foundation'da (WCF) hem Aktarım hem de İleti güvenlik modlarının en iyilerini kullanır. Özetle, aktarım katmanı güvenliği bütünlük ve gizlilik sağlarken, ileti katmanı güvenliği katı aktarım güvenliği mekanizmalarıyla mümkün olmayan çeşitli kimlik bilgileri sağlar. Bu konu başlığında, ve NetTcpBinding bağlamalarını kullanarak ileti kimlik bilgileriyle aktarım gerçekleştirmeye WSHttpBinding yönelik temel adımlar gösterilmektedir. Güvenlik modunu ayarlama hakkında daha fazla bilgi için bkz . Nasıl yapılır: Güvenlik Modunu Ayarlama.

Güvenlik modunu olarak TransportWithMessageCredentialayarlarken aktarım, aktarım düzeyi güvenliği sağlayan gerçek mekanizmayı belirler. HTTP için mekanizma, HTTP (HTTPS) üzerinden Güvenli Yuva Katmanı (SSL) şeklindedir; TCP için, TCP veya Windows üzerinden SSL'dir.

Aktarım HTTP ise ( WSHttpBindingkullanarak), HTTP üzerinden SSL aktarım düzeyi güvenliği sağlar. Bu durumda, bu konunun ilerleyen bölümlerinde gösterildiği gibi, hizmeti barındıran bilgisayarı bağlantı noktasına bağlı bir SSL sertifikasıyla yapılandırmanız gerekir.

Aktarım TCP ise (kullanarak NetTcpBinding), varsayılan olarak sağlanan aktarım düzeyi güvenliği Windows güvenliği veya TCP üzerinden SSL'dir. TCP üzerinden SSL kullanırken, bu konunun ilerleyen bölümlerinde gösterildiği gibi yöntemini kullanarak sertifikayı SetCertificate belirtmeniz gerekir.

WSHttpBinding'i aktarım güvenliği sertifikasıyla kullanmak için (kodda)

  1. Ssl sertifikasını makinedeki bir bağlantı noktasına bağlamak için HttpCfg.exe aracını kullanın. Daha fazla bilgi için bkz . Nasıl yapılır: SSL Sertifikası ile Bağlantı Noktası Yapılandırma.

  2. sınıfının bir örneğini WSHttpBinding oluşturun ve özelliğini olarak TransportWithMessageCredentialayarlayınMode.

  3. ClientCredentialType özelliğini uygun bir değere ayarlayın. (Daha fazla bilgi için bkz. Kimlik Bilgisi Türü Seçme.) Aşağıdaki kod değerini Certificate kullanır.

  4. Uygun bir temel adresle sınıfının bir örneğini Uri oluşturun. Adresin "HTTPS" düzenini kullanması ve makinenin gerçek adını ve SSL sertifikasının bağlı olduğu bağlantı noktası numarasını içermesi gerektiğini unutmayın. (Alternatif olarak, temel adresi yapılandırmada ayarlayabilirsiniz.)

  5. yöntemini kullanarak AddServiceEndpoint bir hizmet uç noktası ekleyin.

  6. aşağıdaki kodda gösterildiği gibi öğesinin ServiceHost örneğini oluşturun ve yöntemini çağırın Open .

    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'i aktarım güvenliği sertifikasıyla kullanmak için (kodda)

  1. sınıfının bir örneğini NetTcpBinding oluşturun ve özelliğini olarak TransportWithMessageCredentialayarlayınMode.

  2. değerini ClientCredentialType uygun bir değere ayarlayın. Aşağıdaki kod değerini Certificate kullanır.

  3. Uygun bir temel adresle sınıfının bir örneğini Uri oluşturun. Adresin "net.tcp" düzenini kullanması gerektiğini unutmayın. (Alternatif olarak, temel adresi yapılandırmada ayarlayabilirsiniz.)

  4. sınıfının örneğini ServiceHost oluşturun.

  5. SetCertificate Hizmet için X.509 sertifikasını açıkça ayarlamak için sınıfının yöntemini X509CertificateRecipientServiceCredential kullanın.

  6. yöntemini kullanarak AddServiceEndpoint bir hizmet uç noktası ekleyin.

  7. Aşağıdaki kodda Open gösterildiği gibi yöntemini çağırın.

    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'i aktarım güvenliği için Windows ile kullanmak için (kodda)

  1. sınıfının bir örneğini NetTcpBinding oluşturun ve özelliğini olarak TransportWithMessageCredentialayarlayınMode.

  2. öğesini olarak ayarlayarak aktarım güvenliğini Windows kullanacak şekilde ClientCredentialType Windowsayarlayın. (Bunun varsayılan olduğunu unutmayın.)

  3. değerini ClientCredentialType uygun bir değere ayarlayın. Aşağıdaki kod değerini Certificate kullanır.

  4. Uygun bir temel adresle sınıfının bir örneğini Uri oluşturun. Adresin "net.tcp" düzenini kullanması gerektiğini unutmayın. (Alternatif olarak, temel adresi yapılandırmada ayarlayabilirsiniz.)

  5. sınıfının örneğini ServiceHost oluşturun.

  6. SetCertificate Hizmet için X.509 sertifikasını açıkça ayarlamak için sınıfının yöntemini X509CertificateRecipientServiceCredential kullanın.

  7. yöntemini kullanarak AddServiceEndpoint bir hizmet uç noktası ekleyin.

  8. Aşağıdaki kodda Open gösterildiği gibi yöntemini çağırın.

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

Yapılandırmayı Kullanma

WSHttpBinding'i kullanmak için

  1. Bilgisayarı bir bağlantı noktasına bağlı bir SSL sertifikasıyla yapılandırın. (Daha fazla bilgi için bkz. Nasıl yapılır: SSL Sertifikası ile Bağlantı Noktası Yapılandırma). Bu yapılandırmayla bir <transport> öğe değeri ayarlamanız gerekmez.

  2. İleti düzeyi güvenlik için istemci kimlik bilgisi türünü belirtin. Aşağıdaki örnek öğesinin clientCredentialType <message> özniteliğini olarak UserNameayarlar.

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

NetTcpBinding'i aktarım güvenliği sertifikasıyla kullanmak için

  1. TCP üzerinden SSL için, öğesinde <behaviors> sertifikayı açıkça belirtmeniz gerekir. Aşağıdaki örnek, sertifikayı veren tarafından varsayılan depolama konumunda (yerel makine ve kişisel depolar) belirtir.

    <behaviors>
     <serviceBehaviors>
       <behavior name="mySvcBehavior">
           <serviceCredentials>
             <serviceCertificate findValue="contoso.com"
                                 x509FindType="FindByIssuerName" />
           </serviceCredentials>
       </behavior>
     </serviceBehaviors>
    </behaviors>
    
  2. <Bağlamalar bölümüne netTcpBinding> ekleme

  3. Bağlama öğesi ekleyin ve özniteliğini name uygun bir değere ayarlayın.

  4. Bir <security> öğe ekleyin ve özniteliğini mode olarak TransportWithMessageCredentialayarlayın.

  5. Bir <message> öğe ekleyin ve özniteliğini clientCredentialType uygun bir değere ayarlayın.

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

NetTcpBinding'i aktarım güvenliği için Windows ile kullanmak için

  1. Bağlamalar bölümüne bir <netTcpBinding> ekleyin,

  2. Bir <binding> öğe ekleyin ve özniteliğini name uygun bir değere ayarlayın.

  3. Bir <security> öğe ekleyin ve özniteliğini mode olarak TransportWithMessageCredentialayarlayın.

  4. Bir <transport> öğe ekleyin ve özniteliğini clientCredentialType olarak Windowsayarlayın.

  5. Bir <message> öğe ekleyin ve özniteliğini clientCredentialType uygun bir değere ayarlayın. Aşağıdaki kod değeri bir sertifika olarak ayarlar.

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

Ayrıca bkz.