Erro "A cadeia de certificados foi emitida por uma autoridade que não é confiável" após a atualização de aplicativos SNAC

Resumo

Este artigo ajuda você a solucionar erros de confiança da cadeia de certificados que ocorrem ao atualizar aplicativos de banco de dados do SNAC (SQL Server Native Client 11.0) para o Microsoft OLE DB Driver 19 ou Microsoft ODBC Driver 18 para SQL Server.

Quando você atualiza do SNAC 11.0 para drivers mais recentes, seus aplicativos podem falhar ao se conectar ao SQL Server com erros de confiança da cadeia de certificados. Esse problema ocorre porque os drivers mais recentes habilitam a criptografia por padrão e exigem validação de certificado, enquanto o SNAC a desabilitou por padrão. Para corrigir o erro, provisione um certificado em que o cliente confia ou ajuste as Encryptconfigurações de conexão ou TrustServerCertificate , Use Encryption for Dataconforme descrito neste artigo.

Qual palavra-chave de criptografia se aplica ao driver e ao cliente

A palavra-chave que controla a criptografia depende do driver e de como seu aplicativo cria seu cadeia de conexão. Se você usar uma palavra-chave que o driver não reconhece, a conexão falhará com um erro de "palavra-chave sem suporte" em vez do erro de certificado.

Driver e método de conexão Palavra-chave de criptografia Palavra-chave de confiança do certificado
Driver OLE DB 19, cadeia de caracteres do provedor (IDBInitialize::Initialize) Encrypt TrustServerCertificate=yes ou no
OLE DB Driver 19, ADO ou cadeia de caracteres de inicialização (IDataInitialize) Use Encryption for Data Trust Server Certificate=true ou false
Driver ODBC 18, cadeia de conexão ou DSN Encrypt TrustServerCertificate=yes ou no
  • Driver OLE DB 19: Aceita Optional, Mandatory (padrão) e Strict. Para compatibilidade com versões anteriores, ele também aceita os valores da versão 18, onde no e false mapeia para Optional, e yes mapeia true para Mandatory.
  • Driver ODBC 18: Aceita no/optional (o padrão), strictyes/ e mandatory.
  • Cadeias de caracteres do provedor: Use TrustServerCertificate=yes ou TrustServerCertificate=no.
  • Cadeias de caracteres de inicialização e ADO: Use Trust Server Certificate=true ou Trust Server Certificate=false.
  • Modo estrito: Sempre valida o certificado do servidor e ignora a configuração de confiança do certificado.

Usar TrustServerCertificate=true em uma cadeia de caracteres do provedor pode retornar um erro de valor inválido.

Para obter as listas completas de palavras-chave, consulte Usando palavras-chave de cadeia de conexão com o Driver do OLE DB para SQL Server, Principais diferenças de versão no MSOLEDBSQL e Palavras-chave e atributos de DSN e da cadeia de conexão.

Erro de cadeia de certificados: causas e soluções para o OLE DB Driver 19 e o ODBC Driver 18

Selecione a guia do driver para o qual você atualizou. Cada guia mostra a mensagem de erro que você vê, por que ela ocorre e as soluções em ordem recomendada.

Depois de atualizar do SQL Server Native Client 11.0 (Provider=SQLNCLI11) para o Microsoft OLE DB Driver 19 para SQL Server, as tentativas de conexão podem falhar com a seguinte mensagem de erro:

[Microsoft OLE DB Driver 19 para SQL Server]: o cliente não consegue estabelecer conexão

[Microsoft OLE DB Driver 19 para SQL Server]: Provedor SSL: a cadeia de certificados foi emitida por uma autoridade que não é confiável.

Causa do erro de confiança da cadeia de certificados ao atualizar para o Microsoft OLE DB Driver 19

Esse erro indica que o computador cliente não pode verificar a autenticidade do certificado do SQL Server porque ele foi emitido por uma AC (autoridade de certificação) em que o cliente não confia.

Esses erros ocorrerão se ambas as seguintes condições forem verdadeiras:

  • A configuração de Forçar criptografia para a instância do SQL Server está definida como Não.

  • A cadeia de conexão do cliente não especifica explicitamente um valor para a propriedade de criptografia ou a opção Criptografia não foi definida ou atualizada explicitamente no DSN.

O erro ocorre devido a uma alteração no comportamento padrão dos drivers cliente. As versões mais antigas dos drivers cliente pressupõem que a criptografia de dados é OFF por padrão. Os novos drivers pressupõem que essa configuração seja ON por padrão. Como a criptografia de dados é ON, o driver tenta validar o certificado do servidor e falha.

Soluções para erro de confiança da cadeia de certificados ao atualizar para o Microsoft OLE DB Driver 19

Provisione um certificado TLS na instância SQL Server de uma autoridade de certificação em que o cliente confia. Verifique se o servidor fornece todos os certificados intermediários necessários para que o cliente possa montar a cadeia até uma AC raiz confiável. Essa abordagem resolve o erro mantendo a criptografia e a validação de certificado habilitadas. Para obter mais informações, confira Configurar o Mecanismo de Banco de Dados do SQL Server para criptografia de conexões.

Confiar no certificado do servidor sem validação

Se você não puder provisionar um certificado verificável imediatamente, diga ao driver para ignorar a validação do certificado. A palavra-chave usada depende de como seu aplicativo cria o cadeia de conexão:

  • Em uma cadeia de caracteres do provedor, adicione TrustServerCertificate=yes.
  • Em uma string de inicialização ou em ADO, adicione Trust Server Certificate=true.

Essa configuração não ativa a criptografia sozinha. Ele instrui o driver a ignorar a validação do certificado quando a conexão é criptografada, o que deixa a conexão vulnerável a ataques de adversário no meio. Use-o apenas como uma medida temporária. No Strict modo de criptografia, o driver ignora essa configuração e sempre valida o certificado.

Observação

Atualmente, o MSOLEDBSQL19 impede a criação de servidores vinculados sem criptografia e um certificado confiável (um certificado autoassinado é insuficiente). Se você precisar de servidores vinculados, use a versão com suporte existente do MSOLEDBSQL.

Definir a palavra-chave de criptografia como Opcional

Altere a configuração de criptografia para que o driver não exija um certificado validado. A palavra-chave usada depende de como seu aplicativo cria o cadeia de conexão:

  • Em uma cadeia de caracteres do provedor, defina Encrypt=Optional.
  • Em uma cadeia de caracteres de inicialização ou ADO, defina Use Encryption for Data=Optional.

O valor padrão no Driver 19 do OLE DB é Mandatory. Se a cadeia de conexão já especificar Mandatory, yes ou true, altere o valor para Optional. Se o cadeia de conexão não especificar um valor, adicione a palavra-chave. Essa alteração restaura o comportamento de criptografia da versão 18 e reduz a segurança da conexão.

Para obter mais informações, consulte Criptografia e validação de certificado no OLE DB.

Usar o Driver 18.x do OLE DB como medida temporária

Microsoft Driver do OLE DB para SQL Server 18.x não habilita a criptografia por padrão, portanto, ela não é afetada por essa alteração. Trate essa opção como temporária e planeje sua mudança para o Driver 19 do OLE DB. Você pode baixar o driver em Notas de versão do Microsoft Driver do OLE DB para SQL Server.