在java 1.4

时间:2017-06-22 08:32:13

标签: bouncycastle tls1.2 java1.4

我正试图点击支持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

1 个答案:

答案 0 :(得分:1)

我可以使用 bctls lib来解决这个问题,但不幸的是它似乎没有 Java 1.4 的版本。

我在Bouncy Castle's websiteMvn 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]