Java https 请求绕过 SSL 证书验证问题

2022-12-13 15:38:36 +08:00
 mengyxu

同一个方法,用 JUnit 测试类跑没有问题,程序运行起来定时器跑就抛异常(No subject alternative names present),半天了没有头绪,求帮忙分析分析. JDK17,springboot2.7.1,JUnit5

1758 次点击
所在节点    Java
4 条回复
blankmiss
2022-12-13 15:41:35 +08:00
你为什么不发哥 gist 出来
Hancock
2022-12-13 15:48:53 +08:00
mengyxu
2022-12-13 15:54:17 +08:00
@Hancock 我用 apache 的 httpclient 是没有问题的,我是想着换成 jdk11 自带 httpClient,结果遇到了这个问题
b2byco
2022-12-13 22:48:32 +08:00
试试这个
try {
X509TrustManager x509TrustManager = new X509TrustManager() {@
Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}@
Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}@
Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
};
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init((KeyManager[]) null, new X509TrustManager[] {
x509TrustManager
}, (SecureRandom) null);
HttpClient client = HttpClient.newBuilder().sslContext(sslContext).followRedirects(HttpClient.Redirect.ALWAYS).version(HttpClient.Version.HTTP_1_1).build();
URI uri = new URI("https", "//", null);
HttpRequest r = HttpRequest.newBuilder().uri(uri).GET().build();
var s = client.send(r, HttpResponse.BodyHandlers.ofString());
System.out.println(s.body());
} catch(Exception e) {}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/902215

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX