java - 如何调试 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 在内部尝试通过证书验证执行的操作?像:
- 它正在加载哪些 CA
- 验证需要哪些步骤
- 为什么验证失败(详细)
如果我不需要使用反射或一些晦涩的东西,可以加分;)
解决方案
我会尝试使用动态调试实用程序。有一个选项可以打开 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
我认为这应该对你有所帮助。
推荐阅读
- javascript - 反应:TypeError:无法读取未定义的属性(读取“地图”)
- sapui5 - SAP Web IDE 死了吗?UI5 是否支持 SAP Business Application Studio 以外的 IDE?
- sql - 获取每周的开始日期和结束日期
- python - 计算特定分组值的百分比
- twitter-bootstrap - 引导标题类(.h5、.h4、.h3)在 SortSite 中触发 508 合规性错误
- firebase - 在谷歌云指标资源管理器中测量冷启动时间
- html - 图像不会填充按钮大小,无论图像大小如何,它都会有奇怪的边距
- azure - 从 azure Data factory 到 Databricks 的链接服务:如何参数化?
- python - Tox 不尊重自定义环境中定义的 envlist
- javascript - ASP.NET 核心 MVC 弹出模式,其中包含来自视图的模型数据