Modo FIPS
O Microsoft JDBC Driver para SQL Server é compatível com a execução nas JVMs configuradas para estar em conformidade com o FIPS 140.
Pré-requisitos
- JVM configurada para FIPS
- Certificado TLS/SSL apropriado
- Arquivos de política apropriados
- Parâmetros de configuração apropriados
JVM configurada para FIPS
Em geral, os aplicativos podem configurar o arquivo java.security
para usar provedores de criptografia em conformidade com FIPS. Confira a documentação específica para sua JVM e saiba como configurar a conformidade com o FIPS 140.
Para ver os módulos aprovados para configuração de FIPS, veja Módulos validados no programa de validação do módulo de criptografia.
Os fornecedores podem ter algumas outras etapas para configurar uma JVM com FIPS.
Certificado TLS apropriado
Para se conectar ao SQL Server no modo FIPS, é necessário um certificado TLS/SSL válido. Instale ou importe-o no repositório de chaves do Java no computador cliente (JVM) em que o FIPS está habilitado.
Importar o certificado TLS no Java KeyStore
Para o FIPS, é mais provável que você precise importar o certificado (.cert) no formato PKCS ou específico do provedor. Use o snippet a seguir para importar o certificado TLS/SSL e armazená-lo em um diretório de trabalho com o formato KeyStore apropriado. TRUST_STORE_PASSWORD é sua senha para o Java KeyStore.
public void saveGenericKeyStore(
String provider,
String trustStoreType,
String certName,
String certPath
) throws KeyStoreException, CertificateException,
NoSuchAlgorithmException, NoSuchProviderException,
IOException
{
KeyStore ks = KeyStore.getInstance(trustStoreType, provider);
FileOutputStream os = new FileOutputStream("./MyTrustStore_" + trustStoreType);
ks.load(null, null);
ks.setCertificateEntry(certName, getCertificate(certPath));
ks.store(os, TRUST_STORE_PASSWORD.toCharArray());
os.flush();
os.close();
}
private Certificate getCertificate(String pathName)
throws FileNotFoundException, CertificateException
{
FileInputStream fis = new FileInputStream(pathName);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
return cf.generateCertificate(fis);
}
O exemplo a seguir está importando um certificado TLS/SSL do Azure no formato PKCS12 com o provedor BouncyCastle. O certificado é importado no diretório de trabalho chamado MyTrustStore_PKCS12 usando o seguinte snippet:
saveGenericKeyStore(BCFIPS, PKCS12, "SQLAzure SSL Certificate Name", "SQLAzure.cer");
Arquivos de política apropriados
Para alguns provedores FIPS, são necessários jars de política irrestrita. Nesses casos, para Sun/Oracle, baixe os arquivos de política de jurisdição de força ilimitada do JCA (Java Cryptography Extension) para JRE 8 ou JRE 7.
Parâmetros de configuração apropriados
Para executar o driver JDBC no modo em conformidade com FIPS, configure as propriedades de conexão, conforme mostrado na tabela a seguir.
Propriedades
Propriedade | Type | Padrão | Descrição | Observações |
---|---|---|---|---|
encrypt |
Cadeia de caracteres ["true / false / strict"] | "true" | Para a JVM habilitada para FIPS, essa propriedade de criptografia deve ser true | O padrão foi alterado de false para true na versão 10.2. Na versão 11.2.0, o tipo foi alterado de booliano para cadeia de caracteres e a opção estrita foi adicionada para permitir o suporte ao TDS 8.0. |
TrustServerCertificate |
boolean ["true / false"] | "false" | Para o FIPS, o usuário precisa validar a cadeia de certificados, de modo que ele deve usar o valor "false" para essa propriedade. | |
trustStore |
String | nulo | O caminho do arquivo do repositório de chaves do Java em que você importou o certificado. Se você instalar o certificado em seu sistema, não será necessário aprovar nada. O driver usa arquivos cacerts ou jssecacerts. | |
trustStorePassword |
String | nulo | A senha usada para verificar a integridade dos dados de trustStore. | |
fips |
boolean ["true / false"] | "false" | Para a JVM habilitada para FIPS, essa propriedade deve ser true | Adicionada na versão 6.1.4 (versão estável 6.2.2) |
fipsProvider |
String | nulo | Provedor FIPS configurado na JVM. Por exemplo, BCFIPS ou SunPKCS11-NSS | Adicionada na versão 6.1.2 (versão estável 6.2.2), preterida na 6.4.0 – confira os detalhes aqui. |
trustStoreType |
String | JKS | Para o modo FIPS, defina o tipo de repositório confiável, PKCS12 ou o tipo definido pelo provedor FIPS | Adicionada na versão 6.1.2 (versão estável 6.2.2) |