使用HTTPS(不受信任的证书)使用Java访问网站时出现问题

时间:2011-05-02 08:04:01

标签: java ssl https

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

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

有人做这样的工作吗? 非常感谢您的帮助! 亨利

2 个答案:

答案 0 :(得分:1)

实现一个不验证任何内容的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所述)此类信任管理器应仅用于测试/原型设计。

答案 1 :(得分:0)

如果您信任该证书,则应将其添加到应用程序服务器的信任库中。实现不执行证书检查的信任管理器是一个安全漏洞。

相关问题