FIPS モード
SQL Server 用 Microsoft JDBC ドライバーは、FIPS 140 準拠となるように構成された JVM での実行をサポートします。
前提条件
- FIPS 構成の JVM
- 適切な TLS/SSL 証明書
- 適切なポリシー ファイル
- 適切な構成パラメーター
FIPS 構成の JVM
一般に、アプリケーションでは、FIPS に準拠している暗号化プロバイダーを使用するように java.security
ファイルを構成できます。 FIPS 140 準拠の構成方法については、JVM 固有のドキュメントを参照してください。
FIPS 構成として承認されたモジュールを確認するには、「Validated Modules in the Cryptographic Module Validation Program」 (暗号化モジュール検証プログラムで検証済みのモジュール) を参照してください。
ベンダーによっては、FIPS を満たすように JVM を構成するその他の手順を用意している場合があります。
適切な TLS 証明書
FIPS モードで SQL Server に接続するには、有効な TLS/SSL 証明書が必要です。 FIPS を有効にするクライアント マシン (JVM) 上の Java キーストアにインストールまたはインポートします。
Java キーストアに TLS 証明書をインポートする
FIPS では、ほとんどの場合、PKCS またはプロバイダー固有の形式で証明書 (.cert) をインポートする必要があります。 次のスニペットを使用して、TLS/SSL 証明書をインポートし、適切なキーストア形式を使用して作業ディレクトリに格納します。 TRUST_STORE_PASSWORD は、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);
}
次の例では、BouncyCastle プロバイダーを使用して、Azure TLS/SSL 証明書を PKCS12 形式でインポートしています。 証明書は、次のスニペットを使用して、MyTrustStore_PKCS12 という名前の作業ディレクトリにインポートされます。
saveGenericKeyStore(BCFIPS, PKCS12, "SQLAzure SSL Certificate Name", "SQLAzure.cer");
適切なポリシー ファイル
一部の FIPS プロバイダーには、無制限のポリシー jars が必要です。 このような場合、Sun / Oracle については、JRE 8 または JRE 7 の Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files をダウンロードします。
適切な構成パラメーター
JDBC ドライバーを FIPS 準拠モードで実行するには、次の表に示すように接続プロパティを構成します。
Properties
プロパティ | Type | Default | 説明 | メモ |
---|---|---|---|---|
encrypt |
String ["true / false / strict"] | "true" | FIPS 対応 JVM の場合、暗号化プロパティを true にする必要があります。 | バージョン 10.2 では、既定値が false から true に変更されました。 バージョン 11.2.0 では、型がブール値から String に変更され、TDS 8.0 のサポートを可能にするために strict オプションが追加されました。 |
TrustServerCertificate |
boolean ["true / false"] | "false" | FIPS の場合、ユーザーは、証明書チェーンを検証する必要があるため、このプロパティには値 "false" を使用する必要があります。 | |
trustStore |
String | null | 証明書をインポートした Java キーストア ファイルのパス。 証明書をシステムにインストールする場合、何も渡す必要はありません。 ドライバーは、cacerts ファイルまたは jssecacerts ファイルを使用します。 | |
trustStorePassword |
String | null | trustStore データの整合性を確認するために使用するパスワードです。 | |
fips |
boolean ["true / false"] | "false" | FIPS 対応 JVM の場合、このプロパティを true にする必要があります。 | 6\.1.4 で追加 (安定リリース 6.2.2) |
fipsProvider |
String | null | JVM で構成される FIPS プロバイダー。 たとえば、BCFIPS、SunPKCS11-NSS など。 | 6\.1.2 で追加 (安定リリース 6.2.2)、6.4.0 で非推奨。詳細については、こちらを参照してください。 |
trustStoreType |
String | JKS | FIPS モードの場合、信頼ストアの種類 (PKCS12 または FIPS プロバイダーで定義された種類) を設定します。 | 6\.1.2 で追加 (安定リリース 6.2.2) |