【问题标题】:Replace SSLContext default with own implementation and trust manger用自己的实现和信任管理器替换 SSLContext 默认值
【发布时间】:2016-02-18 17:52:15
【问题描述】:

根据 Jcs (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 上工作?

【问题讨论】:

    标签: java ssl java-8


    【解决方案1】:

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

    SSLContext ssl = SSLContext.getDefault();
    

    通过(例如)

    SSLContext ssl = SSLContext.getInstance("TLSv1");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-25
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多