Cómo: Configurar un puerto con un certificado SSLHow to: Configure a Port with an SSL Certificate

Al crear un servicio de Windows Communication Foundation (WCF) autohospedado con la clase WSHttpBinding que usa la seguridad de transporte, también debe configurar un puerto con un certificado 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. Si no está creando un servicio autohospedado, puede hospedar su servicio en Servicios de Internet Information Server (IIS).If you are not creating a self-hosted service, you can host your service on Internet Information Services (IIS). Para obtener más información, vea seguridad de transporte http.For more information, see HTTP Transport Security.

La herramienta que se usa para configurar un puerto depende del sistema operativo que se esté ejecutando en el equipo.To configure a port, the tool you use depends on the operating system that is running on your machine.

Si está ejecutando Windows Server 2003Windows Server 2003 o Windows XPWindows XP, use la herramienta HttpCfg.exe.If you are running Windows Server 2003Windows Server 2003 or Windows XPWindows XP, use the HttpCfg.exe tool. Esta herramienta se instala con Windows Server 2003Windows Server 2003.With Windows Server 2003Windows Server 2003 this tool is installed. Con Windows XPWindows XP, puede descargar la herramienta en herramientas de soporte técnico de Windows XP Service Pack 2.With Windows XPWindows XP, you can download the tool at Windows XP Service Pack 2 Support Tools. Para obtener más información, consulte información general de Httpcfg.For more information, see Httpcfg Overview. La documentación de las herramientas de soporte de Windows explica la sintaxis de la herramienta Httpcfg. exe.The Windows Support Tools documentation explains the syntax for the Httpcfg.exe tool.

Si está ejecutando Windows Vista, use la herramienta netsh. exe que ya está instalada.If you are running Windows Vista, use the Netsh.exe tool that is already installed.

En este tema se describe cómo se realizan varios procedimientos:This topic describes how to accomplish several procedures:

  • Determinar la configuración de puerto actual de un equipo.Determining a computer's current port configuration.

  • Obtener la huella digital de un certificado (necesario para los dos procedimientos siguientes).Getting a certificate's thumbprint (necessary for the following two procedures).

  • Enlazar un certificado SSL a una configuración de puerto.Binding an SSL certificate to a port configuration.

  • Enlazar un certificado SSL a una configuración del puerto y admitir los certificados de cliente.Binding an SSL certificate to a port configuration and supporting client certificates.

  • Eliminar un certificado SSL de un número de puerto.Deleting an SSL certificate from a port number.

Tenga en cuenta que para modificar los certificados almacenados en el equipo se requieren privilegios de administrador.Note that modifying certificates stored on the computer requires administrative privileges.

Determinar cómo se configuran los puertosTo determine how ports are configured

  1. En Windows Server 2003Windows Server 2003 o Windows XPWindows XP, utilice la herramienta HttpCfg. exe para ver la configuración de puerto actual, mediante los modificadores de consulta y SSL , tal y como se muestra en el ejemplo siguiente.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. En Windows Vista, use la herramienta netsh. exe para ver la configuración de puerto actual, tal y como se muestra en el ejemplo siguiente.In Windows Vista, use the Netsh.exe tool to view the current port configuration, as shown in the following example.

    netsh http show sslcert  
    

Para obtener una huella digital de un certificadoTo get a certificate's thumbprint

  1. Use el complemento de certificados de MMC para buscar un certificado X.509 que tenga como finalidad la autenticación del cliente.Use the Certificates MMC snap-in to find an X.509 certificate that has an intended purpose of client authentication. Para obtener más información, vea Cómo: Ver certificados con el complemento de MMC.For more information, see How to: View Certificates with the MMC Snap-in.

  2. Obtenga acceso a la huella digital del certificado.Access the certificate's thumbprint. Para más información, consulte Cómo recuperar la huella digital de un certificado.For more information, see How to: Retrieve the Thumbprint of a Certificate.

  3. Copie la huella digital del certificado en un editor de texto, como por ejemplo Bloc de notas.Copy the thumbprint of the certificate into a text editor, such as Notepad.

  4. Quite todos los espacios entre los caracteres hexadecimales.Remove all spaces between the hexadecimal characters. Una manera de llevarlo a cabo es utilizar la característica del editor de texto buscar y reemplazar y reemplazar todos los espacios con un carácter nulo.One way to accomplish this is to use the text editor's find-and-replace feature and replace each space with a null character.

