查尔斯4.6.2,macos 12.1
在此页面之后,https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/
我尝试了以下步骤:
现在,当我的 java 应用程序尝试访问我添加到 SSL 代理位置的 api 端点时,我在 charles 代理序列输出中得到以下内容:
URL https://npxx.net
Status Failed
Failure SSL handshake with client failed: An unknown issue occurred processing the certificate (certificate_unknown)
Notes You may need to configure your browser or application to trust the Charles Root Certificate. See SSL Proxying in the Help menu.
Response Code 200 Connection established
Protocol HTTP/1.1
在java日志中,我看到这个:
PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径”
注意:本地 java 进程正在访问的外部端点具有来自 comodo 的通配符 Multi SAN 证书
===更新1====
我发现了一种未记录的添加证书的方法,在charles proxy中,帮助下有一些证书安装选项:
帮助->SSL 代理->安装 Charles 根证书。
这没有任何作用。假设它在 mac 上不起作用
帮助->SSL 代理->在 Java 虚拟机上安装证书
这确实有效,并提示输入密码,然后说完成,但没有帮助。
再次找到 cacerts 文件 (/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home/lib/security/cacerts)。您使用的 keytool 命令是正确的,但请确保您使用正确的密码。在许多 Java 安装中,cacert 的默认密码是“changeit”,除非您明确更改了它。尝试:
sudo keytool -import -alias charles -file ~/Documents/charles-ssl-proxying-certificate.pem -keystore /Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home/lib/security/cacerts -storepass changeit
我找到了部分解决方案。 Charles 文档页面:https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/ 缺少一些 Windows 的关键信息。
首先你必须找到java在哪里。我发现执行此操作的唯一方法是安装 gitBash,然后使用“which java”。结果是:
/c/Program Files/Zulu/zulu-8/bin/java
您需要从帮助->SSL代理->保存根证书下载pem文件。
我将其复制到 /c/Program Files/Zulu/zulu-8/jre/lib/security/
然后以管理员身份运行 git bash,从安全目录中执行以下操作:
$ keytool -import -alias charles -file charles.pem -keystore "/c/Program Files/Zulu/zulu-8/jre/lib/security/cacerts" -storepass changeit
这似乎有效,但是当我重新启动我的java服务时,查尔斯仍然说
“您可能需要配置浏览器或应用程序以信任 Charles 根证书。请参阅帮助菜单中的 SSL 代理。”
从 intellij 运行我的 Spring Boot 应用程序时,我仍然看不到 SSL 数据。
java 在尝试连接时会抛出此错误: java.security.cert.CertificateException:找不到与 xxx.yyy.com 匹配的主题备用 DNS 名称。
据推测,java 正在检测到 Charles 根证书是假的。
但是,这个解决方案可能适合您。