Bouncy Castle Providers
BouncyCastle 介绍
Bouncy Castle
是一个完善了默认 Java 加密拓展(JCE)的 Java 库,它比 Sun 提供的默认 JCE 多提供了许多密钥套件与算法。
除此之外,Bouncy Castle
有许多能读取像 PEM 和 ASN.1 这些晦涩格式的工具。这些格式正常人是不会想去自己重写一遍的。
在 Pulsar 中,安全与加密都对 BouncyCastle Jar 包有依赖。 关于Bouncy Castle FIPS的详细安装和配置,请参阅 BC FIPS 文档, 特别是 用户指南 和 安全政策 PDF 文档。
Bouncy Castle
提供 FIPS 与 non-FIPS 两个版本。 但在 JVM 中,不能同时引入两个版本,所以需要先排除当前版本才能引入另一个版本。
在 Pulsar 中,安全和加密方法也依赖于 Bouncy Castle
, 特别是 TLS 认证 和 传输加密。 本文档包含使用 Pulsar 时的 Bounccastle FIPS(BC-FIPS)和 non-FIPS(BC-non-FIPS)版本的配置。
引入 BC-non-FIPS 的依赖
默认情况下,Bouncycastle 的 non-FIPS 版本与 Pulsar Broker 和 Java 客户端一起构建。
在 bouncy-castle/bc/pom.xml
中定义的 Pulsar 模块 bouncy-castle-bc
,包含了Pulsar 所需的 non-FIPS jar 包。
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>${bouncycastle.version}</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-ext-jdk15on</artifactId>
<version>${bouncycastle.version}</version>
</dependency>
And based on Pulsar module bouncy-castle-bc
, Pulsar shades a fat jar in module bouncy-castle-bc-shaded
that contains needed classes of BouncyCastle non-FIPS jars. By using this bouncy-castle-bc-shaded
module, user can easily include and exclude BouncyCastle non-FIPS jars.
Pulsar 客户端和 Broker 在 BC-non-FIPS 上的依赖
Pulsar 客户端(pulsar-client-original
) 模块可以通过以下方式添加依赖来引入 BouncyCastle non-FIPS jar 包:
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>bouncy-castle-bc-shaded</artifactId>
<version>${project.parent.version}</version>
</dependency>
Pulsar Broker (pulsar-broker
) 模块可以通过间接引入 Pulsar 客户端(pulsar-client-original
) 模块来引入 BouncyCastle non-FIPS jar 包。
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-client-original</artifactId>
<version>${project.version}</version>
</dependency>
排除 BC-non-FIPS 并引入 BC-FIPS
在理解上述依赖后,用户可以轻松地排除 non-FIPS 版本,并引入 FIPS 版本。
BC-FIPS
在 bouncy-castle/bcfips/pom.xml
中定义的 Pulsar 模块 bouncy-castle-bcfips
,包含了Pulsar 所需的 FIPS jar 包。
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bc-fips</artifactId>
<version>${bouncycastlefips.version}</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-fips</artifactId>
<version>${bouncycastlefips.version}</version>
</dependency>
用户可以选择直接引入模块 bouncy-castle-bfips
,或者引入原生的 BC-FIPS jar 包。
例如:
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>pulsar-broker</artifactId>
<version>${project.version}</version>
<exclusions>
<exclusion>
<groupId>${project.groupId}</groupId>
<artifactId>bouncy-castle-bc-shaded</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--exclude bouncy castle non-FIPS version, then load fips version-->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bc-fips</artifactId>
<version>${bouncycastlefips.version}</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-fips</artifactId>
<version>${bouncycastlefips.version}</version>
</dependency>
除此之外,bouncy-castle-bcfips
模块构建会包含一个 NAR 格式的输出,你可以通过 -DBcPath='nar/file/path'
设置 java 环境,Pulsar 会自动载入它。
更多的示例可以参考模块 bcfips-include-test
与 bcfips-nar-test
。