我有一个第三方Java应用程序。它尝试通过HTTPS下载文件。不幸的是,在我的公司网络中,HTTPS被拦截,并且证书被无根的自定义证书替换。
现在,尽管我在/etc/ssl/certs/java/cacerts
中拥有非根目录的CA(已仔细检查),但仍然无法通过以下方式下载:
java.io.IOException: Error downloading [https://zlib.net/zlib-1.2.11.tar.gz] to /tmp/zlib-1.2.11.tar.gz: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
是否有任何方法可以调试JAVA在内部使用证书验证所做的工作? 像这样的东西:
如果我不需要使用反射或一些晦涩的东西,奖励积分;)
答案 0 :(得分:2)
我会尝试使用动态调试实用程序。有一个选项可以打开SSL调试,这应该会对您有所帮助。
JSSE提供了动态调试跟踪支持。这类似于 用于调试Java SE中的访问控制故障的支持 平台。访问通用的Java动态调试跟踪支持 使用java.security.debug系统属性,而 JSSE特定的动态调试跟踪支持可通过 javax.net.debug系统属性。当前选项是:
all: Turn on all debugging ssl: Turn on SSL debugging
以下可以与ssl选项一起使用:
record: Enable per-record tracing handshake: Print each handshake message keygen: Print key generation data session: Print session activity defaultctx: Print default SSL initialization sslctx: Print SSLContext tracing sessioncache: Print session cache tracing keymanager: Print key manager tracing trustmanager: Print trust manager tracing
我认为这应该对您有所帮助。
答案 1 :(得分:1)
这不能直接回答您的问题。如果您真的需要调试它,请查看Vinnie的答案。
该错误消息非常具体,我认为您已经给出了有关失败原因的答案-您的流量被拦截,证书被替换为“飞行中”。您的问题可能是您的JVM无法加载<div class="email-entry desktop-container">
<div id="a"></div>
<form name="form1" action="#">
<input id="test" type="text" name="text1" value="" placeholder="Email Address">
<input type="image" value="validate" onclick="ValidateEmail(document.form1.text1)" src="images/icon-arrow.svg" alt="submit">
<p id="addedText"></p>
</form>
</div>
,并且无法信任被拦截的证书链。要指定该特定的/etc/ssl/certs/java/cacerts
文件,请像这样添加cacerts
作为VM选项
-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts