Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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:
- Para manter a validação do certificado e corrigir permanentemente o problema de confiança, use a opção 1: instalar a autoridade de certificação no computador cliente.
- Para se conectar imediatamente sem instalar um certificado, use a Opção 2: confiar no certificado do servidor sem validá-lo. Essa opção é a correção mais rápida e é a opção que a maioria dos usuários precisa quando SQL Server usa seu certificado autoassinado padrão.
- Para parar de exigir criptografia ou substituir o certificado por um de uma autoridade confiável, use a opção 3: alterar a configuração de criptografia.
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.
Selecione Iniciar, insira mmc e, em seguida, abra Console de Gerenciamento Microsoft.
Selecione Arquivo>Adicionar/Remover Snap-ins.
Na lista Snap-ins disponíveis, selecione Certificados e depois selecione Adicionar.
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.
Selecione OK para fechar a caixa de diálogo Adicionar ou Remover Snap-ins .
No painel esquerdo, expanda Certificados (Computador Local), expanda Pessoal e selecione Certificados.
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 .
Selecione Avançar para passar pela página De boas-vindas do Assistente de Exportação de Certificados.
Confirme que Não, não exportar a chave privada esteja selecionada e selecione Avançar.
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.
Insira um nome de arquivo de exportação, como caCert.cer.
Selecione Avançar e, em seguida, selecione Concluir para exportar o certificado.
Copie o arquivo de .cer exportado para o computador cliente.
Etapa 2: Instalar a AC (autoridade raiz de certificação) no computador cliente
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.
Na caixa de diálogo snap-in Certificados, selecione Conta de computador e depois selecione Avançar.
No painel Selecionar Computador, selecione Computador local: (o computador em que este console está sendo executado) e selecione Concluir.
Selecione OK para fechar a caixa de diálogo Adicionar ou Remover Snap-ins .
No painel esquerdo do MMC, expanda o nó Certificados (Computador Local).
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.
No Assistente de Importação de Certificados, na página Boas-vindas , selecione Avançar.
Na página Arquivo a Importar , selecione Procurar.
Navegue até o local do arquivo de certificado caCert.cer , selecione o arquivo e, em seguida, selecione Abrir.
Na página Arquivo a ser importado , selecione Avançar.
Na página Repositório de Certificados, aceite a seleção padrão e selecione Avançar.
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:
- Criptografia e validação de certificados na Microsoft. Data.SqlClient
- Criptografia e validação de certificado no Driver do OLE DB para SQL Server
- Palavras-chave e atributos de DSN e de cadeia de conexão para o Driver ODBC para SQL Server
- Conectando-se com criptografia usando o Microsoft JDBC Driver for SQL Server
- Usar criptografia sem validação no SQL Server Native Client (cliente herdado)
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=Optionalpara uma cadeia de conexão de provedor OLE DB,Use Encryption for Data=Optionalpara OLE DB ADO ouIDataInitialize,Encrypt=nopara ODBC eEncrypt=FalseparaMicrosoft.Data.SqlClientou 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.