Compartir a través de


Solución de problemas relacionados con SSL (certificado de servidor)

Se aplica a: Internet Information Services

Información general

Este artículo le ayuda a solucionar problemas de Capa de sockets seguros (SSL) relacionados solo con Internet Information Services (IIS). Trata los certificados de servidor usados para la autenticación de servidor, no para los certificados de cliente.

Si la sección Certificados de cliente está establecida en Requerir y se producen problemas, este artículo no es el que debe hacer referencia. Este artículo está diseñado solo para solucionar el problema de certificados SSL Server.

Es importante saber que cada certificado consta de una clave pública (usada para el cifrado) y una clave privada (usada para el descifrado). La clave privada solo se conoce en el servidor.

El puerto predeterminado para HTTPS es 443. Se supone que está bien familiarizado con el protocolo de enlace SSL y el proceso de autenticación del servidor durante el protocolo de enlace SSL.

Herramientas usadas en este solucionador de problemas

Las herramientas que se usan para solucionar los distintos escenarios son:

  • Monitor de red 3.4
  • Wireshark

Escenarios

Verá el siguiente mensaje de error al examinar un sitio web a través de HTTPS:

Captura de pantalla de una página del explorador que muestra el mensaje, la conexión de este sitio no es segura.

El primer requisito previo que debe comprobarse es si el sitio web es accesible a través de HTTP. Si no es así, es probable que haya un problema independiente que no se trata en este artículo. Antes de usar este solucionador de problemas, debe tener el sitio web operativo en HTTP.

Ahora, supongamos que el sitio web es accesible a través de HTTP y se muestra el mensaje de error anterior al intentar navegar a través de HTTPS. El mensaje de error se muestra porque se produjo un error en el protocolo de enlace SSL. Puede haber muchas razones que se detallan en los siguientes escenarios.

Escenario 1

Compruebe si el certificado de servidor tiene la clave privada correspondiente. Vea la captura de pantalla siguiente del cuadro de diálogo Certificado:

Dos capturas de pantalla del cuadro de diálogo Certificado. Uno no tiene una clave privada. El otro muestra un mensaje que indica que la clave privada corresponde al certificado.

Solución

Si falta la clave privada, debe obtener un certificado que contenga la clave privada, que es básicamente . Archivo PFX . Este es un comando que puede intentar ejecutar para asociar la clave privada con el certificado:

C:\>certutil - repairstore my "906c9825e56a13f1017ea40eca770df4c24cb735"

Captura de pantalla de la consola de comandos que muestra la sintaxis certutil.

Si la asociación se realiza correctamente, verá la ventana siguiente:

Captura de pantalla de la consola de comandos que muestra un mensaje que indica que el comando se completó correctamente.

En este ejemplo, 906c9825e56a13f1017ea40eca770df4c24cb735 es la huella digital del certificado. Para obtener la huella digital, siga estos pasos:

  1. Abra el certificado.
  2. Seleccione la pestaña Details (Detalles).
  3. Desplácese hacia abajo para buscar la sección huella digital.
  4. Seleccione la sección huella digital y seleccione el texto en él.
  5. Realice una instrucción Ctrl+A y, a continuación, Ctrl+C para seleccionarla y copiarla.

Captura de pantalla del cuadro de diálogo Certificado que muestra la pestaña Detalles. El valor de huella digital está resaltado.

Nota:

Es posible que el certutil comando no siempre se realice correctamente. Si se produce un error, debe obtener un certificado que contenga la clave privada de la entidad de certificación (CA).

Escenario 2

En este escenario, tenga en cuenta que tiene un certificado de servidor que contiene la clave privada instalada en el sitio web. Sin embargo, seguirá viendo el error que se muestra en el escenario 1. Todavía no puede acceder al sitio web a través de HTTPS.

Solución

Si tiene un certificado que contiene la clave privada, pero no puede acceder al sitio web, también puede ver la siguiente advertencia de SChannel en los registros de eventos del sistema:

