Mode FIPS
Le pilote Microsoft JDBC pour SQL Server prend en charge l’exécution dans des JVM configurées pour être compatibles FIPS 140.
Prérequis
- Machine virtuelle Java configurée selon FIPS
- Mettre à jour le certificat TLS/SSL
- Fichiers de stratégie appropriés
- Paramètres de configuration appropriés
Machine virtuelle Java configurée selon FIPS
En règle générale, les applications peuvent configurer le fichier java.security
pour utiliser des fournisseurs de chiffrement compatibles FIPS. Pour savoir comment configurer la conformité FIPS 140, consultez la documentation spécifique à votre machine virtuelle Java.
Pour voir les modules approuvés pour la configuration FIPS, reportez-vous à Modules validés dans le programme de validation des modules de chiffrement.
Les fournisseurs peuvent avoir à effectuer des étapes supplémentaires pour configurer une machine virtuelle Java en mode FIPS.
Certificat TLS approprié
Pour vous connecter à SQL Server en mode FIPS, vous devez disposer d’un certificat TLS/SSL valide. Installez-le ou importez-le dans le magasin de clés Java sur l’ordinateur client (JVM) où FIPS est activé.
Importation du certificat TLS dans le magasin de clés Java
Pour FIPS, vous devrez très probablement importer le certificat (.cert) dans PKCS ou dans un format spécifique au fournisseur. Utilisez l’extrait de code suivant pour importer le certificat TLS/SSL et le stocker dans un répertoire de travail au format de magasin de clés approprié. TRUST_STORE_PASSWORD est votre mot de passe pour le magasin de clés 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);
}
L’exemple suivant montre l’importation d’un certificat Azure TLS/SSL au format PKCS12 avec le fournisseur BouncyCastle. Le certificat est importé dans le répertoire de travail nommé MyTrustStore_PKCS12 à l’aide de l’extrait de code suivant :
saveGenericKeyStore(BCFIPS, PKCS12, "SQLAzure SSL Certificate Name", "SQLAzure.cer");
Fichiers de stratégie appropriés
Pour certains fournisseurs FIPS, des fichiers JAR de stratégie illimités sont nécessaires. Dans de tels cas, pour Sun/Oracle, téléchargez les fichiers de stratégie de compétence de force illimitée d’extension de chiffrement Java (JCE) pour JRE 8 ou JRE 7.
Paramètres de configuration appropriés
Pour exécuter le pilote JDBC en mode compatible FIPS, configurez les propriétés de connexion comme indiqué dans le tableau suivant.
Propriétés
Propriété | Type | Default | Description | Notes |
---|---|---|---|---|
encrypt |
Chaîne ["true / false / strict"] | "true" | Pour le chiffrement de la machine virtuelle Java activée pour FIPS, la propriété doit être true | La valeur par défaut est passée de false à true dans la version 10.2. Dans la version 11.2.0, le type est passé de booléen à String et l’option stricte a été ajoutée pour permettre la prise en charge de TDS 8.0. |
TrustServerCertificate |
Booléen [« true / false »] | "false" | Pour FIPS, l’utilisateur doit valider la chaîne de certificats, de sorte que l’utilisateur doit utiliser la valeur de false pour cette propriété. | |
trustStore |
String | null | Chemin du fichier de magasins de clés Java où vous avez importé votre certificat. Si vous installez le certificat sur votre système, vous n’avez rien à faire. Le pilote utilise des fichiers cacerts ou jssecacerts. | |
trustStorePassword |
String | null | Mot de passe utilisé pour vérifier l'intégrité des données trustStore. | |
fips |
Booléen [« true / false »] | "false" | Pour la machine virtuelle Java activée pour FIPS, la propriété doit être true | Ajouté au point 6.1.4 (version 6.2.2 stable) |
fipsProvider |
String | null | Fournisseur FIPS configuré dans la machine virtuelle Java. Par exemple, BCFIPS ou SunPKCS11-NSS | Ajouté au point 6.1.2 (version 6.2.2 stable), déconseillé dans 6.4.0 : consultez les détails ici. |
trustStoreType |
String | JKS | Pour le mode FIPS, définissez le type de magasin de confiance PKCS12 ou le type défini par le fournisseur FIPS | Ajouté au point 6.1.2 (version 6.2.2 stable) |