Solución de problemas relacionados con SSL (certificado de servidor)
Herramientas usadas en este solucionador de problemas:
- SSLDiag
- Network Monitor 3.4/Wireshark
Este material se proporciona únicamente con fines informativos. Microsoft no ofrece garantía alguna, ya sea expresa o implícita,
Información general
Este documento le ayudará a solucionar problemas de SSL relacionados solo con IIS. La solución de problemas de certificados de cliente no se tratará en este documento. Los certificados de servidor están diseñados para la autenticación de servidor y solo trataremos con certificados de servidor en este documento.
Si la sección Certificados de cliente está establecida en "Requerir" y, a continuación, tiene problemas, no consulte este documento. Esto está pensado solo para solucionar problemas de problemas 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.
Estoy bajo la suposición de que el lector está bien familiarizado con el protocolo de enlace SSL y el proceso de autenticación del servidor durante el protocolo de enlace SSL.
Descripción del protocolo de enlace capa de sockets seguros (SSL):
<https://support.microsoft.com/kb/257591
>
Descripción del proceso de autenticación del servidor durante el protocolo de enlace SSL:
<https://support.microsoft.com/kb/257587
>
Escenarios
Se ve el siguiente mensaje de error al navegar por el sitio web a través de https:
Lo primero 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 aquí. Antes de continuar con este solucionador de problemas, deberá tener el sitio web trabajando en http.
Ahora supongamos que el sitio web es accesible a través de http y obtenemos el error anterior al intentar examinar https. El problema se ve porque se produjo un error en el protocolo de enlace SSL y, por tanto, se ha detectado el mensaje de error. Puede haber muchas razones. Seguiremos un enfoque paso a paso para resolver este problema.
Escenario 1
Compruebe si el certificado de servidor tiene la clave privada correspondiente. Consulte la imagen siguiente:
Si falta una clave privada, debe obtener un certificado que contenga la clave privada, que básicamente es . Archivo PFX. Hay un comando que podríamos intentar ejecutar para asociar la clave privada con el certificado:
C:\>certutil –repairstore my "1a 1f 94 8b 21 a2 99 36 77 a8 8e b2 3f 42 8c 7e 47 e3 d1 33"
Si la asociación se realiza correctamente, verá la ventana siguiente:
Nota: 1a 1f 94 8b 21 a2 99 36 77 a8 8e b2 3f 42 8c 7e 47 e3 d1 33 es la huella digital del certificado. Abra el certificado y haga clic en la pestaña de detalles. Desplácese hacia abajo para buscar la sección de huella digital. Seleccione la sección huella digital y haga clic en el texto siguiente. Realice una operación "Ctrl+A" y, a continuación, "Ctrl+C" para seleccionarla y copiarla. A continuación se muestra una instantánea de la referencia:
Nota: Este comando no se realiza correctamente siempre. Si se produce un error, debe obtener un certificado que contenga la clave privada de la ENTIDAD de certificación. La extensión de archivo de un certificado que contiene la clave privada es .pfx.
Escenario 2
Pasamos el primer obstáculo y ahora tenemos un certificado de servidor que contiene la clave privada instalada en el sitio web. Sin embargo, todavía obtenemos el mismo error que el anterior. Todavía no se puede acceder al sitio web a través de https.
La herramienta SSLDiag es útil aquí.
Windows Server 2003:
Descargar X64 (https://www.microsoft.com/download/en/details.aspx?displaylang=en&id=5329
)
Descargar X86 (https://www.microsoft.com/download/en/details.aspx?displaylang=en&id=674
)
Para IIS 7 e IIS 7.5, use la herramienta de diagnóstico SSL de vijaysk. A continuación se muestra el vínculo:
https://blogs.msdn.com/b/vijaysk/archive/2009/09/20/ssl-diagnostics-tool-for-iis-7.aspx
Instale la herramienta y ejecútela en el servidor. Si tiene un certificado que contiene una clave privada y sigue sin poder acceder al sitio web, es posible que desee ejecutar esta herramienta o comprobar los registros de eventos del sistema para ver las advertencias o errores relacionados con SChannel.
Al ejecutar la herramienta SSLDiag, puede obtener el siguiente error:
Tiene una clave privada que corresponde a este certificado, pero se produjo un error en CryptAcquireCertificatePrivateKey.
También habrá una advertencia de SChannel en los registros de eventos del sistema, como se muestra a continuación:
Tipo de evento: error |
---|
Origen del evento: Schannel |
Categoría del evento: ninguna |
Identificador de evento: 36870 |
Fecha: 11/2/2012 |
Hora: 12:44:55 a. m. |
Usuario: N/D |
Equipo: |
Descripción: Se produjo un error grave al intentar obtener acceso a la clave privada de las credenciales del servidor SSL. El código de error devuelto por el módulo criptográfico es 0x80090016. |
Este evento o error indica que hubo un problema al adquirir la clave privada del certificado. Por lo tanto, vamos a probar los pasos siguientes uno por uno:
En primer lugar, compruebe los permisos en la carpeta machinekeys según el artículo de KB: https://support.microsoft.com/kb/278381. Todas las claves privadas se almacenan dentro de la carpeta machinekeys, por lo que debemos asegurarnos de que tenemos los permisos necesarios.
Si los permisos están implementados y si el problema sigue sin corregirse. A continuación, debe ser un problema con el certificado. Es posible que se haya dañado (es posible que vea un código de error de 0x8009001a en el registro de eventos de SChannel).
Tipo de evento: error Origen del evento: Schannel Categoría del evento: ninguna Identificador de evento: 36870 Fecha: 11/2/2012 Hora: 12:44:55 a. m. Usuario: N/D Equipo: Se produjo un error grave al intentar obtener acceso a la clave privada de las credenciales del servidor SSL. El código de error devuelto por el módulo criptográfico es 0x8009001a. Probaremos si el sitio web funciona con un certificado de prueba. Realice una copia de seguridad del certificado existente y, a continuación, reemplácelo por un certificado autofirmado. Intente acceder al sitio web a través de https. Si funciona, el certificado usado anteriormente estaba dañado y debe reemplazarse por un nuevo certificado de trabajo.
A veces, el problema puede no estar con el certificado, pero con el emisor. Es posible que vea el siguiente error en SSLDiag:
CertVerifyCertificateChainPolicy producirá un error con CERT_E_UNTRUSTEDROOT (0x800b0109), si el certificado de CA raíz no es raíz de confianza.
Para corregir esto, agregue el certificado de la ENTIDAD de certificación al almacén "Ca raíz de confianza" en Mi cuenta de equipo en el servidor.
También puede obtener el siguiente error:
CertVerifyCertificateChainPolicy devolvió el error -2146762480(0x800b0110).
Si se recibe el error anterior, es necesario comprobar el tipo de uso del certificado. Abra el certificado, haga clic en la pestaña "Detalles" y, a continuación, haga clic en "Editar propiedades..." Botón. 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, "Autenticación de servidor" debe estar presente en la lista.
Escenario 3
Los dos primeros pasos comprueban la integridad del certificado. Una vez que hemos confirmado que no hay problemas con el certificado, se resuelve un gran problema. Pero, ¿qué ocurre si el sitio web sigue sin ser accesible a través de https. Compruebe los enlaces HTTPS del sitio web y determine qué puerto e IP está escuchando. Puede ejecutar el siguiente comando para asegurarse de que ningún otro proceso escucha en el puerto SSL usado por el sitio web.
netstat -ano" or "netstat -anob
Si hay otro proceso que escucha en ese puerto, compruebe por qué ese proceso consume ese puerto. Intente cambiar la combinación de IP-Port para comprobar si el sitio web es accesible o no.
Escenario 4
Por ahora estamos seguros de que tenemos un certificado de trabajo adecuado instalado en el sitio web y no hay ningún otro proceso usando el puerto SSL para este sitio web. Sin embargo, todavía obtengo el error "No se puede mostrar la página" al acceder 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 se ha 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 puede ser con el agente de escucha SSL de HTTP.SYS.
El hash de certificado registrado con HTTP.SYS puede ser NULL o puede contener GUID no válido. Ejecute lo siguiente desde un símbolo del sistema:
IIS 6: "httpcfg.exe query ssl" IIS 7/7.5: "netsh http show ssl"
Nota
httpcfg forma parte de las herramientas de soporte técnico de Windows y está presente en el disco de instalación. También puede descargarlo desde aquí:
https://www.microsoft.com/download/en/details.aspx?id=7911
A continuación se muestra un ejemplo de un escenario de trabajo y no laborable:
Escenario de trabajo:
Configuración Configuración IP 0.0.0.0:443 Hash Guid {00000000-0000-0000-0000-000000000000} CertStoreName MY CertCheckMode 0 RevocationFreshnessTime 0 UrlRetrievalTimeout 0 SslCtlIdentifier 0 SslCtlStoreName 0 Marcas 0 Escenario de no trabajo:
Configuración Configuración IP 0.0.0.0:443 Hash c09b416d6b 8d615db22 64079d15638e96823d Guid {4dc3e181-e14b-4a21-b022-59fc669b0914} CertStoreName MY CertCheckMode 0 RevocationFreshnessTime 0 UrlRetrievalTimeout 0 SslCtlIdentifier 0 SslCtlStoreName 0 Marcas 0 El valor hash anterior es la huella digital del certificado SSL. Tenga en cuenta 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 quitamos el certificado del sitio web y, a continuación, ejecutamos "httpcfg query ssl", el sitio web seguirá enumerando Guid como todos los 0. Si ve el GUID como "{0000............000}, hay un problema.
Para quitar esta entrada, ejecute el comando :
httpcfg delete ssl -i "IP:Port Number"
Por ejemplo:
httpcfg delete ssl –i 0.0.0.0:443
Elimine todas las entradas de la lista de escucha ip.
Para determinar si se muestran direcciones IP, abra un símbolo del sistema y, a continuación, ejecute el siguiente comando:
IIS 6: httpcfg query iplisten
IIS 7/7.5: netsh http show iplisten
Si la lista escucha IP está vacía, el comando devuelve la siguiente cadena:
HttpQueryServiceConfiguration completed with 1168.
Si el comando devuelve una lista de direcciones IP, quite cada dirección IP de la lista mediante el siguiente comando:
httpcfg delete iplisten -i x.x.x.x
Nota
reinicie IIS después de esto mediante el comando "net stop http /y"
Escenario 5
Después de todo esto, si todavía no puede examinar el sitio web en https, capture un seguimiento de red desde el cliente o el servidor. Filtre el seguimiento por "SSL o TLS" para examinar el tráfico SSL.
A continuación se muestra una instantánea de seguimiento de red de un escenario que no funciona:
Escenario de trabajo:
Bueno, esto es definitivamente ahora cómo se mira 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 obtener esos detalles.
En el escenario que no funciona, el cliente se configuró para usar TLS 1.1 y TLS 1.2 solo. Sin embargo, el servidor web era IIS 6, que puede admitir hasta TLS 1.0 y, por tanto, 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
El DWORD "Habilitado" debe establecerse en "1". Si es "0", el protocolo está deshabilitado.
Por ejemplo, SSL 2.0 está deshabilitado de forma predeterminada.
Escenario 6
Si todo se ha comprobado y si sigue experimentando problemas al acceder al sitio web a través de https, es más probable que sea una actualización que esté causando un error en el protocolo de enlace SSL.
Microsoft ha publicado una actualización para la implementación de SSL en Windows:
MS12-006: Vulnerability in SSL/TLS could allow information disclosure: January 10, 2012
Es posible que esta actualización afecte a los clientes que usan Internet Explorer o que usen una aplicación que usa Internet Explorer para realizar solicitudes HTTPS.
En realidad, se realizaron dos cambios para abordar la vulnerabilidad de divulgación de información en SSL 3.0 / TLS 1.0. La actualización MS12-006 implementa un nuevo comportamiento en schannel.dll, que envía un registro adicional mientras se usa un cifrado de bloque encadenado SSL común, cuando los clientes solicitan ese comportamiento. El otro cambio se produjo en Wininet.dll, parte de la actualización acumulativa de diciembre para Internet Explorer (MS11-099), para que IE solicite el nuevo comportamiento.
Si existe un problema, puede manifestarse como un error al conectarse a un servidor o una solicitud incompleta. Internet Explorer 9 puede mostrar un error "Internet Explorer no puede mostrar la página web". Las versiones anteriores de IE pueden mostrar simplemente una página en blanco.
Fiddler no usa el registro adicional cuando captura y reenvía solicitudes HTTPS al servidor. Por lo tanto, si Fiddler se usa para capturar el tráfico HTTPS, las solicitudes se realizarán correctamente.
Claves del Registro
Como se documenta en https://support.microsoft.com/kb/2643584, hay un valor del Registro SendExtraRecord, que puede hacer lo siguiente:
- Deshabilitación global del nuevo comportamiento ssl
- Habilitarlo globalmente o
- (Valor predeterminado) habilite para los clientes SChannel que opten por el nuevo comportamiento.
Para Internet Explorer y para los clientes que consumen componentes de IE, hay una clave del Registro en la sección FeatureControl, FEATURE_SCH_SEND_AUX_RECORD_KB_2618444, que determina si iexplore.exe o cualquier otra aplicación con nombre opta por el nuevo comportamiento. De forma predeterminada, esto está habilitado para Internet Explorer y deshabilitado para otras aplicaciones.
Otros recursos
- Descripción del protocolo de enlace capa de sockets seguros (SSL) (
https://support.microsoft.com/kb/257591
) - Descripción del proceso de autenticación del servidor durante el protocolo de enlace SSL (
https://support.microsoft.com/kb/257587
) - Fijación de la Bestia
- Taming the Beast (Vulnerabilidad de seguridad del explorador contra SSL/TLS)
- EXTENSIONES DE ARCHIVO DE CERTIFICADO SSL
- Compatibilidad con protocolos SSL/TLS en Windows
- Solución de problemas relacionados con SSL con IIS
- PRB: no se pueden visitar sitios SSL después de habilitar la criptografía compatible con FIPS
- Los encabezados de host HTTP 1.1 no se admiten cuando se usa SSL (
https://support.microsoft.com/kb/187504
) - Configuración de encabezados de host SSL (IIS 6.0)