Erro "O certificado recebido do servidor remoto foi emitido por uma autoridade de certificação não confiável" quando você se conecta ao SQL Server

Versão original do produto: SQL Server
Número original do KB: 2007728

Resumo

Este artigo ajuda você a resolver o erro "O certificado recebido do servidor remoto foi emitido por uma autoridade de certificação não confiável" que ocorre quando um cliente faz uma conexão TLS (criptografada) com SQL Server. O erro significa que o cliente não pode validar o certificado que a instância SQL Server apresenta durante o handshake do TLS, geralmente porque a AC (autoridade de certificação) emissora não está no repositório Autoridades de Certificação Raiz Confiáveis do cliente ou porque SQL Server usa um certificado autoassinado.

Você resolve o erro instalando o certificado da autoridade certificadora emissora no computador cliente, confiando no certificado do servidor sem validação (a configuração Trust Server Certificate) ou alterando a configuração de criptografia no cliente ou no servidor. Versões recentes de vários drivers e ferramentas de cliente alteraram seus padrões para exigir criptografia, portanto, você pode ver esse erro após uma atualização de driver ou ferramenta, mesmo que nada tenha sido alterado no servidor.

Sintomas

Ao se conectar ao SQL Server, você pode receber a seguinte mensagem de erro:

Uma conexão com o servidor foi estabelecida com êxito, mas ocorreu um erro durante o processo de logon. (provedor: Provedor SSL, erro: 0 – A cadeia de certificados foi emitida por uma autoridade que não é confiável.) (Provedor de dados .Net SqlClient)

Além disso, a seguinte mensagem de erro é registrada no log de eventos do sistema de Windows:

Log Name:      System  
Source:        Schannel  
Date:          10/13/2020 3:03:31 PM  
Event ID:      36882  
Task Category: None  
Level:         Error  
Keywords:  
User:        USERNAME  
Computer:     COMPUTERNAME  
Description:  
The certificate received from the remote server was issued by an untrusted certificate authority. Because of this, none of the data contained in the certificate can be validated. The TLS connection request has failed. The attached data contains the server certificate.

Motivo

Esse erro ocorre quando você faz uma conexão criptografada com SQL Server usando um certificado que o cliente não pode verificar. Esse comportamento ocorre nos seguintes cenários:

Cenário Criptografia no servidor Criptografia do lado do cliente Tipo de certificado Autoridade de emissão de certificados presente no repositório de autoridades de certificação raiz confiáveis
1 Sim No Um certificado de uma fonte em que o cliente não confia (a autoridade emissora não está listada nas Autoridades de Certificação Raiz Confiáveis no computador cliente) No
2 No Sim Um certificado autoassinado que SQL Server gera Não. Certificados autoassinados não aparecem neste repositório.

Quando um cliente estabelece uma conexão criptografada com o SQL Server, o Secure Channel (Schannel) cria a lista de autoridades de certificação confiáveis ao pesquisar no repositório de Autoridades de Certificação Raiz Confiáveis do computador local. Durante o handshake TLS, o servidor envia seu certificado de chave pública ao cliente. O emissor de um certificado de chave pública é chamado de autoridade de certificação (AC). O cliente deve confirmar se confia na AC, o que faz conhecendo as chaves públicas de CAs confiáveis com antecedência. Quando o Schannel detecta um certificado emitido por uma autoridade de certificação não confiável, como nos dois cenários anteriores, você obtém a mensagem de erro listada na seção Sintomas .

Se nenhum certificado adequado for configurado ou detectado, o Mecanismo de Banco de Dados gerará um certificado de fallback autoassinado durante a inicialização. Ele usa esse certificado para criptografar as credenciais de logon e, quando a criptografia do lado do servidor ou do lado do cliente está habilitada, toda a conexão. Nenhum cliente confia em um certificado autoassinado por padrão, razão pela qual esse erro pode ocorrer em uma instalação padrão de SQL Server, mesmo quando o cliente e o servidor são executados no mesmo computador. Para obter mais informações, consulte Criptografia de pacote de logon versus criptografia de pacote de dados.

Por que esse erro é exibido após uma atualização do driver ou da ferramenta

O driver cliente e as versões da ferramenta na tabela a seguir alteraram seus padrões para exigir criptografia. Depois de atualizar para uma dessas versões, o cliente criptografa a conexão e valida o certificado do servidor mesmo que a configuração do servidor não tenha sido alterada. As versões anteriores não exigiam criptografia por padrão, portanto, o certificado não foi validado, a menos que você solicitasse criptografia explicitamente.

