如何让 Java 应用程序在 M1 Mac 上使用 SSL 和 charles 代理

问题描述 投票:0回答:2

查尔斯4.6.2,macos 12.1

在此页面之后,https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/

我尝试了以下步骤:

  1. 帮助->ssl代理->保存查尔斯根证书
  2. 找到java所在的位置:/usr/libexec/java_home
  3. cd /Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home/lib/security
  4. sudo keytool -import -alias charles -file ~/Documents/charles-ssl-proxying-certificate.pem。这提示输入 3 个密码,我为其创建了新/随机密码(不知道它们是什么)
  5. 这样启动java:java -jar aem-publish-p4503.jar -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888
  6. 在 charles proxy->ssl 代理设置中选中启用代理设置。
  7. 在“include”中添加Java服务器将使用端口443调用的URL。

现在,当我的 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 虚拟机上安装证书

这确实有效,并提示输入密码,然后说完成,但没有帮助。

java proxy charles-proxy
2个回答
1
投票

再次找到 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

0
投票

我找到了部分解决方案。 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 根证书是假的。

但是,这个解决方案可能适合您。

© www.soinside.com 2019 - 2024. All rights reserved.