Configurando o cliente para criptografia
O Microsoft JDBC Driver para SQL Server ou o cliente precisa validar se o servidor é o correto e se o certificado é emitido por uma autoridade de certificação de confiança do cliente. Para validar o certificado do servidor, o material confiável deve ser fornecido na hora da conexão. Além disso, o emissor do certificado do servidor deve ser uma autoridade de certificação em que o cliente confia.
Este artigo primeiro descreve como fornecer o material confiável no computador cliente. Em seguida, ele descreve como importar um certificado do servidor para o repositório confiável do computador cliente quando a instância do certificado de protocolo TLS do SQL Server é emitida por uma autoridade de certificação privada.
Para obter mais informações sobre como validar o certificado do servidor, confira a seção Validando o certificado TLS do servidor em Noções básicas sobre suporte à criptografia.
Configurando o repositório de confiança do cliente
Validar o certificado do servidor requer o material confiável no momento da conexão, usando as propriedades de conexão trustStore e trustStorePassword explicitamente ou o repositório confiável padrão da JVM (Máquina Virtual Java) subjacente implicitamente. Para obter mais informações sobre como definir as propriedades trustStore e trustStorePassword na cadeia de conexão, confira Conectar-se com criptografia.
Se a propriedade trustStore não for especificada ou estiver definida como nula, o Microsoft JDBC Driver para SQL Server confiará no provedor de segurança da JVM subjacente, o Java Secure Socket Extension (SunJSSE). O provedor de SunJSSE fornece um TrustManager padrão que é usado para validar certificados de X.509 retornados pelo SQL Server em relação ao material de confiança fornecido em um repositório de confiança.
O TrustManager tenta localizar o trustStore padrão na seguinte ordem de pesquisa:
- Se a propriedade do sistema "javax.net.ssl.trustStore" for definida, o TrustManager tentará localizar o arquivo trustStore padrão usando o nome de arquivo especificado por aquela propriedade de sistema.
- Se a propriedade do sistema "javax.net.ssl.trustStore" não foi especificada e se o arquivo "<java-home>/lib/security/jssecacerts" estiver presente, esse arquivo será usado.
- Se o arquivo "<java-home>/lib/security/cacerts" existir, esse arquivo será usado.
Para obter mais informações, consulte a documentação da interface do SUNX509 TrustManager no site da Sun Microsystems.
O Java Runtime Environment permite definir as propriedades do sistema trustStore e trustStorePassword da seguinte maneira:
java -Djavax.net.ssl.trustStore=C:\MyCertificates\storeName
java -Djavax.net.ssl.trustStorePassword=storePassword
Neste caso, qualquer aplicativo que estiver executando nesta JVM usará estas configurações como padrão. Para anular as configurações padrão em seu aplicativo, você deverá definir as propriedades de conexão trustStore e trustStorePassword na cadeia de conexão ou no método setter apropriado da classe SQLServerDataSource.
Além disso, você pode configurar e gerenciar os arquivos de repositório de confiança padrão como "<java-home>/lib/security/jssecacerts" e "<java-home>/lib/security/cacerts". Para fazer isso, use o utilitário "keytool" de JAVA que é instalado com o JRE (Java Runtime Environment). Para obter mais informações sobre o utilitário "keytool", confira a documentação sobre keytool no site da Oracle.
Importando o certificado do servidor para o repositório de confiança
Durante o handshake TLS, o servidor envia seu certificado de chave pública ao cliente. O emissor de um certificado de chave pública é conhecido como uma Autoridade de Certificação (CA). O cliente precisa garantir que a autoridade de certificação é da confiança dele. Essa garantia é obtida sabendo a chave pública de CAs de confiança com antecedência. Normalmente, o JVM é enviado com um conjunto predefinido de autoridades de certificação de confiança.
Se a instância do certificado de protocolo TLS do SQL Server for emitida por uma autoridade de certificação privada, você deverá adicionar o certificado da autoridade de certificação à lista de certificados confiáveis no repositório de confiança do computador cliente.
Para fazer isso, use o utilitário "keytool" de JAVA que é instalado com o JRE (Java Runtime Environment). O prompt de comando a seguir demonstra como usar o utilitário "keytool" para importar um certificado de um arquivo:
keytool -import -v -trustcacerts -alias myServer -file caCert.cer -keystore truststore.ks
O exemplo usa um arquivo denominado "caCert.cer" como arquivo de certificado. Você deve obter este arquivo de certificado do servidor. As etapas seguintes explicam como exportar o certificado do servidor para um arquivo:
- Selecione Iniciar e Executar e digite MMC. (MMC é um acrônimo para o Console de Gerenciamento Microsoft.)
- Em MMC, abra os Certificados.
- Expanda Pessoal e, em seguida, Certificados.
- Clique com o botão direito no certificado do servidor e selecione Todas as Tarefas\Exportar.
- Selecione Avançar para ir além da caixa de diálogo de boas-vindas do Assistente de Exportação de Certificado.
- Confirme se a opção
No, do not export the private key
está selecionada e escolha Avançar. - Selecione X.509 binário codificado por DER (*.CER) ou X.509 codificado em Base 64 (*.CER) e Avançar.
- Insira um nome do arquivo de exportação.
- Selecione Avançar e Concluir para exportar o certificado.