FIPS 模式

下載 JDBC 驅動程式

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)