Java Intellij/Gradle同步在公司代理后失败

Java Intellij/Gradle同步在公司代理后失败,java,gradle,intellij-idea,truststore,zscaler,Java,Gradle,Intellij Idea,Truststore,Zscaler,我在一个公司防火墙(Zscaler)后面,它用自己的证书重写TLS流量 当我尝试在intellij中创建Gradle项目时,我收到以下错误,即使是在将CA和中间证书导入intellij(通过服务器证书设置页面)和我能想到的每个Java信任存储之后 Sync Failed Download https://services.gradle.org/distributions/gradle-4.0-bin.zip 797ms Cause: unable to find valid certific

我在一个公司防火墙(Zscaler)后面,它用自己的证书重写TLS流量

当我尝试在intellij中创建Gradle项目时,我收到以下错误,即使是在将CA和中间证书导入intellij(通过
服务器证书
设置页面)和我能想到的每个Java信任存储之后

Sync Failed
Download https://services.gradle.org/distributions/gradle-4.0-bin.zip   797ms
Cause: unable to find valid certification path to requested target
我甚至将它们导入Intellij的私人JRE中,例如

C:\Progra~1\Java\jdk1.8.0_131\bin\keytool.exe -importcert -alias zscaler_root_ca     -keystore C:\Progra~1\Java\jdk1.8.0_131\jre\lib\security\cacerts -storepass changeit -file zscaler_root_ca.crt
C:\Progra~1\Java\jre1.8.0_151\bin\keytool.exe -importcert -alias zscaler_root_ca     -keystore C:\Progra~1\Java\jre1.8.0_151\lib\security\cacerts -storepass changeit -file zscaler_root_ca.crt
"C:\Users\jonathan.bates\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\173.4301.25\jre64\bin\keytool.exe" -importcert -alias zscaler_root_ca     -keystore "C:\Users\jonathan.bates\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\173.4301.25\jre64\lib\security\cacerts" -storepass changeit -file zscaler_root_ca.crt

我还需要做什么吗?

我将设置更新为
自动导入证书
,它对我有效

Settings -> Tools -> Server Certificates -> Check the box for auto import

公司颁发的证书需要包含在Gradle使用的信任库中。对此进行故障排除可能很困难,特别是如果您安装了多个版本的Java和JRE。首先要确定的是JRE Gradle正在使用什么。有一个答案指出这个问题是通过使用Gradle包装器解决的。调用在gradle.properties中定义的特定于项目的Java环境。默认情况下,它设置为
distributionBase=GRADLE\u USER\u HOME
。要使Gradle使用不受信任的证书进行构建,可以遵循以下步骤:

HTTP生成缓存后端的SSL证书可能不受信任,因为它是内部设置的或自签名的证书

在这种情况下,您可以将构建JVM环境配置为信任证书,或者将此属性设置为true以禁用服务器身份验证

允许与不受信任的服务器进行通信,可以在传输过程中对数据进行加密,但中间人更容易模拟预期的服务器并捕获数据


最好将cert导入Gradle使用的JVM中,这看起来就像您试图做的一样。如果希望IntelliJ了解公司证书,可以通过导航到设置>工具>服务器证书,通过UI导入这些证书。导入您的组织颁发的证书文件,然后重试生成。

通常它可能与证书相关。要验证这一点,删除选项
接受的证书
并选中“自动接受不受信任的证书”可能会解决此问题。正如@Colm Bhandal所评论的,这不是一个解决方案,而是一个变通解决方案

我还需要做些什么吗

是的,可能
JAVA_HOME
是一个变量,Gradle通过查看来选择要执行它的JAVA。
一旦Java的信任存储包含所需的证书,请尝试将
Java\u HOME
设置为该目录。

对于我来说,每个设置似乎都是正确的,上面提到的要检查。 我不知道原因,但错误消息:
无法找到请求目标的有效认证路径
消失,升级项目的gradle包装后,
gradle build
开始工作:

关键操作是在终端选项卡中运行
gradlew.bat

修复:将ZScaler根证书放入IJ
  • 打开谷歌浏览器
  • 转到设置->安全->管理证书
  • 转到“受信任的根证书颁发机构”选项卡
  • 向下滚动到项目“ZScaler Root CA”-作为一个“Z”字,它可能会接近或位于列表的底部
  • 点击“导出…”
  • 按照向导的步骤将证书导出为.CER文件并保存到计算机上的某个位置
  • 现在打开IntelliJ(IJ)
  • 打开设置(Ctrl+Alt+S)
  • 搜索“证书”以筛选设置并转到“服务器证书”
  • 点击小+图标
  • 浏览到刚保存的文件,然后在“设置”中再次单击“确定”&确定
  • 应该这样做

    注意:假设您使用Google Chrome,ZScaler根证书已经存储在Chrome的信任存储中。如果您不是这样,希望您能找到另一种获得ZScaler根证书的方法。最糟糕的情况是:您可以随时询问您的IT部门。我确定谁是管理ZScaler的人,应该知道如何获得证书

    更详细的讨论 这似乎是IntelliJ(IJ)的一个普遍问题,不仅仅是针对Gradle任务,而且当IJ尝试连接到任何HTTPS站点时,正如以下评论所指出的:

    intellij对您的终端使用不同的秘密存储

    关于这一评论,我们注意到:

    IntelliJ IDEA为可信证书提供了自己的存储

    现在,从JetBrains文档和from中,一种有效的方法是自动接受所有不受信任的证书。为了理解为什么这是一个OK方法,我们回忆起整个问题最初是由ZScaler背后的人造成的。由于您支持ZScaler,您可以相信拦截您所有请求的ZScaler中间服务器将为您阻止任何不可信的站点,因此您不必在IJ中担心它。换句话说,当ZScaler将这些证书转发给IJ时,您已经可以信任它们了

    但是,当您的组织允许您禁用ZScaler时,这种方法就会出现问题。在这种情况下,如果禁用ZScaler,则不再受其保护。当你这么做的时候,你会记得恢复你的IJ设置吗?也许吧,但这样做将是一个可怕的体力负担。更有可能的是,你可能不记得了,然后你的IJ可能会连接到不可信的站点。我不知道完整的安全细节,所以可能有其他一些措施来缓解这种漏洞,但在我看来,这似乎是一个漏洞。例如,攻击者可以设置一个虚假的更新站点来更新您的IntelliJ插件,并在您不知情的情况下安装恶意插件。现在你的机器上已经有了病毒,因为只要你运行IJ,插件也会运行,而且可能