我正试图点击支持TLSv1.2的网络服务。我使用的是Java 1.4。它不支持TLSv1.2。
现在有人告诉我BC可以解决我的问题。 虽然它可以用SSLEngine作为替代品以某种方式替代? 这可能与卑诗省有关吗?
我需要做些什么才能让SSLEngine
(与TLSv1一起使用)
对于DH的primesize没有如此低的限制,非阻塞io场景。
我尝试了什么:
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
。
答案 0 :(得分:1)
我可以使用 bctls lib来解决这个问题,但不幸的是它似乎没有 Java 1.4 的版本。
我在Bouncy Castle's website和Mvn Repository中找到的唯一版本是 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]