O SQL Server falha ao iniciar quando o servidor está configurado para usar SSL
Este artigo fornece uma resolução para o erro 17182 (falha na inicialização do TDSSNIClient com 0xd de erro, código de status 0x38) que ocorre quando o servidor é configurado para usar SSL.
Aplica-se a: SQL Server
Número original do KB: 2023869
Sintomas
Considere o cenário a seguir.
Você tem uma instância do 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 o 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, o SQL Server pode falhar ao iniciar e as seguintes mensagens são registradas no log de erros do SQL Server:
<Erro do servidor de data e hora> : 17182, Gravidade: 16, Estado: 1.
<Falha na inicialização do Datetime> Server TDSSNIClient com o erro 0xd, código de status 0x38.
<Erro do servidor de data e hora> : 17182, Gravidade: 16, Estado: 1. <Falha na inicialização do Datetime> Server TDSSNIClient com 0xd de erro, código de status 0x1.
<Erro do servidor de data e hora> : 17826, Gravidade: 18, Estado: 3.
<Servidor de data e hora> Não foi possível iniciar a biblioteca de rede devido a um erro interno na biblioteca de rede. Para determinar a causa, consulte os erros imediatamente anteriores a esse no log de erros.
<Erro do servidor de data e hora> : 17120, Gravidade: 16, Estado: 1.
<Servidor de data e hora> O SQL Server não pôde gerar o thread FRunCM. Verifique o log de erros do SQL Server e os logs de eventos do Windows para obter informações sobre possíveis problemas relacionados.
Causa
Uma causa raiz comum para esses sintomas é um caractere invisível que pode ter sido adicionado inadvertidamente ao valor de impressão digital do certificado, quando ele é copiado do controle de edição avançada do snap-in Certificados no MMC.
Solução
Você pode usar uma das seguintes resoluções:
Evite copiar caracteres à esquerda do snap-in Certificados no MMC, ao copiar o valor de 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 copie o valor de 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 em sistemas operacionais baseados no Vista:
certutil -store my > cert.txt
A impressão digital pode ser 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, será e7024b42c404fd448cec21f191765cb7c3ad1d55) para o valor do certificado na seguinte chave do Registro:
HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib
Mais informações
Um código de status 0x38 na mensagem de erro 17182 significa que o SQL Server apresentou um erro durante a inicialização do SSL. Consulte Protocolos SQL para obter mais detalhes.
O código de retorno 0xd indica o erro do sistema operacional 0xd (13) que se traduz em "Os dados são inválidos" O erro 17182 acima "Falha na inicialização do TDSSNIClient com o erro 0xd, código de status 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 elas não usam um controle de edição avançado no snap-in Certificados
Para verificar se você está enfrentando o problema documentado neste artigo, use o seguinte procedimento:
Abra o regedit e navegue até a seguinte chave de registro e exporte a chave para SSLKey.reg arquivo:
HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib
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.
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 este arquivo como um arquivo de texto codificado ANSI. Para manter as informações Unicode, clique em Cancelar abaixo e selecione uma das opções Unicode na lista suspensa Codificação. Continuar?
Feche o arquivo SSLKey.reg e abra-o novamente usando o Bloco de Notas.
Se agora você vir um ponto de interrogação ou qualquer outro caractere inválido na impressão digital do seu certificado, é uma indicação de que você provavelmente está enfrentando 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]
"Certificado"="?b009d02038431da332f095b4ea6a126f4f5c7d18"