Event Type: Error 
Event Source: Schannel 
Event Category: None 
Event ID: 36870 
Date: 2/11/2012 
Time: 12:44:55 AM 
User: N/A 
Computer: 
Description: A fatal error occurred when attempting to access the SSL server credential private key. The error code returned from the cryptographic module is 0x80090016. 

Este evento o error indica que se produjo un problema al adquirir la clave privada del certificado. Para resolver la advertencia, siga estos pasos:

  1. Compruebe los permisos en la carpeta MachineKeys . Todas las claves privadas se almacenan en la carpeta MachineKeys , por lo que debe asegurarse de que tiene los permisos necesarios.

  2. Si los permisos están en su lugar y si el problema todavía no se ha corregido, podría haber un problema con el certificado. Es posible que se haya dañado. Es posible que vea un código de error de en el siguiente registro de 0x8009001a eventos de SChannel:

    Event Type: Error 
    Event Source: Schannel 
    Event Category: None 
    Event ID: 36870 
    Date: 2/11/2012 
    Time: 12:44:55 AM 
    User: N/A 
    Computer: 
    A fatal error occurred when attempting to access the SSL server credential private key. The error code returned from the cryptographic module is 0x8009001a. 
    
  3. Compruebe si el sitio web funciona con un certificado de prueba.

  4. Realice una copia de seguridad del certificado existente y, a continuación, reemplácelo por un certificado autofirmado.

  5. Intente acceder al sitio web mediante HTTPS.

    Si funciona, el certificado usado anteriormente estaba dañado y debe reemplazarse por un nuevo certificado de trabajo. A veces, es posible que el problema no esté con el certificado, pero con el emisor. Durante la comprobación de la cadena de certificados, es posible que vea el error CERT_E_UNTRUSTEDROOT (0x800b0109) si el certificado de entidad de certificación raíz no es raíz de confianza.

  6. Para corregir este error, agregue el certificado de la ENTIDAD de certificación al almacén de CA raíz de confianza en Mi cuenta de equipo en el servidor. Durante la comprobación de la cadena de certificados, también puede obtener el error -2146762480(0x800b0110).

  7. Para resolver el error, siga estos pasos para comprobar el tipo de uso del certificado:

    1. Abra el certificado.
    2. Seleccione la pestaña Details (Detalles).
    3. Seleccione Editar propiedades.
    4. En la pestaña General , asegúrese de que la opción Habilitar todos los propósitos para este certificado está seleccionada y, lo más importante, la autenticación del servidor debe estar presente en la lista.

    Captura de pantalla que muestra una parte del cuadro de diálogo Propiedades del certificado donde se selecciona la opción habilitar todos los fines para este certificado.

Escenario 3

Los dos primeros escenarios ayudan a comprobar la integridad del certificado. Después de confirmar que no hay ningún problema con el certificado, se resuelve un problema considerable. Pero, ¿qué ocurre si el sitio web todavía no es accesible a través de HTTPS? Compruebe los enlaces HTTPS del sitio web y determine en qué puerto y dirección IP está escuchando.

Solución

  1. Ejecute el siguiente comando para asegurarse de que ningún otro proceso está escuchando en el puerto SSL usado por el sitio web.

    netstat -ano" or "netstat -anob"
    
  2. Si hay otro proceso que escucha en ese puerto, compruebe por qué ese proceso usa ese puerto.

  3. Intente cambiar la combinación IP-Port para comprobar si el sitio web es accesible.

Escenario 4

Por ahora, puede asegurarse de que tiene un certificado de trabajo adecuado instalado en el sitio web y no hay ningún otro proceso mediante el puerto SSL para este sitio web. Sin embargo, es posible que todavía vea el error "Página no se puede mostrar" al acceder al sitio web a través de HTTPS. Cuando un cliente se conecta e inicia una negociación SSL, HTTP.sys busca en su configuración SSL el par "IP:Port" al que está conectado el cliente. La configuración de HTTP.SYS SSL debe incluir un hash de certificado y el nombre del almacén de certificados antes de que la negociación SSL se realice correctamente. El problema podría ser con .HTTP.SYS SSL Listener

