使用 HTTPS(不可信证书)通过 Java 访问网站时出现问题

发布于 2024-11-04 11:12:13 字数 200 浏览 1 评论 0原文

我尝试从 Java 应用程序使用 HTTP 访问站点。由于应用程序运行在开发环境中,因此相应的证书不受信任。

使用 javax.net.ssl 包时,我尝试定义一个自定义 TrustManager 实现,该实现允许所有内容并在 SslContext 的 init 方法的第二个参数中传递它,但这不起作用。

有人做这样的工作吗? 非常感谢您的帮助! 蒂埃里

I try to access a site using HTTP from a Java application. Since the application is running in a development environment, the corresponding certificate isn't trusted.

When using javax.net.ssl package, I try to define a custom TrustManager implementation that allows everything and pass it within the second parameter of the init method of the SslContext, but this doesn't work.

Does anybody make work something like that?
Thanks very much for your help!
Thierry

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

为你鎻心 2024-11-11 11:12:13

实现一个不验证任何内容的 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)这样的信任管理器只能用于测试/原型设计目的。

It is pretty easy to implement a TrustManager which does not verify anything (works on both client and server side):

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]
  }
}

To use this TrustManager:

SSLContext ctx = SSLContext.getDefault();
ctx.init(null, new TrustManager[] { new NoVerifyTM() }, null);
SSLSocketFactory sf = ctx.getSocketFactory();

Please note that (as said by @hanwg) such a trust manager should only be used for testing/prototyping purposes.

别想她 2024-11-11 11:12:13

如果您信任该证书,则应将其添加到应用程序服务器的信任库中。实施不执行证书检查的信任管理器是一个安全漏洞。

if you trust the certificate, you should add it to your application server's truststore. implementing a trust manager that doesn't perform certificate checking is a security vulnerability.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文