Driver de cliente ou ferramenta Versão Comportamento de criptografia padrão
Microsoft Driver do OLE DB para SQL Server (MSOLEDBSQL19) 19 versões posteriores Encrypt o padrão é Mandatory
Driver ODBC da Microsoft para SQL Server 18 versões posteriores Encrypt tem como padrão Mandatory
Microsoft.Data.SqlClient 4.0 e versões posteriores Encrypt o padrão é True
SQL Server Management Studio (SSMS) 20 versões posteriores Criptografia o padrão é Obrigatória

Se você vir esse erro imediatamente após migrar um aplicativo do SQL Server Native Client 11.0 (SNAC) para Microsoft OLE DB Driver 19 ou Microsoft ODBC Driver 18, consulte Cadeia de certificados não confiável após a atualização do driver.

O SNAC não é fornecido com SQL Server 2022 (16.x) e versões posteriores ou com o SSMS 19 e versões posteriores, e não é recomendado para o novo desenvolvimento. Use o Microsoft Driver do OLE DB para SQL Server, o Microsoft ODBC Driver for SQL Server ou Microsoft.Data.SqlClient em vez disso. Para obter mais informações, consulte políticas de suporte para SQL Server Native Client.

Solução

Se você usar intencionalmente um certificado de uma autoridade não estruturada ou de um certificado autoassinado para criptografar conexões para SQL Server, use uma das seguintes opções:

Opção 1: instalar a autoridade de certificação no computador cliente

Para o cenário 1, adicione a autoridade de certificação ao repositório Autoridades de Certificação Raiz Confiáveis no computador cliente que inicia a conexão criptografada. Para fazer isso, conclua os procedimentos Etapa 1: Exportar o certificado do servidor para um arquivo e Etapa 2: Instalar a autoridade de certificação (AC) raiz no computador cliente nessa ordem.

Etapa 1: Exportar o certificado do servidor para um arquivo

No computador SQL Server, exporte o certificado que SQL Server usa para um arquivo. As etapas a seguir usam caCert.cer como um nome de arquivo de exemplo. Esse arquivo não existe até que você o crie neste procedimento. Você escolhe o nome e o local.

  1. Selecione Iniciar, insira mmc e, em seguida, abra Console de Gerenciamento Microsoft.

  2. Selecione Arquivo>Adicionar/Remover Snap-ins.

  3. Na lista Snap-ins disponíveis, selecione Certificados e depois selecione Adicionar.

  4. Selecione Conta de computador, selecione Avançar, selecione Computador local: (o computador em que este console está em execução)e, em seguida, selecione Concluir.

    Observação

    Os certificados do SQL Server são instalados no repositório de certificados Local Computer\Personal. Se você selecionar Minha conta de usuário, o MMC abrirá um repositório de certificados diferente e o certificado SQL Server não será exibido.

  5. Selecione OK para fechar a caixa de diálogo Adicionar ou Remover Snap-ins .

  6. No painel esquerdo, expanda Certificados (Computador Local), expanda Pessoal e selecione Certificados.

  7. Clique com o botão direito do mouse no certificado que SQL Server usa e selecione Todas as Tarefas>Exportar.

    Dica

    Para identificar o certificado que o SQL Server usa, abra o SQL Server Configuration Manager, expanda Configuração de Rede do SQL Server, clique com o botão direito do mouse em Protocolos para <nome_da_instância>, selecione Propriedades e, em seguida, selecione a guia Certificado. Se o log de erros do SQL Server contiver a entrada "Um certificado gerado automaticamente foi carregado com êxito para criptografia", o SQL Server usa um certificado de fallback gerado automaticamente. Você não pode exportar esse certificado, portanto, use a Opção 2 ou a Opção 3 .

  8. Selecione Avançar para passar pela página De boas-vindas do Assistente de Exportação de Certificados.

  9. Confirme que Não, não exportar a chave privada esteja selecionada e selecione Avançar.

  10. Verifique se o X.509 binário codificado em DER (. CER) ou X.509 codificado em Base 64 (. CER) está selecionado e, em seguida, selecione Avançar.

  11. Insira um nome de arquivo de exportação, como caCert.cer.

  12. Selecione Avançar e, em seguida, selecione Concluir para exportar o certificado.

  13. Copie o arquivo de .cer exportado para o computador cliente.

