【问题标题】:Is it possible to convince a Java application to ignore SSL issues without modifying its code?是否可以说服 Java 应用程序在不修改其代码的情况下忽略 SSL 问题?
【发布时间】:2012-10-13 08:51:35
【问题描述】:

我有一些 java 应用程序抱怨不同的 SSL 问题,例如自签名证书或不受信任的证书。

由于我没有这些应用程序的代码并且获得良好的证书太难了,我正在寻找一种可以让我强制连接的解决方案。

到目前为止,我尝试了这些,但似乎还不够:

-Dcom.sun.net.ssl.checkRevocation=false 
-Djava.security.debug=certpath

我还是看到了:

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

【问题讨论】:

标签: java ssl


【解决方案1】:

通过完全忽略信任验证来忽略证书验证错误的代码修改(例如,使用什么都不做的信任管理器)通常不是正确的方法。它们可能会受到一些开发人员的欢迎,因为他们不必经过任何处理证书的步骤,但他们只是忽略了问题而不是修复它,从而也引入了 MITM 攻击的漏洞。 (因为这个问题随后被消除了,它往往永远不会在生产版本中得到修复。)

JSSE Reference Guide 中描述了配置信任管理的各种方法。

简而言之,您可以将证书显式导入 JRE 信任库(通常是 JRE 目录中的 cacerts 文件),也可以将其导入您自己的信任库(可能基于默认信任库的副本) ,并使用javax.net.ssl.trustStore(及相关)系统属性指定其路径(请参阅JSSE 参考指南)。

这些配置设置将影响所有使用默认设置的SSLSockets 和SSLEngines(代码中没有任何特定的SSLContext)。

一些应用程序使用他们自己的SSLContext 为某些连接加载特定的密钥库或信任库。这通常使用独立于 JSSE 默认选项的参数进行配置,在这种情况下,您必须检查应用程序文档或代码。

【讨论】:

    【解决方案2】:

    http://code.google.com/p/misc-utils/wiki/JavaHttpsUrl 提供了多种侵入式解决方案。

    SSLSocketFactory 可以是overridden with system property

    custom HostnameVerifier 只能通过额外的启动参数或on the fly 使用特殊的java 代理进行背书。

    此外,AspectJ weaving agent 可用于override any method behavior

    还可以考虑使用 MiTM HTTPS proxy 的替代方法(如果应用程序允许重新配置 url 和证书)。

    【讨论】:

      【解决方案3】:

      是的,这是可能的。

      使用 JVM 参数:

      -Dcom.sun.net.ssl.checkRevocation=false
      

      或以编程方式:

      您可以覆盖默认的 TrustManager 和 HostnameVerifier 。 这个链接给reusable code example

      【讨论】:

        猜你喜欢
        • 2019-06-21
        • 2018-04-16
        • 1970-01-01
        • 1970-01-01
        • 2010-10-12
        • 2020-12-17
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        相关资源
        最近更新 更多