为 JDBC 安装 FIPS 客户端驱动程序

Vertica 提供符合联邦信息处理标准 (FIPS) 的 JDBC 客户端驱动程序。使用此 JDBC 客户端驱动程序访问与 FIPS 兼容的系统。有关 FIPS 的详细信息,请参阅美国联邦信息处理标准

在 JDBC 客户端上实施 FIPS 需要一个名为 BouncyCastle 的第三方 JRE 扩展,它是一组用于加密的 API。将 BouncyCastle API 与 JDK 1.7 和 1.8 以及支持的符合 FIPS 的操作系统一起使用。

以下过程将 FIPS BouncyCastle .jar 添加为 JVM JSSE 提供程序:

  1. 下载 BouncyCastle FIPS .jar 文件 bc-fips-1.0.0.jar

  2. bc-fips-1.0.0.jar 添加为 JRE 库扩展:

    path/to/jre/lib/ext/bc-fips-1.0.0.jar
    
  3. <path to jre>/lib/security/java.security 中将 BouncyCastle 添加为 SSL 安全提供程序:

    security.provider.1=org.bouncycastle.jcajce.provider.BouncyCastle FipsProvider
    security.provider.2=com.sun.net.ssl.internal.ssl.Provider BCFIPS
    security.provider.3=sun.security.provider.Sun
    
  4. 使用以下 JVM java -D 系统属性命令实参将 KeyStore 和 TrustStore 文件设置为 BCFIPS:

    export JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.keyStoreProvider=BCFIPS
    export JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStoreProvider=BCFIPS
    
  5. path/to/jre/lib/security/java.security 中将 KeyStore 实施的默认类型设置为 BCFKS:

    keystore type=BCFKS
    ssl.keystore.type=BCFKS
    
  6. 创建 BCFKS 类型的密钥库和信任库:

    cd path/to/jre
    -storetype BCFKS
    -providername BCFIPS
    -providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider
    -provider org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider
    -providerpath bc-fips-1.0.0.jar
    -alias CARoot
    -import -file path/to/server.crt.der
    
  7. 出现提示时,输入密钥库密码。系统将显示以下消息以确认已将证书添加到密钥库:

    "Certificate was added to the keystore"
    
  8. 使用 SSL DB 运行 Java 程序:

    1. 将 vertica.kafka.keystore.bcfks 密钥库从 path/to/jre/lib/ext/ 复制到 Java 程序文件夹。

    2. 将 Vertica 服务器证书转换为能够由 Java 理解的形式:

      $ path/to/java/bin/keytool -keystore verticastore -keypasswd -storepass password
                              -importkeystore -noprompt -alias verticasql -import -file server.crt.der
      
    3. 安装 JDBC

  9. 对实施进行测试:

    $ java -Djavax.net.debug=ssl -Djavax.net.ssl.keyStore='vertica.kafka.keystore.bcfks'
    -Djavax.net.ssl.keyStorePassword='password'
    -Djavax.net.ssl.trustStore='path/to/verticastore'
    -Djavax.net.ssl.trustStorePassword='password'
    -cp .:vertica-jdbc-12.0.0-0.jar FIPSTest