Criptografia e validação de certificado no OLE DB
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)
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.
Certificados autoassinados não garantem a segurança. O handshake criptografado é baseado no NTLM (NT LAN Manager). É 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 também podem solicitar a criptografia de todo o tráfego de rede usando palavras-chave de cadeia de conexão ou propriedades de conexão. As palavras-chave são "Encrypt" para o OLE DB ao usar uma cadeia de caracteres do provedor com IDbInitialize::Initialize
ou "Use Encryption for Data" para o ADO e o OLE DB ao usar uma cadeia de caracteres de inicialização com IDataInitialize
. A criptografia talvez possa ser configurada na máquina do cliente no registro usando a opção Forçar criptografia de protocolo. Para obter mais informações, confira Configurações modificadas do Registro. 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, certifique-se de alterar as configurações do cliente sobre como confiar no certificado para FALSE.
Para obter informações sobre palavras-chave da cadeia de conexão, confira Usando palavras-chave da cadeia de conexão com o Driver do OLE DB para SQL Server.
Para permitir que a criptografia seja usada quando um certificado não tiver sido provisionado no servidor, as configurações de registro do clienteForce Protocol Encryption
e Trust Server Certificate
poderão ser definidas. Neste caso, a criptografia usa um certificado do servidor autoassinado sem validação, se nenhum certificado verificável tiver sido provisionado no servidor.
Comportamento de criptografia e validação de certificado
As configurações do aplicativo nunca reduzem o nível de segurança definido no registro, mas podem fortalecê-la. Para obter mais informações, confira Configurações modificadas do Registro. Por exemplo, se Force Protocol Encryption
não for definido para o cliente, um aplicativo poderá solicitar a criptografia por conta própria. Para garantir a criptografia mesmo quando um certificado de servidor não foi provisionado, um aplicativo pode solicitar a criptografia e ativar TrustServerCertificate
. No entanto, se TrustServerCertificate
não estiver ativado na configuração do cliente, um certificado do servidor provisionado ainda será necessário.
A versão 19 do Driver do OLE DB para SQL Server apresenta alterações importantes nas APIs relacionadas à criptografia. Para obter mais informações, confira Alterações de propriedade de criptografia.
Versão principal 19
A seguinte tabela descreve a avaliação das configurações de criptografia:
Configuração do cliente Forçar Criptografia de Protocolo | Atributo de conexão/cadeia de conexão Criptografar/Usar criptografia de dados | Criptografia resultante |
---|---|---|
0 | Não/Opcional | Opcional |
0 | Sim/Obrigatório (padrão) | Obrigatório |
0 | Rigoroso | Rigoroso |
1 | Não/Opcional | Obrigatório |
1 | Sim/Obrigatório (padrão) | Obrigatório |
1 | Rigoroso | Rigoroso |
2 | Ignored | Rigoroso |
A seguinte tabela descreve a criptografia e a validação resultantes:
Criptografia | Configuração do cliente Confiar em Certificado do Servidor | Atributo de conexão/cadeia de conexão Confiar em Certificado do Servidor | Result |
---|---|---|---|
Opcional | N/D | N/D | A criptografia ocorre apenas para pacotes LOGIN. |
Obrigatório | 0 | Ignored | A criptografia só ocorrerá se houver um certificado do servidor verificável; caso contrário, a tentativa de conexão falhará. |
Obrigatório | 1 | Não (padrão) | A criptografia só ocorrerá se houver um certificado do servidor verificável; caso contrário, a tentativa de conexão falhará. |
Obrigatório | 1 | Sim | A criptografia sempre ocorre, mas pode usar um certificado do servidor autoassinado. |
Rigoroso | N/D | N/D | A criptografia só ocorrerá se houver um certificado do 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, confirme se tanto o cliente quanto o servidor exigem criptografia (para configuração do lado do servidor, confira Definir configurações de criptografia do SQL Server). Verifique também se o servidor tem um certificado verificável e se a configuração TrustServerCertificate
no cliente está definida como FALSE.
Observação
Da versão 19.2 em diante do driver OLE DB, as conexões TDS 8.0 podem ser configuradas para usar o TLS 1.3. Para saber mais, confira o Suporte ao TLS 1.3.
Versão principal 18 com novos métodos de autenticação
Para as versões 18.xx, para melhorar a segurança, quando as novas palavras-chave de cadeia de conexão Autenticação ou Token de acesso (ou suas propriedades correspondentes) são usadas, o driver substitui o valor de criptografia padrão definindo para yes
. A substituição ocorre no tempo de inicialização do objeto de fonte de dados. Se a criptografia for definida por qualquer meio antes da inicialização, o valor será respeitado e não será substituído.
Observação
Em aplicativos ADO e em aplicativos que obtêm a interface IDBInitialize
por meio de IDataInitialize::GetDataSource
, o componente principal que implementa a interface define explicitamente a criptografia para seu valor padrão de no
. Como resultado, as novas palavras-chave/propriedades de autenticação respeitam essa configuração e o valor de criptografia não é substituído. Portanto, é recomendado que esses aplicativos definam Use Encryption for Data=true
explicitamente para substituir o valor padrão.
Para melhorar a segurança, os novos métodos de autenticação respeitam a configuração TrustServerCertificate
(e suas palavras-chave/propriedades de cadeia de conexão correspondentes) independentemente da configuração de criptografia do cliente. Como resultado, o certificado do servidor é validado por padrão. O driver determina se o certificado do servidor deve ser validado da seguinte maneira:
Configuração do cliente Confiar em Certificado do Servidor | Atributo de conexão/cadeia de conexão Confiar em Certificado do Servidor | Validação do certificado |
---|---|---|
0 | Não (padrão) | Yes |
0 | Sim | Sim |
1 | Não (padrão) | Sim |
1 | Sim | No |
A seguinte tabela descreve a avaliação das configurações de criptografia:
Configuração do cliente Forçar Criptografia de Protocolo | Atributo de conexão/cadeia de conexão Criptografar/Usar criptografia de dados | Criptografia resultante |
---|---|---|
0 | Não (padrão) | No |
0 | Sim | Sim |
1 | Não (padrão) | Sim |
1 | Sim | Yes |
A seguinte tabela descreve a criptografia e a validação resultantes:
Criptografia resultante | Validação do certificado | Result |
---|---|---|
Não | Não | A criptografia ocorre apenas para pacotes LOGIN. |
Não | Sim | A criptografia ocorrerá para pacotes LOGIN somente se houver um certificado de servidor verificável, caso contrário, a tentativa de conexão falhará. |
Sim | No | A criptografia de todo o tráfego de rede sempre ocorre, mas pode usar um certificado de servidor autoassinado. |
Sim | Yes | 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á. |
Versão principal 18 com métodos de autenticação herdados
A seguinte tabela descreve o resultado de criptografia e validação para métodos de autenticação herdados:
Configuração do cliente Forçar Criptografia de Protocolo | Configuração do cliente Confiar em Certificado do Servidor | Atributo de conexão/cadeia de conexão Criptografar/Usar criptografia de dados | Atributo de conexão/cadeia de conexão Confiar em Certificado do Servidor | Result |
---|---|---|---|---|
0 | N/D | Não (padrão) | N/D | A criptografia ocorre apenas para pacotes LOGIN. |
0 | N/D | Sim | Não (padrão) | 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á. |
0 | N/D | Sim | Yes | A criptografia de todo o tráfego de rede sempre ocorre, mas pode usar um certificado de servidor autoassinado. |
1 | 0 | Ignored | Ignored | 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á. |
1 | 1 | Não (padrão) | N/D | A criptografia de todo o tráfego de rede sempre ocorre, mas pode usar um certificado de servidor autoassinado. |
1 | 1 | Sim | Não (padrão) | 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á. |
1 | 1 | Sim | Yes | A criptografia de todo o tráfego de rede sempre ocorre, mas pode usar um certificado de servidor autoassinado. |
Confira também
Recursos do Driver do OLE DB para SQL Server
Propriedades de inicialização e autorização
Palavras-chave de cadeia de conexão
Principais diferenças de versão
Configurações do registro