我正在使用一个使用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提供程序没有为Cipher
或Signature
提供诸如RSA或AES之类的实现,因此它不应该妨碍。