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

aktarım güvenliği kullanan sınıfla şirket içinde barındırılan bir Windows Communication Foundation (WCF) hizmeti WSHttpBinding oluştururken, bir X. 509.440 sertifikası ile bir bağlantı noktası da yapılandırmanız gerekir. kendi kendine barındırılan bir hizmet oluşturmadıysanız, hizmetinizi Internet Information Services (ııs) üzerinde barındırabilirsiniz. Daha fazla bilgi için bkz. http aktarım güvenliği.

Bir 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 ' de, bu araç yüklüdür. Daha fazla bilgi için bkz. Httpcfg Overview. Windows destek araçları belgeleri Httpcfg.exe aracının sözdizimini açıklar.

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

Not

Bilgisayarda depolanan sertifikaların değiştirilmesi 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  
    

Bir sertifikanın parmak izini al

  1. İstemci kimlik doğrulamasının amaçlanan amacını içeren bir X. 509.440 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 kullanmaktır ve her bir boşluğu null karakterle değiştirir.

Bir bağlantı noktası numarasına SSL sertifikası 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 "ayarla" modunda 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ı sözdizimine sahiptir: port ve araca sertifikayı bilgisayarın 8012 numaralı bağlantı noktasına ayarlamaya yönlendirir. İsteğe bağlı olarak, sayının önündeki dört sıfırda bilgisayarın gerçek IP adresi ile 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}
    
    • Sunucunuzda certhash parametresi, sertifikanın parmak izini belirtir.

    • Ipport PARAMETRESI, IP adresini ve bağlantı noktasını ve işlevleri açıklanan Httpcfg.exe aracının anahtarı gibi işlevlerini belirtir.

    • AppID parametresi, sahip olan uygulamayı tanımlamak için KULLANıLABILEN bir GUID 'dir.

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

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

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

    -F anahtarı, n 'nin 1 ile 7 arasında bir sayı olduğu sözdizimidir. 2 değeri, yukarıdaki örnekte gösterildiği gibi, aktarım katmanında istemci sertifikalarına izin vermez. 3 değeri, istemci sertifikalarını sağlar ve bu sertifikaları bir Windows hesabıyla eşleştirir. Diğer değerlerin davranışı için HttpCfg.exe yardımına bakın.

  2. Windows Vista 'da, aktarım katmanında X. 509.440 sertifikalarıyla kimlik doğrulayan istemcileri desteklemek için, aşağıdaki örnekte gösterildiği gibi, önceki yordamı, ek bir parametresiyle izleyin.

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

Bir 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 karakteri " > " 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. Parmak izini belirtmek için: port Number ve port anahtarını belirtmek için 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, bir kendi kendine barındırılan hizmetin aktarım güvenliği için ayarlanmış sınıfını kullanarak WSHttpBinding nasıl oluşturulacağını gösterir. Bir 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.