Partilhar via


Criptografia e validação de certificado em Microsoft.Data.SqlClient

Baixar ADO.NET

O SQL Server sempre criptografa pacotes de rede associados ao logon. Se nenhum certificado tiver sido provisionado no servidor quando ele for iniciado, o SQL Server gerará um certificado autoassinado, que é usado para criptografar pacotes de logon.

Em um alto nível, a criptografia entre um cliente e um servidor garante que os dados só sejam legíveis pelo cliente e pelo servidor. Uma parte importante do processo de criptografia é a validação do certificado do servidor. A validação do certificado do servidor permite que o cliente assegure que o servidor é quem diz ser. O certificado é validado para coisas como expiração, cadeia de confiança e que o nome no certificado corresponde ao nome do servidor ao qual o cliente está se conectando. Para obter mais informações, consulte Segurança da camada de transporte e certificados digitais.

É altamente recomendável provisionar um certificado verificável no SQL Server para conectividade segura. A camada de segurança de transporte (TLS) só pode ser protegida com a validação do certificado.

As aplicações podem solicitar a criptografia de todo o tráfego de rede usando a palavra-chave Encrypt da cadeia de conexão ou a propriedade da conexão. Por padrão, a criptografia de todo o tráfego de rede para uma conexão requer um certificado sendo provisionado no servidor. Ao configurar seu cliente para confiar no certificado no servidor, você pode ficar vulnerável a ataques man-in-the-middle. Se implementar um certificado verificável no servidor, certifique-se de que as definições do cliente Encrypt são True e que Trust Server Certificate as definições são False.

Para permitir que a criptografia seja usada quando um certificado não tiver sido provisionado no servidor, as configurações do cliente Encrypt e Trust Server Certificate podem ser usadas. Nesse caso, a criptografia usa um certificado de servidor autoassinado sem validação pelo cliente. Essa configuração criptografa a conexão, mas não impede que os dispositivos entre o cliente e o servidor intercetem a conexão e façam proxy da criptografia.

Alterações no comportamento de criptografia e validação de certificado

A versão 4.0 do Microsoft.Data.SqlClient introduz alterações significativas nas configurações de criptografia. Encrypt agora o padrão é True.

Versão 2.0 do Microsoft.Data.SqlClient introduz alterações significativas no comportamento da Trust Server Certificate configuração. Anteriormente, se Encrypt estivesse definido como False, o certificado do servidor não seria validado, independentemente da Trust Server Certificate configuração. Agora, o certificado do servidor é validado com base na Trust Server Certificate configuração se o servidor forçar a criptografia, mesmo que Encrypt esteja definido como False.

Versão 4.0

A tabela a seguir descreve o resultado da criptografia e da validação para as configurações de criptografia e certificado:

Encrypt Configuração do cliente Trust Server Certificate Configuração do cliente Force encryption Configuração do servidor Result
Falso Falso (padrão) Não A criptografia ocorre apenas para pacotes LOGIN. O certificado não é validado.
Falso Falso (padrão) Yes (Mudança de comportamento da versão 1.0 para 2.0) A criptografia de todo o tráfego de rede ocorre somente se houver um certificado de servidor verificável, caso contrário, a tentativa de conexão falhará.
Falso Verdade Yes A criptografia de todo o tráfego de rede ocorre e o certificado não é validado.
True (novo padrão) Falso (padrão) N/A A criptografia de todo o tráfego de rede ocorre somente se houver um certificado de servidor verificável, caso contrário, a tentativa de conexão falhará.
True (novo padrão) Verdade N/A A criptografia de todo o tráfego de rede ocorre, mas o certificado não é validado.
Rigoroso (adicionado na versão 5.0) N/A N/A A criptografia de todo o tráfego de rede ocorre usando o TDS 8.0 somente se houver um certificado de servidor verificável, caso contrário, a tentativa de conexão falhará.

Atenção

A tabela anterior fornece apenas um guia sobre o comportamento do sistema em diferentes configurações. Para conectividade segura, certifique-se de que o cliente e o servidor exijam criptografia. Verifique também se o servidor tem um certificado verificável e se a TrustServerCertificate configuração no cliente está definida como False.

A partir da versão 5.0 do Microsoft.Data.SqlClient, HostNameInCertificate é uma nova opção de conexão. A validação do certificado do servidor garante que o nome comum (CN) ou o nome alternativo da entidade (SAN) no certificado corresponda ao nome do servidor ao qual está sendo conectado. Em alguns casos, como alias DNS, o nome do servidor pode não corresponder ao CN ou SAN. O HostNameInCertificate valor pode ser usado para especificar um CN ou SAN diferente e esperado no certificado do servidor.

Versão 2.0

A partir da versão 2.0, quando o servidor força a criptografia, o cliente valida o certificado do servidor com base na Trust Server Certificate configuração, independentemente da Encrypt configuração.

A tabela a seguir descreve o resultado da criptografia e da validação para as configurações de criptografia e certificado:

Encrypt Configuração do cliente Trust Server Certificate Configuração do cliente Force encryption Configuração do servidor Result
Falso (padrão) Falso (padrão) Não A criptografia ocorre apenas para pacotes LOGIN. O certificado não é validado.
Falso (padrão) Falso (padrão) Yes (Mudança de comportamento) A criptografia de todo o tráfego de rede ocorre somente se houver um certificado de servidor verificável, caso contrário, a tentativa de conexão falhará.
Falso (padrão) Verdade Yes A criptografia de todo o tráfego de rede ocorre e o certificado não é validado.
Verdade Falso (padrão) N/A A criptografia de todo o tráfego de rede ocorre somente se houver um certificado de servidor verificável, caso contrário, a tentativa de conexão falhará.
Verdade Verdade N/A A criptografia de todo o tráfego de rede ocorre, mas o certificado não é validado.

Atenção

A tabela anterior fornece apenas um guia sobre o comportamento do sistema em diferentes configurações. Para conectividade segura, certifique-se de que o cliente e o servidor exijam criptografia. Verifique também se o servidor tem um certificado verificável e se a TrustServerCertificate configuração no cliente está definida como False.

Versão 1.0

A tabela a seguir descreve o resultado da criptografia e da validação para as configurações de criptografia e certificado:

Encrypt Configuração do cliente Trust Server Certificate Configuração do cliente Force encryption Configuração do servidor Result
Falso (padrão) Falso (padrão) Não A criptografia ocorre apenas para pacotes LOGIN. O certificado não é validado.
Falso (padrão) Falso (padrão) Yes A criptografia de todo o tráfego de rede ocorre, mas o certificado não é validado.
Falso (padrão) Verdade Yes A criptografia de todo o tráfego de rede ocorre e o certificado não é validado.
Verdade Falso (padrão) N/A A criptografia de todo o tráfego de rede ocorre somente se houver um certificado de servidor verificável, caso contrário, a tentativa de conexão falhará.
Verdade Verdade N/A A criptografia de todo o tráfego de rede ocorre, mas o certificado não é validado.

Consulte também

Cadeias de conexão
Sintaxe da cadeia de conexão