gpt4 book ai didi

java - 使用 Java 忽略 SSL 证书错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:27 24 4
gpt4 key购买 nike

Apache Http 客户端。可以看相关代码here :

String url = "https://path/to/url/service";
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(url);

// Test whether to ignore cert errors
if (ignoreCertErrors){
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager(){
public X509Certificate[] getAcceptedIssuers(){ return null; }
public void checkClientTrusted(X509Certificate[] certs, String authType) {}
public void checkServerTrusted(X509Certificate[] certs, String authType) {}
}
};

try {
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
} catch (Exception e){
e.printStackTrace();
}
}

try {

// Execute the method (Post) and set the results to the responseBodyAsString()
int statusCode = client.executeMethod(method);
resultsBody = method.getResponseBodyAsString();

} catch (HttpException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
} finally {
method.releaseConnection();
}

这是每个人都说用来忽略 SSL 证书错误的方法(只为暂存设置它,不会在生产中使用)。但是,我仍然收到以下异常/堆栈跟踪:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building unable to find valid certification path to requested target

任何提示都会很棒。如果我做错了 TrustManager,或者我应该以不同的方式执行 HTTP Post 方法,无论哪种方式。

谢谢!

最佳答案

首先,不要忽略证书错误。相反,对付他们。忽略证书错误会打开与潜在 MITM 攻击的连接。这就像关闭烟雾警报器中的蜂鸣器,因为有时它会发出噪音...

当然,说它仅用于测试代码很诱人,它不会最终投入生产,但我们都知道截止日期临近时会发生什么:代码在测试时没有显示任何错误 -> 我们可以按原样发货。如果需要,您应该设置一个测试 CA。制作起来并不难,整个过程肯定不会比引入自定义代码进行开发并在生产中删除它更难。

您显然正在使用 Apache Http 客户端:

HttpClient client = new HttpClient();
int statusCode = client.executeMethod(method);

然而,您正在使用您创建的 SSLContext 初始化 javax.net.ssl.HttpsURLConnection:

HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

这完全独立于 Apache Http 客户端设置。

相反,您应该为 Apache Http 客户端库设置 SSLContext,如 this answer 中所述。 .如果您使用的是 Apache Http Client 3.x,则需要设置自己的 SecureProtocolSocketFactory 以使用该 SSLContext(参见示例 here)。不过值得升级到 Apache Http Client 4.x,它直接支持 SSLContext

您还可以使用 Pascal's answer正确导入证书。同样,如果您遵循该问题的公认答案(凯文),您确​​实会忽略该错误,但这会使连接容易受到 MITM 攻击。

关于java - 使用 Java 忽略 SSL 证书错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12060250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com