我有一个 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/