Aracılığıyla paylaş


Nasıl Yapılır: SSL Sertifikası ile Bir Bağlantı Noktasını Yapılandırma

Aktarım güvenliğini kullanan sınıfla şirket içinde barındırılan WSHttpBinding bir Windows Communication Foundation (WCF) hizmeti oluştururken, X.509 sertifikasına sahip bir bağlantı noktası da yapılandırmanız gerekir. Şirket içinde barındırılan bir hizmet oluşturmuyorsanız, hizmetinizi Internet Information Services'te (IIS) barındırabilirsiniz. Daha fazla bilgi için bkz . HTTP Aktarım Güvenliği.

Bağlantı noktasını yapılandırmak için, kullandığınız araç makinenizde çalışan işletim sistemine bağlıdır.

Windows Server 2003 çalıştırıyorsanız HttpCfg.exe aracını kullanın. Windows Server 2003'te bu araç yüklenir. Daha fazla bilgi için bkz . Httpcfg'ye Genel Bakış. Windows Destek Araçları belgelerinde Httpcfg.exe aracının söz dizimi açıklanmaktadır.

Windows Vista çalıştırıyorsanız, zaten yüklü olan Netsh.exe aracını kullanın.

Not

Bilgisayarda depolanan sertifikaları değiştirmek için yönetici ayrıcalıkları gerekir.

Bağlantı noktalarının nasıl yapılandırıldığını belirleme

  1. Windows Server 2003 veya Windows XP'de, aşağıdaki örnekte gösterildiği gibi sorgu ve ssl anahtarlarını kullanarak geçerli bağlantı noktası yapılandırmasını görüntülemek için HttpCfg.exe aracını kullanın.

    httpcfg query ssl  
    
  2. Windows Vista'da, aşağıdaki örnekte gösterildiği gibi geçerli bağlantı noktası yapılandırmasını görüntülemek için Netsh.exe aracını kullanın.

    netsh http show sslcert  
    

Sertifikanın parmak izini alma

  1. İstemci kimlik doğrulaması amacına sahip bir X.509 sertifikası bulmak için Sertifikalar MMC ek bileşenini kullanın. Daha fazla bilgi için bkz . Nasıl yapılır: MMC Ek Bileşeni ile Sertifikaları Görüntüleme.

  2. Sertifikanın parmak izine erişin. Daha fazla bilgi için bkz. Nasıl yapılır: Bir Sertifikanın Parmak İzini Alma.

  3. Sertifikanın parmak izini Not Defteri gibi bir metin düzenleyicisine kopyalayın.

  4. Onaltılık karakterler arasındaki tüm boşlukları kaldırın. Bunu gerçekleştirmenin bir yolu, metin düzenleyicisinin bul ve değiştir özelliğini kullanmak ve her boşluğu null karakterle değiştirmektir.

SSL sertifikasını bağlantı noktası numarasına bağlama

  1. Windows Server 2003 veya Windows XP'de, sertifikayı bir bağlantı noktası numarasına bağlamak için Güvenli Yuva Katmanı (SSL) deposundaki "set" modundaki HttpCfg.exe aracını kullanın. Araç, aşağıdaki örnekte gösterildiği gibi sertifikayı tanımlamak için parmak izini kullanır.

    httpcfg set ssl -i 0.0.0.0:8012 -h 0000000000003ed9cd0c315bbb6dc1c08da5e6  
    
    • -i anahtarının söz dizimi IPvardırport ve aracına sertifikayı bilgisayarın 8012 numaralı bağlantı noktası olarak ayarlamasını sağlar. İsteğe bağlı olarak, sayının önündeki dört sıfır, bilgisayarın gerçek IP adresiyle de değiştirilebilir.

    • -h anahtarı sertifikanın parmak izini belirtir.

  2. Windows Vista'da, aşağıdaki örnekte gösterildiği gibi Netsh.exe aracını kullanın.

    netsh http add sslcert ipport=0.0.0.0:8000 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}
    
    • certhash parametresi sertifikanın parmak izini belirtir.

    • ipport parametresi, IP adresini ve bağlantı noktasını belirtir ve aynı açıklanan Httpcfg.exe aracının -i anahtarı gibi çalışır.

    • appid parametresi, sahip olan uygulamayı tanımlamak için kullanılabilecek bir GUID'dir.

SSL sertifikasını bağlantı noktası numarasına bağlama ve istemci sertifikalarını destekleme

  1. Windows Server 2003 veya Windows XP'de, aktarım katmanında X.509 sertifikalarıyla kimlik doğrulamasında bulunan istemcileri desteklemek için önceki yordamı izleyin, ancak aşağıdaki örnekte gösterildiği gibi ek bir komut satırı parametresini HttpCfg.exe geçirin.

    httpcfg set ssl -i 0.0.0.0:8012 -h 0000000000003ed9cd0c315bbb6dc1c08da5e6 -f 2  
    

    -f anahtarının söz dizimi n vardır; burada n, 1 ile 7 arasında bir sayıdır. Önceki örnekte gösterildiği gibi 2 değeri, aktarım katmanında istemci sertifikalarını etkinleştirir. 3 değeri, istemci sertifikalarını etkinleştirir ve bu sertifikaları bir Windows hesabıyla eşler. Diğer değerlerin davranışı için yardım HttpCfg.exe bakın.

  2. Windows Vista'da, aktarım katmanında X.509 sertifikalarıyla kimlik doğrulaması sağlayan istemcileri desteklemek için, aşağıdaki örnekte gösterildiği gibi önceki yordamı izleyin, ancak ek bir parametre ekleyin.

    netsh http add sslcert ipport=0.0.0.0:8000 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF} clientcertnegotiation=enable  
    

