TLS 的 Bouncy Castle 配置

Bouncy Castle Configuration for TLS

我正在使用使用 java 进行 TLS 通信的测试应用程序。标准 Oracle java 安装在我的系统中。

我需要使用标准 Java 不支持的 TLS_DHE_RSA_WITH_AES_128_CCM 密码套件,所以很多人建议使用 Bouncy Castle。我下载并复制了 bcprov-ext-jdk18on-171.jar$JAVA_HOME/lib 文件夹。 此外,更新了 java.security 文件以将 Bouncy Castle 包含在提供商列表中,如下所示:

security.provider.4=org.bouncycastle.jce.provider.BouncyCastleProvider

不过我还是无法TLS_DHE_RSA_WITH_AES_128_CCM工作。

我做的步骤是否充分且正确?有人可以建议安装和配置 Bouncy Castle 的步骤吗?

不,因为您不需要首先将 JCE 提供程序添加到类路径中,因为它不包含在标准的 Bouncy Castle (BC) 提供程序中 bctls-$version.jar。还需要注册 TLS / JSSE 提供程序:

Security.insertProviderAt(new rg.bouncycastle.jsse.provider.BouncyCastleJsseProviderBouncyCastleJsseProvider(), 1);

或以任何其他方式注册,例如通过将其包含在 java.security 文件中。

由于您可能希望将提供程序用于所有(如果不是大部分)TLS 需求,因此将其添加到最高优先级是有意义的。请注意,JSSE 提供程序不为 CipherSignature 提供 RSA 或 AES 等实现,因此它不应该妨碍。

请注意,Sun 的 RSA 和 AES 实现仍可由 Bouncy Castle JSSE 提供程序使用,并且由于这些可能经过更好的测试并且可能使用硬件加速,因此您可能需要确保 BouncyCastleProvider 使用 addProvider 作为列表中的最后一个提供商加载。提供程序可能确实是必需的,因为标准 Java 安装提供的默认提供程序似乎缺少 CCM 支持。

如果您想知道:JSSE 是 Java 安全套接字扩展。