Etapa 2: Instalar a AC (autoridade raiz de certificação) no computador cliente

  1. No computador cliente, abra o MMC, selecione Arquivo>Adicionar/Remover Snap-in, selecione Certificados na lista de snap-ins disponíveis e, em seguida, selecione Adicionar.

  2. Na caixa de diálogo snap-in Certificados, selecione Conta de computador e depois selecione Avançar.

  3. No painel Selecionar Computador, selecione Computador local: (o computador em que este console está sendo executado) e selecione Concluir.

  4. Selecione OK para fechar a caixa de diálogo Adicionar ou Remover Snap-ins .

  5. No painel esquerdo do MMC, expanda o nó Certificados (Computador Local).

  6. Expanda o nó Autoridades de Certificação Raiz Confiáveis, clique com o botão direito do mouse na subpasta Certificados, selecione Todas as Tarefas e, em seguida, selecione Importar.

  7. No Assistente de Importação de Certificados, na página Boas-vindas , selecione Avançar.

  8. Na página Arquivo a Importar , selecione Procurar.

  9. Navegue até o local do arquivo de certificado caCert.cer , selecione o arquivo e, em seguida, selecione Abrir.

  10. Na página Arquivo a ser importado , selecione Avançar.

  11. Na página Repositório de Certificados, aceite a seleção padrão e selecione Avançar.

  12. Na página Concluindo o Assistente de Importação de Certificado , selecione Concluir.

Opção 2: confiar no certificado do servidor sem validá-lo

Para os cenários 1 e 2, defina a configuração de Certificado do Servidor confiável em seu aplicativo cliente. Essa configuração mantém a conexão criptografada, mas ignora a validação do certificado. O nome da palavra-chave e os valores aceitos dependem da biblioteca de clientes:

Biblioteca do cliente Palavras-chave da cadeia de conexão
Microsoft.Data.SqlClient TrustServerCertificate=True
Driver ODBC da Microsoft para SQL Server TrustServerCertificate=yes
Microsoft OLE DB Driver para SQL Server (cadeia de conexão do provedor) TrustServerCertificate=yes
Microsoft Driver do OLE DB para SQL Server (ADO ou IDataInitialize) Trust Server Certificate=true
Microsoft JDBC Driver para SQL Server trustServerCertificate=true

Se você se conectar usando SQL Server Management Studio (SSMS) 20 ou uma versão posterior, marque a caixa de seleção de certificado do servidor confiável na página Logon da caixa de diálogo Conectar ao Servidor. Nas versões anteriores do SSMS, selecione Opções na janela Conectar ao Servidor , selecione a guia Propriedades da Conexão e, em seguida, selecione Certificado do servidor de confiança.

Para obter mais informações sobre como definir essa configuração para sua biblioteca de clientes, consulte os seguintes artigos:

Observação

A configuração Confiar no certificado do servidor não desativa a criptografia. A conexão permanece criptografada, mas o cliente não verifica a identidade do servidor.

Caution

Conexões criptografadas que usam um certificado autoassinado não fornecem segurança forte. Eles são suscetíveis a ataques de man-in-the-middle. Não confie no TLS com certificados autoassinados em um ambiente de produção ou em servidores conectados à Internet.

Opção 3: alterar a configuração de criptografia

Se a configuração descrita pelas seções anteriores não for intencional, use uma das seguintes opções para resolver esse problema:

  • Configure o Mecanismo de Banco de Dados para usar um certificado de uma autoridade confiável. Essa opção é a correção de longo prazo mais segura porque os clientes validam o certificado sem nenhuma configuração extra. Para obter mais informações, consulte Habilitar conexões criptografadas com o Mecanismo de Banco de Dados e Requisitos de certificado para o SQL Server.

  • Se a criptografia não for necessária:

    • Desative a criptografia no aplicativo cliente. Defina Encrypt=Optional para uma cadeia de conexão de provedor OLE DB, Use Encryption for Data=Optional para OLE DB ADO ou IDataInitialize, Encrypt=no para ODBC e Encrypt=False para Microsoft.Data.SqlClient ou o Driver JDBC da Microsoft. No SSMS 20 e versões posteriores, defina Criptografia como Opcional na página Logon da caixa de diálogo Conectar ao Servidor .

    • Desative a criptografia do lado do servidor usando SQL Server Configuration Manager. Expanda SQL Server Configuração de Rede, clique com o botão direito do mouse em Protocolos para <o nome> da instância, selecione Propriedades, selecione a guia Sinalizadores, defina Force Encryption como Não e reinicie o serviço SQL Server. Para obter mais informações, consulte Protocolos para Propriedades do MSSQLSERVER (aba Sinalizadores).

      Warning

      Se você desativar a criptografia, as credenciais e os dados viajarão pela rede desprotegida. Desative a criptografia apenas em redes confiáveis e isoladas.