FIPS 模式

下载 JDBC 驱动程序

Microsoft JDBC Driver for SQL Server 支持在配置为“符合 FIPS 140 标准”的 JVM 中运行 。

先决条件

  • 配置了 FIPS 的 JVM
  • 相应的 TLS/SSL 证书
  • 相应的策略文件
  • 相应的配置参数

配置了 FIPS 的 JVM

通常,应用程序可以将 java.security 文件配置为使用符合 FIPS 标准的加密提供程序。 有关如何配置符合 FIPS 140 标准的信息,请参阅特定于 JVM 的文档。

若要查看已批准的 FIPS 配置模块,请参阅加密模块验证计划中的已验证模块

供应商可能有一些其他步骤来配置启用了 FIPS 的 JVM。

相应的 TLS 证书

若要连接到 FIPS 模式下的 SQL Server,必须有有效的 TLS/SSL 证书。 将其安装或导入到启用了 FIPS 的客户端计算机 (JVM) 上的 Java 密钥存储中。

将 TLS 证书导入 Java 密钥存储

对于 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 提供程序导入 PKCS12 格式的 Azure TLS/SSL 证书。 该证书使用以下代码片段导入到名为 MyTrustStore_PKCS12 的工作目录中:

saveGenericKeyStore(BCFIPS, PKCS12, "SQLAzure SSL Certificate Name", "SQLAzure.cer");

相应的策略文件

对于某些 FIPS 提供程序,需要无限制的策略 jar。 在这些情况下,对于 Sun/Oracle,下载适用于 JRE 8JRE 7 的 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files。

相应的配置参数

若要在符合 FIPS 标准的模式下运行 JDBC 驱动程序,请按下表中所示配置连接属性。

属性

属性 类型 默认 说明 说明
encrypt 字符串 ["true / false / strict"] “true” 对于启用了 FIPS 的 JVM,加密属性应为 true 在版本 10.2 中,默认值从 false 更改为 true。 在版本 11.2.0 中,类型已从“布尔”更改为“字符串”,并且添加了“严格”选项以允许 TDS 8.0 支持。
TrustServerCertificate 布尔 [“true / false”] “false” 对于 FIPS,用户需要验证证书链,因此用户应将“false”值用于此属性 。
trustStore 字符串 Null 导入证书的 Java 密钥存储文件路径。 如果在系统上安装证书,则无需传递任何内容。 驱动程序使用 cacerts 或 jssecacerts 文件。
trustStorePassword 字符串 Null 用于检查 trustStore 数据完整性的密码。
fips 布尔 [“true / false”] “false” 对于启用了 FIPS 的 JVM,此属性应为 true 已在 6.1.4 中添加(稳定版 6.2.2)
fipsProvider 字符串 Null JVM 中配置的 FIPS 提供程序。 例如,BCFIPS 或 SunPKCS11-NSS 已在 6.1.2 中添加(稳定版 6.2.2),已在 6.4.0 中弃用 - 请在此处查看详细信息。
trustStoreType 字符串 JKS 对于 FIPS 模式,请将信任存储类型设置为 PKCS12 或由 FIPS 提供程序定义的类型 已在 6.1.2 中添加(稳定版 6.2.2)