TLS的弹性城堡配置



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

我需要使用TLS_DHE_RSA_WITH_AES_128_CCM密码套件,标准Java不支持,所以很多人建议使用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的步骤吗?

BouncyCastleProvider将CCM操作模式下的AES等加密算法添加到Cipher等类的可用算法中。由于默认情况下Java中不包括CCM,因此您需要通过代码(即Security.addProvider(new BouncyCastleProvider))注册该提供程序,或者将其添加到java.security文件中(如问题所示)。你可能会想把它添加到提供者列表的末尾,因为Oracle提供者的算法通常经过更好的测试,并且可以使用硬件加速来加速。

然而,BouncyCastleProvider包含TLS协议的实现。您需要为此注册BouncyCastleJsseProvider。这是必需的,因为Java TLS实现不会神奇地知道如何在Bouncy Castle中使用CCM实现。JSSE是Java安全套接字扩展的缩写。

你可以在提供者的开头添加这个提供者,这样你就可以确定这个提供者是用来实现TLS的:

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

也可以直接注册到java.security文件中

请注意,JSSE提供程序没有为CipherSignature提供诸如RSA或AES之类的实现,因此它不应该妨碍。

最新更新