“A cadeia de certificados foi emitida por uma autoridade que não é confiável” ao conectar o banco de dados na função de VM no site do Azure

191

Estou com um erro ao conectar o MY DB que está na função de VM (eu tenho a função de VM da SQL) no site do Azure. A função da VM e o site do Azure estão na zona oeste. Estou enfrentando o seguinte problema:

SqlException (0x80131904): Uma conexão foi estabelecida com êxito com o servidor, 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.)]

Consigo me conectar ao meu banco de dados usando o SSMS. A porta 1433 está aberta na minha função de VM. O que há de errado com minha conexão?

ZafarYousafi
fonte

Respostas:

367

Você provavelmente não possui um certificado assinado pela CA instalado no armazenamento raiz confiável da sua VM da SQL.

Se você possui Encrypt=Truea cadeia de conexão, defina-a como desativada (não recomendado) ou adicione o seguinte na cadeia de conexão:

TrustServerCertificate=True

O SQL Server criará um certificado autoassinado se você não instalar um para uso, mas ele não será confiável pelo chamador, pois não é assinado pela CA, a menos que você diga à cadeia de conexão para confiar em qualquer certificado de servidor. padrão.

A longo prazo, eu recomendaria aproveitar o Let's Encrypt para obter um certificado assinado de uma CA confiável e conhecida gratuitamente e instalá-lo na VM. Não se esqueça de configurá-lo para atualizar automaticamente. Você pode ler mais sobre este tópico nos manuais online do SQL Server, sob o tópico "Hierarquia de criptografia" e "Usando criptografia sem validação".

Thiago Silva
fonte
1
desculpe, TTrusted_Connection = False foi definido na cadeia de conexão. defini-lo como verdadeiro funciona para mim. Thanx qualquer maneira
ZafarYousafi
1
@ZafarYousafi, você deve marcar esta resposta como correta.
Termato 21/07
5
Não é bom aconselhar a configuração TrustServerCertificatepara true- isso desabilita a verificação de certificado. Que há melhor do que apenas a criação Encryptde false!
Matt Thomas
5
O conselho dado "TrustServerCertificate = True" nesta resposta pode fazer o problema desaparecer, mas é um péssimo conselho. Corrija a causa, NÃO os sintomas. A outra parte da resposta que sugere a instalação de um certificado assinado pela CA é o caminho a seguir.
Mitch Wheat
Nas versões mais recentes do SSMS, você encontra uma pequena opção chamada "Trust server certificate" na guia "Connection Properties". A verificação desse garoto tem o mesmo efeito que os comandos listados acima.
gwynbleidd
87

Se você estiver usando o SQL Management Studio, vá para as propriedades da conexão e clique em "Trust server certificated" Se você estiver usando o SQL Management Studio, vá para as propriedades da conexão e clique em "Trust server certificated"

ct.tan
fonte
18
Não é um mau conselho por si só. Eu diria que você pode usá-lo quando precisar se conectar a um servidor de desenvolvimento e fazer seu trabalho, como codificação. Como desenvolvedor de software, luto constantemente com os DevOps, que não têm tempo para consertar as coisas rapidamente e não posso me dar ao luxo de perder um tempo precioso dentro dos prazos. A ponderação da exposição dos dados ao desativar esta opção depende muito do seu ambiente, se for local ou remoto, como os administradores a configuram, restrições de IP e pode ser facilmente mitigado com outras soluções alternativas. Você não pode dizer que é um péssimo conselho sem ter um pouco de informações sobre sua infraestrutura.
OrizG
Você acabou de salvar meu dia. Obrigado @ ct.tan #
Milinda Wickramasinghe
@OrizG Eu tenho um SQL Server instalado em uma máquina local e o uso para projetos pessoais. No momento, não quero gastar um centavo com isso, então consegui um host gratuito e tentei configurar o servidor de forma a assinar os certificados e trocá-los entre o servidor e os clientes. estará usando para acessá-lo. No entanto, por causa do host gratuito, não consegui fazer isso com o Let's Encrypt. Quais são exatamente as desvantagens desta solução, em comparação com a troca correta de certificados, com certificados assinados pela CA confiáveis?
ccoutinho 20/02
31

Se você vir essa mensagem de erro ao tentar se conectar usando o SSMS, adicione TrustServerCertificate=Trueaos Parâmetros adicionais de conexão.

vmanne
fonte
23
Mitch, você fez o mesmo comentário em três respostas a esta pergunta. Pode ser útil para outros leitores se você forneceu algumas informações ou links substanciais sobre o motivo pelo qual esse é "um conselho muito, muito ruim".
Shoeless
@ Shohoeless Vários comentários sobre a resposta aceita explicam.
Tom Blodget
4

Se você estiver tentando acessá-lo por meio do Data Connections no Visual Studio 2015 e obtendo o erro acima, vá para Avançado e defina o TrustServerCertificate=True erro como desaparecimento.

Bhavjot
fonte
9
Não é um mau conselho por si só. Eu diria que você pode usá-lo quando precisar se conectar a um servidor de desenvolvimento e fazer seu trabalho, como codificação. Como desenvolvedor de software, luto constantemente com os DevOps, que não têm tempo para consertar as coisas rapidamente e não posso me dar ao luxo de perder um tempo precioso dentro dos prazos. A ponderação da exposição dos dados ao desativar esta opção depende muito do seu ambiente, se for local ou remoto, como os administradores a configuram, restrições de IP e pode ser facilmente mitigado com outras soluções alternativas. Você não pode dizer que é um péssimo conselho sem ter um pouco de informações sobre sua infraestrutura.
OrizG
1

Foi atingido pelo mesmo problema ao acessar o SQLServer no IIS. Adicionar TrustServerCertificate = True não ajudou.

Pode ver um comentário nos documentos da MS: Verifique se a conta do serviço SQLServer tem acesso ao certificado TLS que você está usando. (Serviço NT \ MSSQLSERVER)

Abra o armazenamento pessoal e clique com o botão direito do mouse no certificado -> gerenciar chaves privadas -> adicione a conta de serviço SQL e dê controle total.

Reinicie o serviço SQL. Funcionou.

Kaavya T
fonte
0

O mesmo pode ser alcançado no próprio cliente ssms. Basta abrir os ssms, inserir o nome do servidor e, em seguida, nas opções sob o cabeçalho de propriedades da conexão, verifique se Trust server certificate está marcado.

Manas
fonte
0

Recebi esse problema ao importar dados do Excel para o SQLDatabase através do SSMS. A solução é configurar TrustServerCertificate = Truena seção de segurança

Kanna Reddy
fonte
0

Encontrei este erro ao tentar executar o criador de perfil, mesmo que minha conexão tivesse o certificado do servidor Trust verificado e eu o adicionei TrustServerCertificate=Truena Seção Avançada. Mudei para uma instância do SSMS em execução como administrador e o criador de perfil começou sem problemas. (Eu já havia descoberto que quando minhas conexões até com o local demoravam muito tempo para se conectar, a execução como administrador ajudava).

Conta
fonte