El hash de certificado registrado con HTTP.sys puede ser NULL o puede contener GUID no válido.

Solución

  1. Ejecute el comando siguiente:

    netsh http show ssl
    

    Estos son ejemplos de escenarios de trabajo y no trabajo:

    Escenario de trabajo

    Configuración Setting
    IP:port 0.0.0.0:443
    Hash de certificado c09b416d6b 8d615db22 64079d15638e96823d
    Identificador de la aplicación {4dc3e181-e14b-4a21-b022-59fc669b0914}
    Nombre del almacén de certificados My
    Comprobar la revocación de certificados de cliente Habilitado
    Hora de actualización de revocación 0
    Tiempo de espera de recuperación de direcciones URL 0
    ...... ......

    Escenario de no trabajo

    Configuración Setting
    IP:port 0.0.0.0:443
    Hash de certificado
    Identificador de la aplicación {00000000-0000-0000-0000-000000000000}
    CertStoreName My
    Comprobar la revocación de certificados de cliente 0
    Hora de actualización de revocación 0
    Tiempo de espera de recuperación de direcciones URL 0
    ...... ......

    El valor hash que se ve en el escenario de trabajo es la huella digital del certificado SSL. Observe que el GUID es cero en un escenario que no funciona. Es posible que vea que el hash tiene algún valor o está en blanco. Incluso si quita el certificado del sitio web y, a continuación, ejecuta netsh http show ssl, el sitio web seguirá enumerando el GUID como todos los 0s. Si ve el GUID como "{0000...............000}", hay un problema.

  2. Para quitar esta entrada, ejecute el siguiente comando:

    netsh http delete sslcert ipport=<IP Address>:<Port>
    

    Por ejemplo:

    netsh http delete sslcert ipport=0.0.0.0:443
    
  3. Para determinar si se muestran direcciones IP, abra un símbolo del sistema y ejecute el siguiente comando:

    netsh http show iplisten
    

    Si el comando devuelve una lista de direcciones IP, quite cada dirección IP de la lista mediante el siguiente comando:

    netsh http delete iplisten ipaddress=<IP Address>
    

    Nota:

    Reinicie IIS después de esto mediante el net stop http /y comando .

Escenario 5

A pesar de todo esto, si todavía no puede examinar el sitio web en HTTPS, capture un seguimiento de red desde el cliente o servidor. Filtre el seguimiento por "SSL o TLS" para examinar el tráfico SSL.

Esta es una instantánea de seguimiento de red de un escenario que no funciona:

Captura de pantalla de la ventana Mostrar filtro que muestra la instantánea de seguimiento.

Esta es una instantánea de seguimiento de red de un escenario de trabajo:

Captura de pantalla de la ventana Mostrar filtro que muestra una instantánea de un seguimiento correcto.

Este es el método de cómo se examina un seguimiento de red. Debe expandir los detalles del marco y ver qué protocolo y cifrado ha elegido el servidor. Seleccione "Server Hello" en la descripción para ver esos detalles.

En el escenario no operativo, el cliente se ha configurado para usar solo TLS 1.1 y TLS 1.2. Sin embargo, el servidor web iiS se configuró para admitir hasta TLS 1.0, por lo que se produjo un error en el protocolo de enlace.

Compruebe las claves del Registro para determinar qué protocolos están habilitados o deshabilitados. Esta es la ruta de acceso:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols

La DWORD habilitada debe establecerse en 1. Si se establece en 0, el protocolo está deshabilitado.

Por ejemplo, SSL 2.0 está deshabilitado de forma predeterminada.

Más información