在Java 6上运行TLS 1.2和BouncyCastle

时间:2016-06-28 15:08:20

标签: java ssl bouncycastle apache-httpclient-4.x tls1.2

我有一个Apache Http客户端需要连接到需要TLS 1.2的服务器,但是现在这个客户端在jdk 1.6上运行,此时无法升级。所以我选择了Bouncy Castle。我在我的Mac上进行了设置,如post所示。

这是我使用SSLContextBuilder的代码...

import org.apache.http.ssl.SSLContextBuilder;

 SSLContextBuilder sslContextBuilder = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
  public boolean isTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
    return true;
  }
});

 // set SSL context builder to use TLSv1 protocoil
 sslContextBuilder = sslContextBuilder.useProtocol("TLSv1.1");

但是在最后一行我得到了这个例外......

   Caught: java.security.NoSuchAlgorithmException: TLSv1.1 SSLContext not available
java.security.NoSuchAlgorithmException: TLSv1.1 SSLContext not available
at org.apache.http.ssl.SSLContextBuilder.build(SSLContextBuilder.java:271)

看起来SSLContextBuilder没有看到我的BouncyCastle。或者我的BouncyCastle不支持TLS 1.1吗?如果我将其更改为“TLSv1”,那么它可以正常工作。

或者是否有更好的方法(将我的apache httpclient连接到bouncycastle,以便我的java 6程序可以连接到tlsv1.2服务器)?

1 个答案:

答案 0 :(得分:0)

BouncyCastle只是一个JCE提供者(提供加密算法)而不是JSSE提供者(通过SSLSocket,SSLSocketFactory等提供SSL和TLS)。通过添加BouncyCastle作为安全提供程序,您只需注册BouncyCastle的JCE提供程序。更多信息here

由于Apache HttpClient也使用JSSE,因此您无法插入BouncyCastle的TLS实现。您可以利用BouncyCastle的TLS实现来扩展Java的JSSE类,但这需要一些努力。

如果您想使用BouncyCastle的TLS实施,您可以找到一个示例in this thread