Validação de criptografia e certificado em Microsoft.Data.SqlClient
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. |