我尝试从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所说),此类信任管理器仅应用于测试/原型设计目的。