Modo FIPS

Baixar o JDBC Driver

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)