Modalità FIPS
Microsoft JDBC Driver per SQL Server supporta l'esecuzione in JVM (Java Virtual Machine) configurate per essere conformi a FIPS 140.
Prerequisiti
- JVM configurata per FIPS
- Certificato TLS/SSL appropriato
- File di criteri appropriati
- Parametri di configurazione appropriati
JVM configurata per FIPS
Le applicazioni possono in genere configurare il file java.security
per l'uso di provider di crittografia conformi a FIPS. Per informazioni sulla configurazione della conformità FIPS 140, vedere la documentazione specifica della JVM.
Per informazioni sui moduli approvati per la configurazione FIPS, vedere Moduli convalidati nel Programma di convalida moduli di crittografia.
I fornitori possono prevedere passaggi aggiuntivi per configurare una JVM con FIPS.
Certificato TLS appropriato
Per connettersi a SQL Server in modalità FIPS, è necessario un certificato TLS/SSL valido. Installarlo o importarlo nell'archivio chiavi Java nel computer client (JVM) in cui è abilitato FIPS.
Importazione del certificato TLS nell'archivio chiavi Java
Per FIPS, è molto probabile che sia necessario importare il certificato (con estensione cert) in formato PKCS o in un formato specifico del provider. Usare il frammento di codice seguente per importare il certificato TLS/SSL e archiviarlo in una directory di lavoro con il formato di archivio chiavi appropriato. TRUST_STORE_PASSWORD è la password per l'archivio chiavi 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);
}
Nell'esempio seguente viene importato un certificato TLS/SSL di Azure in formato PKCS12 con il provider BouncyCastle. Il certificato viene importato nella directory di lavoro denominata MyTrustStore_PKCS12 usando il frammento di codice seguente:
saveGenericKeyStore(BCFIPS, PKCS12, "SQLAzure SSL Certificate Name", "SQLAzure.cer");
File di criteri appropriati
Per alcuni provider FIPS sono necessari JAR di criteri senza restrizioni. In questi casi, per Sun/Oracle, scaricare Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files per JRE 8 o JRE 7.
Parametri di configurazione appropriati
Per eseguire JDBC Driver in modalità conforme a FIPS, configurare le proprietà di connessione come indicato nella tabella riportata di seguito.
Proprietà
Proprietà | Type | Default | Descrizione | Note |
---|---|---|---|---|
encrypt |
Stringa ["true/ false/ strict"] | "true" | Per la JVM abilitata per FIPS, la proprietà encrypt deve essere true | Il valore predefinito è stato modificato da false a true nella versione 10.2. Nella versione 11.2.0 il tipo è cambiato da booleano a String e l'opzione strict è stata aggiunta per consentire il supporto TDS 8.0. |
TrustServerCertificate |
booleano ["true/false"] | "false" | Per FIPS, l'utente deve convalidare la catena di certificati. Pertanto l'utente deve usare il valore "false" per questa proprietà. | |
trustStore |
String | Null | Il percorso del file dell'archivio chiavi Java in cui è stato importato il certificato. Se il certificato viene installato nel sistema, non è necessario passare alcun elemento. Il driver usa i file cacerts o jssecacerts. | |
trustStorePassword |
String | Null | Password utilizzata per verificare l'integrità dei dati del file trustStore. | |
fips |
booleano ["true/false"] | "false" | Per la JVM abilitata per FIPS, questa proprietà deve essere true. | Aggiunta nella versione 6.1.4 (versione stabile 6.2.2) |
fipsProvider |
String | Null | Provider FIPS configurato nella JVM. Ad esempio, BCFIPS o SunPKCS11-NSS | Aggiunta nella versione 6.1.2 (versione stabile 6.2.2), deprecata nella versione 6.4.0. Vedere i dettagli qui. |
trustStoreType |
String | JKS | Per la modalità FIPS impostare il tipo di archivio attendibilità su PKCS12 o sul tipo definito dal provider FIPS | Aggiunta nella versione 6.1.2 (versione stabile 6.2.2) |