Modo FIPS
Microsoft JDBC Driver para SQL Server admite la ejecución en JVM configuradas para ser compatibles con FIPS 140.
Prerrequisitos
- JVM configurada por FIPS
- Certificado TLS/SSL adecuado
- Archivos de directivas adecuados
- Parámetros de configuración adecuados
JVM configurada por FIPS
En general, las aplicaciones pueden configurar el archivo java.security
para usar proveedores criptográficos compatibles con FIPS. Consulte la documentación específica de su instancia de JVM para saber cómo configurar la compatibilidad con FIPS 140.
Para ver los módulos aprobados para la configuración de FIPS, consulte Validated Modules in the Cryptographic Module Validation Program (Módulos validados en el programa de validación del módulo criptográfico).
Los proveedores pueden contar con algunos pasos adicionales para configurar una instancia de JVM con FIPS.
Certificado TLS adecuado
Para conectarse a SQL Server en modo FIPS, es necesario un certificado TLS/SSL válido. Instálelo o impórtelo en el almacén de claves de Java de la máquina cliente (JVM) donde FIPS está habilitado.
Importación de un certificado TLS en Java keyStore
En el caso de FIPS, lo más probable es que tenga que importar el certificado (.cert) en PKCS o un formato específico del proveedor. Use el siguiente fragmento para importar el certificado TLS/SSL y almacenarlo en un directorio de trabajo con el formato KeyStore. TRUST_STORE_PASSWORD es su contraseña para el almacén de claves de Java.
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);
}
En el ejemplo siguiente se importa un certificado TLS/SSL de Azure en formato PKCS12 con el proveedor BouncyCastle. El certificado se importa en el directorio de trabajo denominado MyTrustStore_PKCS12 mediante el siguiente fragmento de código:
saveGenericKeyStore(BCFIPS, PKCS12, "SQLAzure SSL Certificate Name", "SQLAzure.cer");
Archivos de directivas adecuados
En el caso de algunos proveedores de FIPS, son necesarios archivos JAR de directivas sin restricciones. En estos casos,para Sun/Oracle, descargue los archivos de Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy para JRE 8 o JRE 7.
Parámetros de configuración adecuados
Para ejecutar el controlador JDBC en modo compatible con FIPS, configure las propiedades de conexión como se muestra en la siguiente tabla.
Propiedades
Propiedad | Tipo | Valor predeterminado | Descripción | Notas |
---|---|---|---|---|
encrypt |
String ["true/ false /strict"] | "true" | En el caso de JVM habilitada para FIPS, la propiedad de cifrado debe ser true. | El valor predeterminado ha cambiado de false a true en la versión 10.2. En la versión 11.2.0, el tipo cambió de booleano a String y se agregó la opción strict para permitir la compatibilidad con TDS 8.0. |
TrustServerCertificate |
booleano ["true / false"] | "false" | En el caso de FIPS, el usuario debe validar la cadena de certificados, de modo que debe usar el valor "false" para esta propiedad. | |
trustStore |
String | null | La ruta de acceso del archivo del almacén de claves de Java donde importó su certificado. Si instala un certificado en el sistema, no es necesario pasar nada. El controlador usa archivos cacerts o jssecacerts. | |
trustStorePassword |
String | null | Contraseña que se usa para comprobar la integridad de los datos trustStore. | |
fips |
booleano ["true / false"] | "false" | En el caso de JVM habilitada para FIPS, esta propiedad debe ser true. | Se agrega en 6.1.4 (versión estable 6.2.2) |
fipsProvider |
String | null | Proveedor FIPS configurado en JVM. Por ejemplo, BCFIPS o SunPKCS11-NSS. | Se agrega en 6.1.2 (versión estable 6.2.2), en desuso en 6.4.0; consulte los detalles aquí. |
trustStoreType |
String | JKS | En el caso del modo FIPS, establezca el tipo de almacén de confianza PKCS12 o el tipo definido por el proveedor FIPS. | Se agrega en 6.1.2 (versión estable 6.2.2) |