用自己的实现和信任管理器替换 SSLContext 默认值

2024-02-27

基于 Jcs 的回答(HttpUnit WebConversation SSL 问题 https://stackoverflow.com/questions/4868654/httpunit-webconversation-ssl-issues)我尝试更换SSLContext.getDefault()和我自己的信托经理。

SSLContext ssl = SSLContext.getDefault();
ssl.init(null, new X509TrustManager[]{new AnyTrustManager()}, null);
ssl.setDefault(ssl);

AnyTrustManager():

import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;

public class AnyTrustManager implements X509TrustManager
{
  X509Certificate[] client = null;
  X509Certificate[] server = null;

  public void checkClientTrusted(X509Certificate[] chain, String authType)
  {
    client = chain;
  }

  public void checkServerTrusted(X509Certificate[] chain, String authType)
  {
    server = chain;
  }

  public X509Certificate[] getAcceptedIssuers()
  {
    return new X509Certificate[0];
  }
}

我需要这样做,因为第 3 方 .jar 仅使用 SSLContext 默认值,这会导致一些问题,因此在此操作期间,我必须将默认值更改为其他内容,然后稍后再将其更改回来。

不幸的是,这会抛出一个java.security.KeyManagementException: Default SSLContext is initialized automatically例外。

我怎样才能让它在 Java 8 上工作?


“默认”SSLContext 是不可变的。因此,TrustManager 实例是不可能的。相反,你应该更换

SSLContext ssl = SSLContext.getDefault();

通过(例如)

SSLContext ssl = SSLContext.getInstance("TLSv1");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用自己的实现和信任管理器替换 SSLContext 默认值 的相关文章

随机推荐