我正在尝试使用支持 TLSv1.2 的网络服务。我正在使用Java 1.4。它不支持 TLSv1.2。
现在有人告诉我,BC可以解决我的问题。虽然它是否以某种方式与 SSLEngine 一起作为替代品?BC可以吗?
我必须做什么才能获得工作SSLEngine
(用于 TLSv1 中的非阻塞 IO 方案(,对 DH 的素数没有如此低的限制。
我尝试过:
Security.addProvider(new BouncyCastleProvider());
仅凭这一点似乎并不能解决问题。
所以而不是
SSLContext.getInstance("TLSv1"); //which works alas only little DH keys.
我尝试调用以下内容:
SSLContext.getInstance("TLSv1","BC");
SSLContext.getInstance("TLS","BC");
SSLContext.getInstance("TLSv1.2","BC");
SSLContext.getInstance("ssl","BC");
虽然他们都扔NoSuchAlgorithmException
.
我可以通过使用 bctls lib 来解决这个问题,但不幸的是,它似乎没有 Java 1.4 的版本。
我在Bouncy Castle的网站和Mvn存储库中唯一能找到的版本是bctls-jdk15on-157(对于Java>= 1.5(。
无论如何,如果可以升级Java版本,您只需将此jar添加到项目中并使用org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
类(我在此测试中使用了Java 1.7(:
// add the JSSE provider
Security.addProvider(new BouncyCastleJsseProvider());
// tests
SSLContext.getInstance("TLSv1.1", BouncyCastleJsseProvider.PROVIDER_NAME);
SSLContext.getInstance("TLSv1.2", BouncyCastleJsseProvider.PROVIDER_NAME);
SSLContext.getInstance("TLSv1", BouncyCastleJsseProvider.PROVIDER_NAME);
上述所有测试运行均没有错误。
检查支持的所有 SSL 协议:
SSLContext context = SSLContext.getInstance("TLSv1", BouncyCastleJsseProvider.PROVIDER_NAME);
System.out.println(Arrays.toString(context.getSupportedSSLParameters().getProtocols())); // [TLSv1.1, TLSv1, TLSv1.2]
输出为:
[TLSv1.1, TLSv1, TLSv1.2]