Validação de criptografia e certificado em Microsoft.Data.SqlClient

Baixar ADO.NET

O SQL Server sempre criptografa pacotes de rede associados a logon. Se nenhum certificado tiver sido provisionado no servidor quando ele for inicializado, SQL Server gerará um certificado autoassinado 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 verifique se 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, confira Segurança da camada de transporte e certificados digitais.

É altamente recomendável que você provisione um certificado verificável no SQL Server para ter uma conectividade segura. O protocolo TLS pode se tornar seguro somente com a validação de certificado.

Os aplicativos talvez solicitem a criptografia de todo o tráfego de rede usando a palavra-chave de cadeia de conexão Encrypt ou propriedade de conexão. Por padrão, a criptografia de todo o tráfego de rede para uma conexão requer que um certificado seja fornecido no servidor. Ao configurar o cliente para confiar no certificado no servidor, você pode se tornar vulnerável a ataques man-in-the-middle. Se você implantar um certificado verificável no servidor, verifique se as configurações do cliente Encrypt são True e se as configurações Trust Server Certificate são False.

Para permitir que a criptografia seja usada quando um certificado não tiver sido provisionado no servidor, as configurações de cliente Encrypt e Trust Server Certificate poderão 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 interceptem a conexão e habilitem o proxy da criptografia.

Mudanças no comportamento de criptografia e validação de certificado

A versão 4.0 do Microsoft.Data.SqlClient apresenta alterações interruptivas nas configurações de criptografia. Encrypt agora assume como padrão True.

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

Versão 4.0

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

Encrypt configuração do Cliente Trust Server Certificate configuração do cliente Force encryption configuração do servidor Resultado
Falso False (padrão) Não A criptografia ocorre apenas para pacotes LOGIN. O certificado não é validado.
Falso False (padrão) Sim (Alteração 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 True Sim A criptografia de todo o tráfego de rede ocorre e o certificado não é validado.
True (novo padrão) False (padrão) N/D 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) True N/D A criptografia de todo o tráfego de rede ocorre, mas o certificado não é validado.
Estrito (adicionado na versão 5.0) N/D N/D A criptografia de todo o tráfego de rede ocorre usando somente TDS 8 se houver um certificado de servidor verificável, caso contrário, a tentativa de conexão falhará.

Cuidado

A tabela anterior fornece apenas um guia sobre o comportamento do sistema em diferentes configurações. Para conectividade segura, verifique se tanto o cliente quanto o servidor exigem criptografia. Verifique também se o servidor tem um certificado verificável e se a configuração TrustServerCertificate 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. O certificado de servidor garante que o CN (Nome Comum) ou o SAN (Nome Alternativo da Entidade) no certificado corresponda ao nome do servidor com o qual está conectado. Em alguns casos, como aliases DNS, o nome do servidor pode não corresponder ao CN nem ao SAN. O valor HostNameInCertificate pode ser usado para especificar um CN ou SAN diferente 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 configuração Trust Server Certificate, independentemente da configuração Encrypt.

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

Encrypt configuração do Cliente Trust Server Certificate configuração do cliente Force encryption configuração do servidor Resultado
False (padrão) False (padrão) Não A criptografia ocorre apenas para pacotes LOGIN. O certificado não é validado.
False (padrão) False (padrão) Sim (Alteração 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á.
False (padrão) True Sim A criptografia de todo o tráfego de rede ocorre e o certificado não é validado.
True False (padrão) N/D 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á.
verdadeiro True N/D A criptografia de todo o tráfego de rede ocorre, mas o certificado não é validado.

Cuidado

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

Versão 1.0

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

Encrypt configuração do Cliente Trust Server Certificate configuração do cliente Force encryption configuração do servidor Resultado
False (padrão) False (padrão) Não A criptografia ocorre apenas para pacotes LOGIN. O certificado não é validado.
False (padrão) False (padrão) Sim A criptografia de todo o tráfego de rede ocorre, mas o certificado não é validado.
False (padrão) True Sim A criptografia de todo o tráfego de rede ocorre e o certificado não é validado.
True False (padrão) N/D 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á.
verdadeiro True N/D A criptografia de todo o tráfego de rede ocorre, mas o certificado não é validado.

Confira também

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