java - 是否可以说服 Java 应用程序在不修改其代码的情况下忽略 SSL 问题?

标签 java ssl

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

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

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

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

我仍然看到:

  • sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径
  • javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

最佳答案

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

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

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

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

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

关于java - 是否可以说服 Java 应用程序在不修改其代码的情况下忽略 SSL 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13030174/

相关文章:

java - 如何在Intellij IDEA上导入现有的Maven + Spring MVC + Tomcat项目?

.htaccess https 重定向失败

google-app-engine - 对于作为 mydomain.com 托管的应用程序,Google App Engine 是否支持 SSL?

ssl - 如何忽略 Spring Security 和 SSL 的某些路径?

sql-server - 如何在 wildfly 中为 MSSQL 和自定义信任库设置 ssl 数据源

ssl - 安装SSL证书的私钥密码

java - 用于字符串列表的最佳 Vaadin 组件

Java .properties 文件在尝试获取希伯来语值时出现乱码

Java用一个字符替换字符串中的多个字符

javascript - Android Studio InputFilterMinMax 部分工作