SQL Server no se puede iniciar con cuando el servidor está configurado para usar SSL

En este artículo se proporciona una resolución del error 17182 (error de inicialización de TDSSNIClient con 0xd de error, código de estado 0x38) que se produce cuando el servidor está configurado para usar SSL.

Se aplica a: SQL Server
Número de KB original: 2023869

Síntomas

Imagine la siguiente situación:

  • Tiene una instancia de SQL Server 2005 o una versión posterior hospedada en un sistema que ejecuta Windows Server 2008 o una versión posterior del sistema operativo.

  • Ha configurado el cifrado SSL para el SQL Server escribiendo manualmente la huella digital de un certificado en el valor Certificado en la siguiente clave del Registro:

    HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib

En este escenario, es posible que el SQL Server no se inicie y que los siguientes mensajes se registren en el SQL Server Errorlog:

<Error del servidor datetime> : 17182, gravedad: 16, estado: 1.
<Error en la inicialización de TDSSNIClient de Datetime> Server con 0xd de error, código de estado 0x38.
<Error del servidor datetime> : 17182, gravedad: 16, estado: 1. <Error de inicialización de TDSSNIClient del servidor datetime> con 0xd de error, código de estado 0x1.
<Error del servidor datetime> : 17826, gravedad: 18, estado: 3.
<Datetime> Server No se pudo iniciar la biblioteca de red debido a un error interno en la biblioteca de red. Para determinar la causa, revise los errores inmediatamente anteriores a este en el registro de errores.
<Error del servidor datetime> : 17120, gravedad: 16, estado: 1.
<Datetime> Server SQL Server no pudo generar el subproceso FRunCM. Compruebe el registro de errores de SQL Server y los registros de eventos de Windows para obtener información sobre posibles problemas relacionados.

Causa

Una causa principal común de estos síntomas es un carácter invisible que se puede haber agregado involuntariamente al valor de huella digital del certificado, cuando se copia del control de edición enriquecida del complemento Certificados en MMC.

Solución

Puede usar cualquiera de las siguientes resoluciones:

  • Evite copiar los caracteres iniciales del complemento Certificados en MMC al copiar el valor de huella digital de un certificado.

  • Use la herramienta Certutil en lugar del complemento de certificados de MMC para exportar el certificado a un archivo de texto y, a continuación, copie el valor de huella digital del certificado necesario del archivo de texto. El uso se muestra a continuación:

    Para ver el contenido del almacén de certificados de usuario actual del equipo, escriba lo siguiente en el símbolo del sistema:

    certutil -store -user my

    Para ver el contenido del almacén de certificados de equipo local del equipo, escriba lo siguiente en el símbolo del sistema:

    certutil -store my

Puede dirigir la salida del comando anterior a un archivo de texto mediante lo siguiente en un símbolo del sistema administrativo en sistemas operativos basados en Vista:

certutil -store my > cert.txt

La huella digital se puede encontrar en la línea que comienza por Cert Hash(sha1)

Por ejemplo: Cert Hash(sha1): e7 02 4b 42 c4 04 fd 44 8c ec 21 f1 91 76 5c b7 c3 ad 1d 55

A continuación, puede copiar este valor (sin espacios; en el ejemplo anterior será e7024b42c404fd4448cec21f191765cb7c3ad1d55) en el valor Certificado en la siguiente clave del Registro:

HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib

Más información

Un código de estado 0x38 en el mensaje de error 17182 significa que SQL Server experimentado un error durante la inicialización de SSL. Consulte Protocolos SQL para obtener más detalles.

El código devuelto 0xd denota el error del sistema operativo 0xd (13) que se traduce en "Los datos no son válidos" El error anterior 17182 "Error de inicialización de TDSSNIClient con error 0xd, código de estado 0x38" se produce específicamente debido al hecho de que la cadena en Valor de certificado no se puede volver a convertir correctamente en una huella digital válida del certificado.

Este problema de GUI con el complemento Certificados no se produce en versiones anteriores de Windows (por ejemplo, Windows XP, Windows Server 2003), ya que no usan un control de edición enriquecido en el complemento Certificados.

Para comprobar si se está ejecutando el problema documentado en este artículo, puede usar el procedimiento siguiente:

  1. Abra regedit y vaya a la siguiente clave del Registro y exporte la clave a SSLKey.reg archivo:

    HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib

  2. Abra el archivo SSLKey.reg del paso 1 mediante el Bloc de notas y use el cuadro de diálogo Guardar como en el menú Archivo , haga clic en ANSI en la lista Codificación y, a continuación, haga clic en Guardar.

  3. Si recibe la advertencia siguiente, vaya al paso 3 haciendo clic en Aceptar.

    Advertencia

    Este archivo contiene caracteres en formato Unicode que se perderán si guarda este archivo como un archivo de texto codificado ANSI. Para mantener la información de Unicode, haga clic en Cancelar a continuación y, a continuación, seleccione una de las opciones Unicode de la lista desplegable Codificación. ¿Continuar?

  4. Cierre el archivo SSLKey.reg y vuelva a abrirlo mediante el Bloc de notas.

  5. Si ahora ve una marca de preguntas o cualquier otro carácter no válido en la huella digital del certificado, es una indicación de que probablemente se está ejecutando con el problema documentado en este artículo:

    Una entrada de ejemplo puede ser similar a la siguiente:

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer\SuperSocketNetLib]
    "Certificate"="?b009d02038431da332f095b4ea6a126f4f5c7d18"