Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Use a Segurança da Camada de Transporte (TLS) para criptografar o tráfego entre sua aplicação e o SQL Server. Mantenha a validação do certificado do servidor ativada para verificar a identidade do servidor. A criptografia sem validação de identidade não protege contra um adversário intermediário que se faz passar pelo servidor.
Microsoft.Data.SqlClient usa Encrypt=Mandatory e TrustServerCertificate=false por padrão.
Encrypt=true é sinônimo de Mandatory. Para uma conexão remota, solicite explicitamente essas configurações e provista um certificado de servidor que o cliente possa validar:
Server=tcp:<server>,1433;Database=<database>;Integrated Security=true;Encrypt=true;TrustServerCertificate=false;MultiSubnetFailover=true;
Substitua os marcadores e use um método de autenticação suportado pelo seu servidor e ambiente de aplicação. Para SQL do Azure ou banco de dados SQL no Microsoft Fabric, veja autenticação Microsoft Entra.
Escolha um modo de criptografia
Encrypt controla se o cliente precisa de criptografia. Um servidor também pode exigir criptografia. Esta tabela descreve o comportamento atual sem fixação de certificado:
| Configuração do cliente | Requisito de servidor | Validação de certificado | Resultado |
|---|---|---|---|
Encrypt=Optional ou false |
Não força criptografia. | Nenhuma, independentemente de TrustServerCertificate. |
Apenas os pacotes de login são criptografados. O tráfego subsequente não é criptografado. |
Encrypt=Optional;TrustServerCertificate=false |
Força a criptografia. | Cadeia de confiança, validade e nome do servidor. | Todo o tráfego é criptografado. Certificados inválidos falham na conexão. |
Encrypt=Optional;TrustServerCertificate=true |
Força a criptografia. | Ignorado. | Todo o tráfego é criptografado, mas a identidade do servidor não é verificada. |
Encrypt=Mandatory;TrustServerCertificate=false |
Qualquer uma das configurações. | Cadeia de confiança, validade e nome do servidor. | Todo o tráfego é criptografado. Certificados inválidos falham na conexão. |
Encrypt=Mandatory;TrustServerCertificate=true |
Qualquer uma das configurações. | Ignorado. | Todo o tráfego é criptografado, mas a identidade do servidor não é verificada. |
Encrypt=Strict |
Suporta Tabular Data Stream (TDS) 8.0. | Required.
TrustServerCertificate Não dá para contornar. |
O TLS começa antes das mensagens TDS. Um servidor não suportado ou certificado inválido falha na conexão. |
Mandatory Use para conexões criptografadas com servidores que não suportam TDS 8.0. Use Strict quando seu endpoint suporta TDS 8.0, incluindo SQL Server 2022 (16.x) e versões posteriores. TDS 8.0 suporta TLS 1.2 e TLS 1.3; não requer TLS 1.3. A versão negociada do TLS também depende da configuração do cliente, servidor e sistema operacional.
Optional Não é uma solução para erros de certificado. Pode deixar os dados da aplicação sem criptografia quando o servidor não precisa de criptografia.
Configure um certificado de servidor verificável
Para validação normal de certificados:
- Providencie um certificado que atenda aos requisitos do certificado do SQL Server.
- Inclua o nome que os clientes usam para se conectar no nome alternativo (SAN) do assunto do certificado.
- Faça com que a autoridade certificadora emissora e quaisquer certificados intermediários necessários sejam confiáveis em cada host cliente ou container.
- Configure o SQL Server para usar o certificado e mantenha
TrustServerCertificate=falsenos clientes. - Renovação do certificado de plano antes do vencimento, incluindo quaisquer alterações em nomes ou autoridades emissoras.
Um certificado de uma autoridade certificadora pública ou empresarial pode atender a esses requisitos. Um certificado empresarial não é automaticamente confiável dentro de um contêiner Linux ou em um computador desenvolvedor separado.
Conecte-se por um pseudônimo
Se a conexão usar um alias do Sistema de Nomes de Domínio (DNS) que não está no certificado, primeiro considere emitir um certificado que inclua o alias. Alternativamente, defina HostNameInCertificate para o nome esperado no certificado:
Server=tcp:sql-alias.contoso.com,1433;Database=<database>;Integrated Security=true;Encrypt=true;TrustServerCertificate=false;HostNameInCertificate=sql-server.contoso.com;MultiSubnetFailover=true;
HostNameInCertificate muda o nome que o SqlClient espera durante a validação do certificado. Ele não muda o destino da rede nem contorna a cadeia de confiança e as verificações de expiração. Deixe-o não definido quando o nome do servidor já corresponder ao do certificado.
Fixe um certificado de servidor específico
ServerCertificate fornece um arquivo de certificado local para comparação exata com o certificado do servidor. Os formatos compatíveis são Privacy-Enhanced Mail (PEM) e Regras de Codificação Diferenciada (DER), incluindo arquivos de certificado .cer. Use-o com Encrypt=Mandatory ou Encrypt=Strict, e mantenha TrustServerCertificate=false.
Server=tcp:<server>,1433;Database=<database>;Integrated Security=true;Encrypt=Strict;TrustServerCertificate=false;ServerCertificate=C:\certificates\sql-server.cer;MultiSubnetFailover=true;
Distribua o certificado esperado por um canal confiável e proteja o arquivo contra substituição. Uma correspondência exata do certificado é uma alternativa à validação normal da cadeia e do nome, não uma verificação adicional além disso. Os bytes do certificado devem corresponder; o mesmo nome de assunto ou chave pública sozinho não é suficiente. Um arquivo PIN ausente, ilegível, inválido ou incompatível falha na validação.
Acoplar a implantação do cliente à rotação de certificados. Atualize o PIN quando o certificado do servidor mudar, incluindo a renovação. Não obtenha um PIN aceitando um certificado não verificado da rede.
O SqlClient não expõe um callback público para validação arbitrária de certificado de servidor TLS.
AccessTokenCallback controla a aquisição de tokens de autenticação, não a validação TLS.
Certificados de desenvolvimento e solução de problemas
Use um certificado de desenvolvimento confiável com o nome correto do servidor. Se você usar TrustServerCertificate=true temporariamente com Encrypt=true em um ambiente de desenvolvimento isolado, a conexão é criptografada, mas o cliente não autentica o certificado do servidor.
Cuidado
Não implemente TrustServerCertificate=true como correção em produção para erros de certificado. Ele desativa a validação de identidade do servidor com Mandatory e não tem efeito com Strict.
| Failure | Verificação |
|---|---|
| A cadeia de certificados não é confiável. | Instale a raiz confiável e os intermediários apropriados no cliente. Verifique o certificado que o SQL Server realmente apresenta. |
| O nome do certificado não corresponde. | Compare Server com o certificado SAN. Corrija o nome, o certificado ou a substituição HostNameInCertificate intencional. |
| O certificado está vencido. | Renove o certificado do servidor e verifique o clock do cliente. |
| O certificado afixado não corresponde ou não pode ser carregado. | Verifique o caminho do arquivo, permissões, formato e certificado implantado. Atualize o PIN através do seu processo de distribuição confiável. |
| Criptografia rígida não consegue conectar. | Confirme que o endpoint suporta TDS 8.0 e que sua configuração TLS é compatível com o cliente. |
Para configuração do lado do servidor, veja Visão geral do Certificado.
Mudanças no comportamento de criptografia e validação de certificado
Essas notas de compatibilidade explicam mudanças de comportamento ao atualizar aplicações antigas. Novas aplicações devem usar as configurações atuais descritas neste artigo.
| Lançamento do driver | Troco |
|---|---|
| 1.0 |
Encrypt=false é o padrão. Quando o cliente não solicita criptografia, a criptografia forçada pelo servidor não aciona a validação do certificado. |
| 2.0 | A criptografia forçada pelo servidor respeita TrustServerCertificate mesmo quando Encrypt=false. |
| 4.0 | A criptografia passa a ser ativada por padrão. Atualizações podem expor erros de configuração de certificados anteriormente não notados. |
| 5.0 | Adiciona Optional, Mandatory, Strict e HostNameInCertificate. |
| 5.1 | Adiciona ServerCertificate para fixação de certificado. |
| 7.0.3 | Corrige a validação de pinos de certificados de rede gerenciada para falhar no fechamento por arquivos ausentes, inválidos ou incompatíveis, mesmo quando a validação normal da plataforma tem sucesso. |