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.
Use a Segurança da Camada de Transporte (TLS) para encriptar o tráfego entre a sua aplicação e o SQL Server. Mantenha a validação do certificado do servidor ativada para verificar a identidade do servidor. A encriptação sem validação de identidade não protege contra um adversário intermédio que se faz passar pelo servidor.
Microsoft.Data.SqlClient utiliza Encrypt=Mandatory e TrustServerCertificate=false por predefinição.
Encrypt=true é sinónimo de Mandatory. Para uma ligação remota, solicite explicitamente estas definiçõ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 base de dados SQL no Microsoft Fabric, veja autenticação Microsoft Entra.
Escolha um modo de encriptação
Encrypt controla se o cliente necessita de encriptação. Um servidor também pode necessitar de encriptação. Esta tabela descreve o comportamento atual sem associação de certificados:
| Configuração do cliente | Requisito do servidor | Validação do certificado | Result |
|---|---|---|---|
Encrypt=Optional ou false |
Não força encriptação. | Nenhum, independentemente de TrustServerCertificate. |
Apenas os pacotes de login são encriptados. O tráfego subsequente não está encriptado. |
Encrypt=Optional;TrustServerCertificate=false |
Força a encriptação. | Cadeia de confiança, validade e nome do servidor. | Todo o tráfego está encriptado. Certificados inválidos falham a ligação. |
Encrypt=Optional;TrustServerCertificate=true |
Força a encriptação. | Ignorado. | Todo o tráfego está encriptado, mas a identidade do servidor não é verificada. |
Encrypt=Mandatory;TrustServerCertificate=false |
Qualquer um dos cenários. | Cadeia de confiança, validade e nome do servidor. | Todo o tráfego está encriptado. Certificados inválidos falham a ligação. |
Encrypt=Mandatory;TrustServerCertificate=true |
Qualquer um dos cenários. | Ignorado. | Todo o tráfego está encriptado, mas a identidade do servidor não é verificada. |
Encrypt=Strict |
Suporta Fluxo de Dados Tabulares (TDS) 8.0. | Required.
TrustServerCertificate Não se pode contornar. |
O TLS começa antes das mensagens TDS. Um servidor não suportado ou um certificado inválido falha a ligação. |
Mandatory Use para ligações encriptadas a servidores que não suportam TDS 8.0. Use Strict quando o seu endpoint suporta TDS 8.0, incluindo SQL Server 2022 (16.x) e versões posteriores. O TDS 8.0 suporta TLS 1.2 e TLS 1.3; não requer TLS 1.3. A versão TLS negociada também depende da configuração do cliente, servidor e sistema operativo.
Optional Não é uma solução para erros de certificado. Pode deixar os dados da aplicação sem encriptação quando o servidor não precisa de encriptação.
Configurar um certificado de servidor verificável
Para validação normal de certificados:
- Providencie um certificado que cumpra os requisitos do certificado do SQL Server.
- Inclua o nome que os clientes usam para se ligar no nome alternativo (SAN) do assunto do certificado.
- Faça com que a autoridade certificadora emissora e quaisquer certificados intermédios necessários sejam confiáveis em cada host cliente ou contentor.
- Configura o SQL Server para utilizar o certificado e mantém
TrustServerCertificate=falsenos clientes. - Renovação do certificado do plano antes da expiração, incluindo quaisquer alterações aos nomes ou às autoridades emissoras.
Um certificado de uma autoridade de certificação pública ou empresarial pode satisfazer estes requisitos. Um certificado empresarial não é automaticamente confiável dentro de um contentor Linux ou num computador de programador separado.
Liga-te através de um pseudónimo
Se a ligação usar um alias do Sistema de Nomes de Domínio (DNS) que não está no certificado, considere primeiro 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 altera o nome que o SqlClient espera durante a validação do certificado. Não altera o destino da rede nem contorna as verificações de trust-chain e de expiração. Deixa-o desligado quando o nome do servidor já corresponde ao certificado.
Fixe um certificado de servidor específico
ServerCertificate fornece um ficheiro de certificado local para comparação exata com o certificado do servidor. Os formatos suportados são Privacy-Enhanced Mail (PEM) e Distinguished Encoding Rules (DER), incluindo ficheiros 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 através de um canal de confiança e proteja o ficheiro contra substituição. Uma correspondência exata do certificado é uma alternativa à validação normal da cadeia e do nome, e não uma verificação adicional. Os bytes do certificado têm de corresponder; o mesmo nome de assunto ou chave pública sozinho não é suficiente. Um ficheiro PIN em falta, ilegível, inválido ou incompatível falha na validação.
A fixação associa a implementaçã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 ao aceitar um certificado não verificado da rede.
O SqlClient não expõe um callback público para validação arbitrária do certificado do servidor TLS.
AccessTokenCallback controla a aquisição do token de autenticação, não a validação TLS.
Certificados de desenvolvimento e resolução de problemas
Use um certificado de desenvolvimento de confiança com o nome correto do servidor. Se usar TrustServerCertificate=true temporariamente com Encrypt=true num ambiente de desenvolvimento isolado, a ligação é encriptada mas o cliente não autentica o certificado do servidor.
Atenção
Não implemente TrustServerCertificate=true como correção de produção para erros de certificado. Desativa a validação da identidade do servidor com Mandatory e não tem efeito com Strict.
| Failure | Verificação |
|---|---|
| A cadeia de certificados não é confiável. | Instale o certificado de raiz fidedigno adequado e os certificados intermédios adequados 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 intencional HostNameInCertificate. |
| O certificado está expirado. | Renove o certificado do servidor e verifique o relógio do cliente. |
| O certificado associado não corresponde ou não pode ser carregado. | Verifique o caminho do ficheiro, permissões, formato e certificado implementado. Atualize o PIN através do seu processo de distribuição de confiança. |
| A encriptação restrita não consegue estabelecer ligação. | Confirme que o endpoint suporta TDS 8.0 e que a sua configuração TLS é compatível com o cliente. |
Para configuração do lado do servidor, veja Visão geral do Certificado.
Alterações no comportamento de criptografia e validação de certificado
Estas notas de compatibilidade explicam alterações de comportamento ao atualizar aplicações antigas. Novas aplicações devem utilizar as definições atuais descritas neste artigo.
| Lançamento do piloto | Alteração |
|---|---|
| 1.0 |
Encrypt=false é o padrão. Quando o cliente não solicita encriptação, a encriptação forçada pelo servidor não aciona a validação do certificado. |
| 2.0 | A encriptação forçada pelo servidor respeita TrustServerCertificate mesmo quando Encrypt=false. |
| 4.0 | A encriptação torna-se ativada por defeito. As 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 associação de certificados. |
| 7.0.3 | Corrige a validação da fixação de certificados em redes geridas para falhar em modo fechado em caso de ficheiros em falta, inválidos ou não correspondentes, mesmo quando a validação normal da plataforma é bem-sucedida. |