java - HttpClientBuilder 问题 : Could not initialize class sun. security.ssl.SSLContextImpl$CustomizedTLSContext

标签 java ssl

在下面的 java 代码中,我随机收到以下错误。

 final HttpClient client = HttpClientBuilder.create().build();
         final HttpGet request = new HttpGet(requestParameters);
         final HttpResponse response = client.execute(request);

错误:
java.lang.NoClassDefFoundError: Could not initialize class sun.security.ssl.SSLContextImpl$CustomizedTLSContext
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:291)
    at java.base/java.security.Provider$Service.getImplClass(Provider.java:1848)
    at java.base/java.security.Provider$Service.newInstance(Provider.java:1824)
    at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
    at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:164)
    at java.base/javax.net.ssl.SSLContext.getInstance(SSLContext.java:168)
    at org.apache.http.ssl.SSLContexts.createDefault(SSLContexts.java:51)
    at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:977)

我无法重现该问题,因为它是随机的。这是否意味着 ssl/tls 握手失败?

实现重试策略是否有助于解决此问题?
  public DefaultHttpRequestRetryHandler() {
        this(3, false);
    }

https://jar-download.com/artifacts/org.apache.httpcomponents/httpclient/4.5.2/source-code/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.java

以下是我正在使用的 java 库:
enter image description here

更新 : 虽然我认为我可以通过从 HttpClientBuilder 移出来解决这个问题到java.net.HttpUrlConnection ,不幸的是,我遇到了同样的错误:
java.lang.NoClassDefFoundError: Could not initialize class sun.security.ssl.SSLContextImpl$DefaultSSLContext
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:291)
    at java.base/java.security.Provider$Service.getImplClass(Provider.java:1848)
    at java.base/java.security.Provider$Service.newInstance(Provider.java:1824)
    at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
    at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:164)
    at java.base/javax.net.ssl.SSLContext.getInstance(SSLContext.java:168)
    at java.base/javax.net.ssl.SSLContext.getDefault(SSLContext.java:99)
    at java.base/javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:123)
    at java.base/javax.net.ssl.HttpsURLConnection.getDefaultSSLSocketFactory(HttpsURLConnection.java:335)
    at java.base/javax.net.ssl.HttpsURLConnection.<init>(HttpsURLConnection.java:292)
    at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.<init>(HttpsURLConnectionImpl.java:95)
    at java.base/sun.net.www.protocol.https.Handler.openConnection(Handler.java:62)
    at java.base/sun.net.www.protocol.https.Handler.openConnection(Handler.java:57)
    at java.base/java.net.URL.openConnection(URL.java:1051)

最佳答案

我的 Java 版本是 1.8.0_171。通过升级到 1.8.0_261,同样的问题得到了解决。

关于java - HttpClientBuilder 问题 : Could not initialize class sun. security.ssl.SSLContextImpl$CustomizedTLSContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56531174/

相关文章:

http - 仅将一个文件夹重定向到 HTTPS,将所有其他文件夹重定向到 HTTP

java - 为什么我的 Spring @Autowired 字段为空?

java - 文件上传和进度条

java - 如何在 Java 中为 url 对象定义显式构造函数

java - 异常 : cvc-type. 3.2.2:模式定义中的异常

MySQL - 需要 SSL 但服务器不支持它

java - 尝试从安全站点生成 Web 服务客户端时出现奇怪的证书错误

ssl - 如何在 Cloudfront 中使用 Amazon ACM 证书?

java - 在 Java 中打开非默认浏览器

python - Python 中的 SSLSocket 口令/密码