FIPS 模式
Microsoft JDBC Driver for SQL Server 支援在已設定為「符合 FIPS 140 規範」 的 JVM 中執行。
Prerequisites
- 已設定 FIPS 的 JVM
- 適當的 TLS/SSL 憑證
- 適當的原則檔案
- 適當的設定參數
已設定 FIPS 的 JVM
一般來說,應用程式可以設定 java.security
檔案來使用符合 FIPS 規範的密碼編譯提供者。 請參閱您 JVM 的特定文件以了解如何設定 FIPS 140 合規性。
若要查看適用於 FIPS 設定的已核准模組,請參閱密碼編譯模組驗證計畫中的已驗證模組 \(英文\)。
廠商可能需要進行一些其他步驟,才能使用 FIPS 來設定 JVM。
適當的 TLS 憑證
若要在 FIPS 模式中連線至 SQL Server,需要有效的 TLS/SSL 憑證。 將其安裝或匯入到已啟用 FIPS 之用戶端電腦 (JVM) 的 Java Key Store 上。
將 TLS 憑證匯入至 Java keyStore
針對 FIPS,您很可能需要以 PKCS 或提供者特定的格式來匯入憑證 (.cert)。 使用下列程式碼片段來匯入 TLS/SSL 憑證,並搭配適當的金鑰儲存區格式以將其儲存於工作目錄中。 TRUST_STORE_PASSWORD 是您針對 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);
}
下列範例會搭配 BouncyCastle 提供者,以 PKCS12 格式匯入 Azure TLS/SSL 憑證。 透過使用下列程式碼片段,可將該憑證匯入到名為 MyTrustStore_PKCS12 的工作目錄中:
saveGenericKeyStore(BCFIPS, PKCS12, "SQLAzure SSL Certificate Name", "SQLAzure.cer");
適當的原則檔案
針對某些 FIPS 提供者,需要無限制的原則 jars。 在那種情況下,針對 Sun / Oracle,請下載適用於 JRE 8 \(英文\) 或 JRE 7 \(英文\) 的 Java 密碼編譯延伸模組 (JCE) 無限制的強度管轄權原則檔。
適當的設定參數
若要在符合 FIPS 規範的模式中執行 JDBC 驅動程式,請依下表所示設定連線屬性。
屬性
屬性 | 類型 | 預設 | 描述 | 附註 |
---|---|---|---|---|
encrypt |
字串 ["true / false / strict"] | "true" | 針對啟用 FIPS 的 JVM,加密屬性應該為 true | 預設在 10.2 版中從 false 變更為 true。 在 11.2.0 版中,類型已從布林值變更為字串,並新增嚴格選項以允許 TDS 8.0 支援。 |
TrustServerCertificate |
boolean ["true / false"] | "false" | 針對 FIPS,使用者需要驗證憑證鏈結,因此使用者應該針對此屬性使用 "false" 值。 | |
trustStore |
String | null | 您已匯入憑證的 Java KeyStore 檔案路徑。 如果您是在您的系統上安裝憑證,便不需要傳遞任何內容。 驅動程式會使用 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) |