Enlazar un Certificado SSL a un número de puertoTo bind an SSL certificate to a port number

  1. En Windows Server 2003Windows Server 2003 o Windows XPWindows XP, use la herramienta HttpCfg.exe en modo "set" en el almacén SSL (Capa de sockets seguros) para enlazar el certificado a un número de puerto.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. La herramienta utiliza la huella digital para identificar el certificado, tal y como se muestra en el ejemplo siguiente.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  
    
    • El modificador -i tiene la sintaxis de IP:port e indica a la herramienta que establezca el certificado en el puerto 8012 del equipo.The -i switch has the syntax of IP:port and instructs the tool to set the certificate to port 8012 of the computer. De forma opcional, también se pueden reemplazar los cuatro ceros que preceden el número por la dirección IP real del equipo.Optionally, the four zeroes that precede the number can also be replaced by the actual IP address of the computer.

    • El modificador -h especifica la huella digital del certificado.The -h switch specifies the thumbprint of the certificate.

  2. En Windows Vista, use la herramienta netsh. exe, tal y como se muestra en el ejemplo siguiente.In Windows 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}   
    
    • El parámetro certhash especifica la huella digital del certificado.The certhash parameter specifies the thumbprint of the certificate.

    • El parámetro ipport especifica la dirección IP y el puerto, y funciona de la misma manera que el modificador -i de la herramienta Httpcfg. exe que se describe.The ipport parameter specifies the IP address and port, and functions just like the -i switch of the Httpcfg.exe tool described.

    • El parámetro AppID es un GUID que se puede usar para identificar la aplicación propietaria.The appid parameter is a GUID that can be used to identify the owning application.

Para enlazar un Certificado SSL a un número de puerto y a certificados de cliente de compatibilidadTo bind an SSL certificate to a port number and support client certificates

  1. En Windows Server 2003Windows Server 2003 o Windows XPWindows XP, para admitir clientes que se autentican con certificados X.509 en el nivel de transporte, siga el procedimiento anterior pero pase un parámetro de línea de comandos adicional a HttpCfg.exe, tal y como se muestra en el ejemplo siguiente.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  
    

    El modificador -f tiene la sintaxis de n, donde n es un número entre 1 y 7.The -f switch has the syntax of n where n is a number between 1 and 7. El valor 2, como se mostraba en el ejemplo anterior, habilita los certificados de cliente en el nivel de transporte.A value of 2, as shown in the preceding example, enables client certificates at the transport layer. El valor 3 habilita los certificados de cliente y los asigna a una cuenta de Windows.A value of 3 enables client certificates and maps those certificates to a Windows account. Consulte la Ayuda HttpCfg.exe para el comportamiento de otros valores.See HttpCfg.exe Help for the behavior of other values.

  2. En Windows Vista, para admitir clientes que se autentican con certificados X. 509 en el nivel de transporte, siga el procedimiento anterior, pero con un parámetro adicional, como se muestra en el ejemplo siguiente.In Windows 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  
    

Eliminar un Certificado SSL desde un número de puertoTo delete an SSL certificate from a port number

  1. Use la herramienta HttpCfg.exe o Netsh.exe para ver los puertos y huellas digitales de todos los enlaces del equipo.Use the HttpCfg.exe or Netsh.exe tool to see the ports and thumbprints of all bindings on the computer. Para imprimir la información en el disco, use el carácter de redireccionamiento ">", como se muestra en el ejemplo siguiente.To print the information to disk, use the redirection character ">", as shown in the following example.

    httpcfg query ssl>myMachinePorts.txt  
    
  2. En Windows Server 2003Windows Server 2003 o Windows XPWindows XP, use la herramienta HttpCfg. exe con las palabras clave Delete y SSL .In Windows Server 2003Windows Server 2003 or Windows XPWindows XP, use the HttpCfg.exe tool with the delete and ssl keywords. Use el modificador -i para especificar el IP:port número y el modificador -h para especificar la huella digital.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. En Windows Vista, use la herramienta netsh. exe, tal y como se muestra en el ejemplo siguiente.In Windows Vista, use the Netsh.exe tool, as shown in the following example.

    Netsh http delete sslcert ipport=0.0.0.0:8005  
    

EjemploExample

El código siguiente muestra cómo crear un servicio autohospedado utilizando la clase WSHttpBinding establezca para seguridad de transporte.The following code shows how to create a self-hosted service using the WSHttpBinding class set to transport security. Cuando cree una aplicación, especifique el número de puerto en la dirección.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 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

Vea tambiénSee also