FIPS 模式
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 8 或 JRE 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) |