【发布时间】:2023-03-14 15:35:02
【问题描述】:
我有一个项目,其中 HttpsURLConnection 被配置为使用自定义的 TrustManager,如下所示:
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, new TrustManager[]{new MyTrustManager()}, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
本项目中有一个 REST API 客户端,它使用 Jersey 客户端发送 HTTP/HTTPS 请求:
Client client = ClientBuilder.newClient();
但是,这个 Jerset 客户端发起的 HTTPS 连接没有使用我在 HttpsURLConnection 中设置的 defaultSSLSocketFactory 并且无法连接到不受信任的 HTTPS url。
我需要在此客户端上显式设置 SslContext 以使其与我的 TrustManager 一起使用。
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, new TrustManager[]{new MyTrustManager()}, null);
Client client = ClientBuilder.newBuilder().sslContext(sslContext).build();
有没有办法解决这个问题?
谢谢。
【问题讨论】:
-
没有。那篇文章讲授了如何通过 Jersey 向 HTTPS URL 发送请求。我知道如何做到这一点(如上一个 sn-p 所示)。我不知道的是如何让 Jersy 客户端使用我在 HttpsURLConnection 中设置的 SslContext。我想这样做的原因是我无权编辑 REST API 客户端代码以在 Jersey 客户端上显式设置 SslContext。