我尝试使用Java应用程序中的HTTP访问站点。由于应用程序在开发环境中运行,因此不信任相应的证书。
当使用javax.net.ssl包时,我尝试定义一个自定义的TrustManager实现,该实现允许所有内容并在SslContext的init方法的第二个参数内传递它,但是这不起作用。
有人做这样的工作吗? 非常感谢您的帮助! 亨利
答案 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)
如果您信任该证书,则应将其添加到应用程序服务器的信任库中。实现不执行证书检查的信任管理器是一个安全漏洞。