java - 使用 BouncyCaSTLe 在 Java 6 上运行 TLS 1.2

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

我有一个 Apache Http 客户端,它需要连接到需要 TLS 1.2 的服务器,但现在这个客户端运行在 jdk 1.6 上,目前无法升级。所以我选择了充气城堡。我在我的 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 服务器)?

最佳答案

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 .

关于java - 使用 BouncyCaSTLe 在 Java 6 上运行 TLS 1.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38079928/

相关文章:

java - 通过热插拔机制在运行时更改方法

ssl - OpenSSL 连接错误 SSL23_GET_SERVER_HELLO,但浏览器和 curl 有效

java - 在非嵌入式 Tomcat 上使用 SSL 运行 SpringBoot

java - 如何使用充气城堡签署签名数据?

android - Android 的 X.509 认证

java - 是否溢出,与 >>> 运算符

java - 将几种方法组合成唯一的一种。泛型

java - PKCS12 到 JKS 转换失败

java - TLS 的 Bouncy CasSTLe 配置

java - 非法前向引用 netbeans swing