Bağlantı noktası numarasından SSL sertifikası silme

  1. Bilgisayardaki tüm bağlamaların bağlantı noktalarını ve parmak izlerini görmek için HttpCfg.exe veya Netsh.exe aracını kullanın. Bilgileri diske yazdırmak için, aşağıdaki örnekte gösterildiği gibi ">" yeniden yönlendirme karakterini kullanın.

    httpcfg query ssl>myMachinePorts.txt  
    
  2. Windows Server 2003 veya Windows XP'de delete ve ssl anahtar sözcükleriyle HttpCfg.exe aracını kullanın. - numarasını belirtmekportIPiçin -i anahtarını ve parmak izini belirtmek için -h anahtarını kullanın.

    httpcfg delete ssl -i 0.0.0.0:8005 -h 0000000000003ed9cd0c315bbb6dc1c08da5e6  
    
  3. Windows Vista'da, aşağıdaki örnekte gösterildiği gibi Netsh.exe aracını kullanın.

    Netsh http delete sslcert ipport=0.0.0.0:8005  
    

Örnek

Aşağıdaki kod, aktarım güvenliği için ayarlanan sınıf kullanılarak şirket içinde barındırılan WSHttpBinding bir hizmetin nasıl oluşturulacağını gösterir. Uygulama oluştururken, adreste bağlantı noktası numarasını belirtin.

// This string uses a function to prepend the computer name at run time.
string addressHttp = String.Format(
    "http://{0}:8080/Calculator",
    System.Net.Dns.GetHostEntry("").HostName);

WSHttpBinding b = new WSHttpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;

// You must create an array of URI objects to have a base address.
Uri a = new Uri(addressHttp);
Uri[] baseAddresses = new Uri[] { a };

// Create the ServiceHost. The service type (Calculator) is not
// shown here.
ServiceHost sh = new ServiceHost(typeof(Calculator), baseAddresses);

// Add an endpoint to the service. Insert the thumbprint of an X.509
// certificate found on your computer.
Type c = typeof(ICalculator);
sh.AddServiceEndpoint(c, b, "MyCalculator");
sh.Credentials.ServiceCertificate.SetCertificate(
    StoreLocation.LocalMachine,
    StoreName.My,
    X509FindType.FindBySubjectName,
    "contoso.com");

// This next line is optional. It specifies that the client's certificate
// does not have to be issued by a trusted authority, but can be issued
// by a peer if it is in the Trusted People store. Do not use this setting
// for production code. The default is PeerTrust, which specifies that
// the certificate must originate from a trusted certificate authority.

// sh.Credentials.ClientCertificate.Authentication.CertificateValidationMode =
// X509CertificateValidationMode.PeerOrChainTrust;
try
{
    sh.Open();

    string address = sh.Description.Endpoints[0].ListenUri.AbsoluteUri;
    Console.WriteLine("Listening @ {0}", address);
    Console.WriteLine("Press enter to close the service");
    Console.ReadLine();
    sh.Close();
}
catch (CommunicationException ce)
{
    Console.WriteLine("A communication error occurred: {0}", ce.Message);
    Console.WriteLine();
}
catch (System.Exception exc)
{
    Console.WriteLine("An unforeseen error occurred: {0}", exc.Message);
    Console.ReadLine();
}
' This string uses a function to prepend the computer name at run time.
Dim addressHttp As String = String.Format("http://{0}:8080/Calculator", _
System.Net.Dns.GetHostEntry("").HostName)

Dim b As New WSHttpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate

' You must create an array of URI objects to have a base address.
Dim a As New Uri(addressHttp)
Dim baseAddresses() As Uri = {a}

' Create the ServiceHost. The service type (Calculator) is not
' shown here.
Dim sh As New ServiceHost(GetType(Calculator), baseAddresses)

' Add an endpoint to the service. Insert the thumbprint of an X.509 
' certificate found on your computer. 
Dim c As Type = GetType(ICalculator)
sh.AddServiceEndpoint(c, b, "MyCalculator")
sh.Credentials.ServiceCertificate.SetCertificate( _
                StoreLocation.LocalMachine, _
                StoreName.My, _
                X509FindType.FindBySubjectName, _
                "contoso.com")

' This next line is optional. It specifies that the client's certificate
' does not have to be issued by a trusted authority, but can be issued
' by a peer if it is in the Trusted People store. Do not use this setting
' for production code. The default is PeerTrust, which specifies that 
' the certificate must originate from a trusted certificate authority.
' sh.Credentials.ClientCertificate.Authentication.CertificateValidationMode =
' X509CertificateValidationMode.PeerOrChainTrust
Try
    sh.Open()

    Dim address As String = sh.Description.Endpoints(0).ListenUri.AbsoluteUri
    Console.WriteLine("Listening @ {0}", address)
    Console.WriteLine("Press enter to close the service")
    Console.ReadLine()
    sh.Close()
Catch ce As CommunicationException
    Console.WriteLine("A communication error occurred: {0}", ce.Message)
    Console.WriteLine()
Catch exc As System.Exception
    Console.WriteLine("An unforeseen error occurred: {0}", exc.Message)
    Console.ReadLine()
End Try

Ayrıca bkz.