我尝试从Java应用程序使用HTTP访问站点。由于该应用程序在开发环境中运行,因此不信任相应的证书。

当使用javax.net.ssl包时,我尝试定义一个自定义的TrustManager实现,该实现允许所有内容并将其传递到SslContext的init方法的第二个参数中,但这不起作用。

有人做这样的工作吗?
非常感谢您的帮助!
蒂埃里

最佳答案

实现一个不验证任何内容的TrustManager非常容易(在客户端和服务器端均可使用):

public class NoVerifyTM implements X509TrustManager
{
  void checkClientTrusted(X509Certificate[] chain, String authType) {
    /* Accept All */
  }

  void checkServerTrusted(X509Certificate[] chain, String authType) {
    /* Accept All */
  }

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


要使用此TrustManager

SSLContext ctx = SSLContext.getDefault();
ctx.init(null, new TrustManager[] { new NoVerifyTM() }, null);
SSLSocketFactory sf = ctx.getSocketFactory();


请注意(如@hanwg所说),此类信任管理器仅应用于测试/原型设计目的。

09-10 07:39
查看更多