首页 > 解决方案 > 如何调试 Java HTTPS 证书验证

问题描述

我有一个第三方 Java 应用程序。它尝试通过 HTTPS 下载文件。可悲的是,在我的公司网络中,HTTPS 被拦截,证书被无根自定义证书替换。

现在,虽然我有我们的非根 CA /etc/ssl/certs/java/cacerts(仔细检查)它仍然无法下载:

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 在内部尝试通过证书验证执行的操作?像:

如果我不需要使用反射或一些晦涩的东西,可以加分;)

标签: javassl

解决方案


我会尝试使用动态调试实用程序。有一个选项可以打开 SSL 调试,这应该会对您有所帮助。

根据官方文档

JSSE 提供动态调试跟踪支持。这类似于在 Java SE 平台中用于调试访问控制故障的支持。使用 java.security.debug 系统属性访问通用 Java 动态调试跟踪支持,而使用 javax.net.debug 系统属性访问特定于 JSSE 的动态调试跟踪支持。目前的选择是:

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

我认为这应该对你有所帮助。


推荐阅读