Практическое руководство. Настройка порта с использованием SSL-сертификатаHow to: Configure a Port with an SSL Certificate

При создании резидентной службы Windows Communication Foundation (WCF) с WSHttpBinding класса, использующим безопасность транспорта, необходимо также настроить порт с сертификатом X.509.When creating a self-hosted Windows Communication Foundation (WCF) service with the WSHttpBinding class that uses transport security, you must also configure a port with an X.509 certificate. При создании нерезидентной службы можно разместить ее в службах IIS.If you are not creating a self-hosted service, you can host your service on Internet Information Services (IIS). Дополнительные сведения см. в разделе безопасности транспорта HTTP.For more information, see HTTP Transport Security.

Выбор средства для настройки порта зависит от операционной системы компьютера.To configure a port, the tool you use depends on the operating system that is running on your machine.

При работе в Windows Server 2003Windows Server 2003 или Windows XPWindows XP следует использовать средство HttpCfg.exe.If you are running Windows Server 2003Windows Server 2003 or Windows XPWindows XP, use the HttpCfg.exe tool. Это средство установлено в Windows Server 2003Windows Server 2003.With Windows Server 2003Windows Server 2003 this tool is installed. С Windows XPWindows XP, можно загрузить инструмент по средства для поддержки Windows XP Service Pack 2.With Windows XPWindows XP, you can download the tool at Windows XP Service Pack 2 Support Tools. Дополнительные сведения см. в разделе Обзор Httpcfg.For more information, see Httpcfg Overview. Документации по средствам поддержки Windows описывается синтаксис средства Httpcfg.exe.The Windows Support Tools documentation explains the syntax for the Httpcfg.exe tool.

При работе в Windows VistaWindows Vista следует использовать установленное средство Netsh.exe.If you are running Windows VistaWindows Vista, use the Netsh.exe tool that is already installed.

В этом разделе описывается выполнение нескольких процедур.This topic describes how to accomplish several procedures:

  • Определение текущей конфигурации портов компьютера.Determining a computer's current port configuration.

  • Возвращение отпечатка сертификата (необходимо для выполнения следующих двух процедур).Getting a certificate's thumbprint (necessary for the following two procedures).

  • Выполнение привязки SSL-сертификата к конфигурации порта.Binding an SSL certificate to a port configuration.

  • Выполнение привязки SSL-сертификата к конфигурации порта и поддержка сертификатов клиента.Binding an SSL certificate to a port configuration and supporting client certificates.

  • Удаление SSL-сертификата из номера порта.Deleting an SSL certificate from a port number.

Обратите внимание, что для изменения сертификатов, хранящихся на компьютере, требуются привилегии администратора.Note that modifying certificates stored on the computer requires administrative privileges.

Определение конфигурации портовTo determine how ports are configured

  1. В Windows Server 2003Windows Server 2003 или Windows XPWindows XP, используйте средство HttpCfg.exe для просмотра текущей конфигурации портов, используя запроса и ssl переключается, как показано в следующем примере.In Windows Server 2003Windows Server 2003 or Windows XPWindows XP, use the HttpCfg.exe tool to view the current port configuration, using the query and ssl switches, as shown in the following example.

    httpcfg query ssl  
    
  2. Для просмотра текущей конфигурации портов в Windows VistaWindows Vista следует использовать средство Netsh.exe, как показано в следующем примере.In Windows VistaWindows Vista, use the Netsh.exe tool to view the current port configuration, as shown in the following example.

    netsh http show sslcert  
    

Возвращение отпечатка сертификатаTo get a certificate's thumbprint

  1. С помощью оснастки MMC найдите сертификат X.509, который используется для проверки подлинности клиента.Use the Certificates MMC snap-in to find an X.509 certificate that has an intended purpose of client authentication. Дополнительные сведения см. в разделе как: Просмотр сертификатов с помощью оснастки MMC.For more information, see How to: View Certificates with the MMC Snap-in.

  2. Получите доступ к отпечатку сертификата.Access the certificate's thumbprint. Дополнительные сведения см. в разделе как: извлечение отпечатка сертификата.For more information, see How to: Retrieve the Thumbprint of a Certificate.

  3. Скопируйте отпечаток сертификата в текстовый редактор, например "Блокнот".Copy the thumbprint of the certificate into a text editor, such as Notepad.

  4. Удалите все пробелы между шестнадцатеричными символами.Remove all spaces between the hexadecimal characters. Эту задачу можно выполнить, в том числе, с помощью функции поиска и замены текстового редактора, заменив каждый пробел символом null.One way to accomplish this is to use the text editor's find-and-replace feature and replace each space with a null character.

