SQL Server falha ao iniciar quando o servidor está configurado para usar o SSL

Este artigo fornece uma resolução para o erro 17182 (falha na inicialização TDSSNIClient com 0xd de erro, status 0x38 de código) que ocorre quando o servidor está configurado para usar o SSL.

Aplica-se ao: SQL Server
Número de KB original: 2023869

Sintomas

Considere o seguinte cenário:

  • Você tem uma instância de SQL Server 2005 ou uma versão posterior hospedada em um sistema que está executando o Windows Server 2008 ou uma versão posterior do sistema operacional.

  • Você configurou a criptografia SSL para seu SQL Server inserindo manualmente a impressão digital de um certificado no valor certificado na seguinte chave do registro:

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

Nesse cenário, seu SQL Server pode não iniciar e as seguintes mensagens são registradas no SQL Server Errorlog:

<Erro do servidor datetime> : 17182, severidade: 16, Estado: 1.
<A inicialização TDSSNIClient do Servidor datetime> falhou com 0xd de erro, status 0x38 de código.
<Erro do servidor datetime> : 17182, severidade: 16, Estado: 1. <Falha na inicialização do TDSSNIClient do Servidor datetime> com 0xd de erro, status 0x1 de código.
<Erro do servidor datetime> : 17826, severidade: 18, Estado: 3.
<O Servidor datetime> não pôde iniciar a biblioteca de rede devido a um erro interno na biblioteca de rede. Para determinar a causa, examine os erros imediatamente anteriores a este no log de erros.
<Erro do servidor datetime> : 17120, Severidade: 16, Estado: 1.
<O servidor datetime> SQL Server não pôde gerar thread FRunCM. Verifique o log de erros SQL Server e os logs de eventos do Windows para obter informações sobre possíveis problemas relacionados.

Motivo

Uma causa raiz comum para esses sintomas é um caractere invisível que pode ter sido inadvertidamente adicionado ao valor de impressão digital do certificado, quando ele é copiado do controle de edição rica do Certificados no MMC.

Resolução

Você pode usar uma das seguintes resoluções:

  • Evite copiar caracteres principais do snap-in Certificados no MMC, quando você copiar o valor da impressão digital de um certificado.

  • Use a ferramenta Certutil em vez do snap-in de certificados no MMC para exportar o certificado para um arquivo de texto e, em seguida, copie o valor da impressão digital do certificado necessário do arquivo de texto. O uso é mostrado abaixo:

    Para exibir o conteúdo do repositório de certificados do Usuário Atual do computador, digite o seguinte no prompt de comando:

    certutil -store -user my

    Para exibir o conteúdo do repositório de certificados do computador local, digite o seguinte no prompt de comando:

    certutil -store my

Você pode direcionar a saída do comando acima para um arquivo de texto usando o seguinte em um prompt de comando administrativo nos sistemas operacionais baseados em Vista:

certutil -store my > cert.txt

A impressão digital pode estar localizada na linha que começa com Cert Hash(sha1)

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

Em seguida, você pode copiar esse valor (sem espaços - para o exemplo acima ele será e7024b42c404fd448cec21f191765cb7c3ad1d55) para o valor certificado na seguinte chave do registro:

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

Mais informações

Um código status 0x38 na mensagem de erro 17182 significa que SQL Server sofreu um erro durante a inicialização do SSL. Consulte Protocolos SQL para obter mais detalhes.

O código de retorno 0xd denota o erro do sistema operacional 0xd (13) que se traduz como "Os dados são inválidos" O erro acima 17182 "A inicialização TDSSNIClient falhou com 0xd de erro, status código 0x38" ocorre especificamente devido ao fato de que a cadeia de caracteres no valor do Certificado não pode ser convertida corretamente de volta em uma impressão digital válida do certificado.

Esse problema de GUI com o snap-in certificados não ocorre em versões mais antigas do Windows (por exemplo, Windows XP, Windows Server 2003), pois eles não usam um controle de edição avançado no snap-in Certificados

Para marcar se você está executando o problema documentado neste artigo, você pode usar o seguinte procedimento:

  1. Abra regedit e navegue até a seguinte chave do registro e exporte a chave para SSLKey.reg arquivo:

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

  2. Abra o arquivo SSLKey.reg da Etapa 1 usando o Bloco de Notas e usando a caixa de diálogo Salvar como no menu Arquivo , clique em ANSI na lista codificação e clique em Salvar.

  3. Se você receber o aviso abaixo, vá para a Etapa 3 clicando em OK.

    Aviso

    Este arquivo contém caracteres no formato Unicode que serão perdidos se você salvar esse arquivo como um arquivo de texto codificado ansi. Para manter as informações do Unicode, clique em Cancelar abaixo e selecione uma das opções Unicode na lista suspensa codificação. Continuar?

  4. Feche o arquivo SSLKey.reg e reabra-o usando o Bloco de Notas.

  5. Se agora você vir uma marca de perguntas ou qualquer outro caractere inválido na impressão digital do certificado, é uma indicação de que você provavelmente está executando o problema documentado neste artigo:

    Uma entrada de exemplo pode ser semelhante à seguinte:

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