写点什么

Java 跳过证书访问 HTTPS

  • 2024-10-18
    四川
  • 本文字数:1242 字

    阅读完需:约 4 分钟

Java跳过证书访问HTTPS

在 Java 中,我们有时需要访问 HTTPS 站点,但由于一些原因,例如证书不被信任或者证书过期,我们可能会遇到 SSL 握手异常。在这种情况下,我们可能需要让 Java 在访问 HTTPS 站点时忽略 SSL 证书验证。但请注意,这种方法只应在开发或测试环境中使用,绝对不应在生产环境中使用,因为它将使你的应用程序对中间人攻击变得非常脆弱。

下面是如何在 Java 中忽略 SSL 证书验证的步骤:

首先,我们需要创建一个 TrustManager,该 TrustManager 不对证书链进行任何检查。这可以通过创建一个 TrustManager 数组,并在其中实现一个 X509TrustManager 接口来完成。X509TrustManager 是 TrustManager 的一种,它处理 X509 证书(大多数 SSL 证书都是 X509 证书)。

TrustManager[] trustAllCerts = new TrustManager[] {    new X509TrustManager() {        public java.security.cert.X509Certificate[] getAcceptedIssuers() {            return null;        }        public void checkClientTrusted(X509Certificate[] certs, String authType) {        }        public void checkServerTrusted(X509Certificate[] certs, String authType) {        }    }};
复制代码

然后,我们需要使用我们刚刚创建的 TrustManager 来创建一个 SSLContext。SSLContext 是 SSL 的上下文,它管理 SSL 的密钥和信任管理器。

SSLContext sc = SSLContext.getInstance("SSL");sc.init(null, trustAllCerts, new java.security.SecureRandom());
复制代码

最后,我们需要告诉 HttpsURLConnection 使用我们的 SSLContext。

HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
复制代码

以上的代码将会导致 Java 忽略所有 HTTPS 站点的 SSL 证书验证。但是,这仅仅对使用 HttpsURLConnection 的连接有效。如果你使用其他方法来建立 HTTPS 连接,例如使用 Apache HttpClient,你需要在那个库的上下文中设置 SSLContext。

这是 Apache HttpClient 的例子:

CloseableHttpClient httpClient = HttpClients.custom()    .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)    .setSSLContext(sc)    .build();
复制代码

在这个例子中,我们创建了一个 CloseableHttpClient,并设置了我们的 SSLContext 和一个 NoopHostnameVerifier。HostnameVerifier 是一个接口,它在 SSL 握手过程中验证主机名。NoopHostnameVerifier 是一个实现了 HostnameVerifier 接口的类,它不进行任何验证,所以它实际上是在忽略主机名验证。

总的来说,虽然在 Java 中忽略 SSL 证书验证可以在开发和测试环境中节省时间,但是你绝对不应该在生产环境中这样做。在生产环境中,你应该使用有效的、由信任的证书颁发机构颁发的证书,并且你的 Java 应用程序应该被配置为只信任这些证书颁发机构。否则,你的应用程序将对中间人攻击没有任何防御。

蓝易云-五网CN2服务器【点我购买】蓝易云采用KVM高性能架构,稳定可靠,安全无忧!蓝易云服务器真实CN2回国线路,不伪造,只做高质量海外服务器。


海外免备案云服务器链接:www.tsyvps.com

蓝易云香港五网 CN2 GIA/GT 精品网络服务器。拒绝绕路,拒绝不稳定。

用户头像

百度搜索:蓝易云 2023-07-05 加入

香港五网CN2免备案服务器

评论

发布
暂无评论
Java跳过证书访问HTTPS_百度搜索:蓝易云_InfoQ写作社区