Выполнение привязки SSL-сертификата к номеру портаTo bind an SSL certificate to a port number

  1. Для выполнения привязки сертификата к номеру порта в Windows Server 2003Windows Server 2003 или Windows XPWindows XP следует использовать средство HttpCfg.exe в режиме "set" в хранилище SSL.In Windows Server 2003Windows Server 2003 or Windows XPWindows XP, use the HttpCfg.exe tool in "set" mode on the Secure Sockets Layer (SSL) store to bind the certificate to a port number. Это средство использует отпечаток для идентификации сертификата, как показано в следующем примере.The tool uses the thumbprint to identify the certificate, as shown in the following example.

    httpcfg set ssl -i 0.0.0.0:8012 -h 0000000000003ed9cd0c315bbb6dc1c08da5e6  
    
    • -I коммутатор имеет синтаксис IP:port и указывает средству установить сертификат на порт 8012 компьютера.The -i switch has the syntax of IP:port and instructs the tool to set the certificate to port 8012 of the computer. Дополнительно, четыре нуля, предшествующие номеру, можно заменить на фактический IP-адрес компьютера.Optionally, the four zeroes that precede the number can also be replaced by the actual IP address of the computer.

    • -H — задает отпечаток сертификата.The -h switch specifies the thumbprint of the certificate.

  2. В Windows VistaWindows Vista следует использовать средство Netsh.exe, как показано в следующем примере.In Windows VistaWindows Vista, use the Netsh.exe tool, as shown in the following example.

    netsh http add sslcert ipport=0.0.0.0:8000 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}   
    
    • Certhash задает отпечаток сертификата.The certhash parameter specifies the thumbprint of the certificate.

    • Ipport параметр указывает IP-адрес и порт, а работает так же, как -i переключатель описано средства Httpcfg.exe.The ipport parameter specifies the IP address and port, and functions just like the -i switch of the Httpcfg.exe tool described.

    • Appid параметр представляет собой идентификатор GUID, который может использоваться для идентификации приложения-владельца.The appid parameter is a GUID that can be used to identify the owning application.

Выполнение привязки SSL-сертификата к номеру порта и поддержка сертификатов клиентаTo bind an SSL certificate to a port number and support client certificates

  1. В Windows Server 2003Windows Server 2003 или Windows XPWindows XP для поддержки клиентов, проходящих проверку подлинности с сертификатами X.509 на транспортном уровне, необходимо выполнить вышеописанные процедуры и передать дополнительный параметр командной строки средству HttpCfg.exe, как показано в следующем примере.In Windows Server 2003Windows Server 2003 or Windows XPWindows XP, to support clients that authenticate with X.509 certificates at the transport layer, follow the preceding procedure but pass an additional command-line parameter to HttpCfg.exe, as shown in the following example.

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

    -F коммутатор имеет синтаксис n где n — число от 1 до 7.The -f switch has the syntax of n where n is a number between 1 and 7. Как показано в предыдущем примере, значение 2 включает сертификаты клиента на транспортном уровне.A value of 2, as shown in the preceding example, enables client certificates at the transport layer. Значение 3 включает сертификаты клиента и сопоставляет их учетной записи Windows.A value of 3 enables client certificates and maps those certificates to a Windows account. Поведение других значений описано в справке средства HttpCfg.exe.See HttpCfg.exe Help for the behavior of other values.

  2. В Windows VistaWindows Vista для поддержки клиентов, проходящих проверку подлинности с сертификатами X.509 на транспортном уровне, необходимо выполнить вышеописанные процедуры, используя дополнительный параметр, как показано в следующем примере.In Windows VistaWindows Vista, to support clients that authenticate with X.509 certificates at the transport layer, follow the preceding procedure, but with an additional parameter, as shown in the following example.

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

Удаление SSL-сертификата из номера портаTo delete an SSL certificate from a port number

  1. Для просмотра портов и отпечатков всех привязок на компьютере следует использовать средство HttpCfg.exe или Netsh.exe.Use the HttpCfg.exe or Netsh.exe tool to see the ports and thumbprints of all bindings on the computer. Для вывода информации на диск используйте символ перенаправления ">", как показано в следующем примере.To print the information to disk, use the redirection character ">", as shown in the following example.

    httpcfg query ssl>myMachinePorts.txt  
    
  2. В Windows Server 2003Windows Server 2003 или Windows XPWindows XP, используйте средство HttpCfg.exe с удаление и ssl ключевые слова.In Windows Server 2003Windows Server 2003 or Windows XPWindows XP, use the HttpCfg.exe tool with the delete and ssl keywords. Используйте -i для указания IP:port номер и -h для указания отпечаток.Use the -i switch to specify the IP:port number, and the -h switch to specify the thumbprint.

    httpcfg delete ssl -i 0.0.0.0:8005 -h 0000000000003ed9cd0c315bbb6dc1c08da5e6  
    
  3. В Windows VistaWindows Vista следует использовать средство Netsh.exe, как показано в следующем примере.In Windows VistaWindows Vista, use the Netsh.exe tool, as shown in the following example.

    Netsh http delete sslcert ipport=0.0.0.0:8005  
    

ПримерExample

В следующем примере кода показано, как создавать резидентную службу с использованием класса WSHttpBinding, установленного на безопасность транспорта.The following code shows how to create a self-hosted service using the WSHttpBinding class set to transport security. При создании приложения необходимо задать номер порта в адресе.When creating an application, specify the port number in the address.

// 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 certifiate 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 commmunication error occurred: {0}", ce.Message);
    Console.WriteLine();
}
catch (System.Exception exc)
{
    Console.WriteLine("An unforseen 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 certifiate 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 commmunication error occurred: {0}", ce.Message)
    Console.WriteLine()
Catch exc As System.Exception
    Console.WriteLine("An unforseen error occurred: {0}", exc.Message)
    Console.ReadLine()
End Try

См. такжеSee Also

Безопасность транспорта HTTPHTTP Transport Security