是否有可以处理 SSL 连接并支持 AES-NI 指令的 Java 安全提供程序?
我曾尝试将 SunPKCS11 与 Mozilla NSS 一起使用,但它不适用于使用 AES 加密的 SSL 连接。根据Java PKCS#11 Reference Guide,此提供程序不支持 SSLContext.* “算法” :-(
是否有可以处理 SSL 连接并支持 AES-NI 指令的 Java 安全提供程序?
我曾尝试将 SunPKCS11 与 Mozilla NSS 一起使用,但它不适用于使用 AES 加密的 SSL 连接。根据Java PKCS#11 Reference Guide,此提供程序不支持 SSLContext.* “算法” :-(
2012 年 12 月最近有一些关于openjdk的活动,以支持x86 上的AES-NI。见JEPS-164
此处讨论了2012 年 12 月与 jdk8 的合并,包括更改汇编代码以支持 AES-NI。从讨论看来,更改可能会重新移植到 jdk7u12。
2012 年 11 月的IBM JCE for Java V7 包括对AES-NI 的支持。
如果使用这些新的 JRE 之一,您的 java SSL/TLS 实现应该利用AES-NI而无需使用 PKCS11 提供程序。
您可以检查您的 BIOS 以查看是否可以启用/禁用AES-NI 。如果可以,那么您可以运行 AES 加密/解密的微基准测试,看看有什么区别。
我相信我已经找到了我的问题的答案。
首先,我为两个不同的库混合了“提供者”:JCE(加密算法的实现)和 JSSE(对安全套接字的支持)。
根据JavaTM 安全套接字扩展 (JSSE) 参考指南,JCE 和硬件加速/智能卡支持部分,默认 JSSE 提供程序 (SunJSSE) 使用 JCE 进行所有加密操作。
可以将 JCE 配置为使用硬件加速的 AES,例如通过使用 SunPKCS11 + mozilla-nss 库,如本答案中所述。
剩下要做的(在我的情况下)是确保 SSL 配置了正确的密码,并验证 SunPKCS11 是否实际被 ssl 连接使用。