我目前正在代理后面运行一些REST调用,因此我需要遵循一些严格的流程才能使调用通过。
以前,我是在Eclipse中为POC构建的,但是现在我知道它可以工作了,我正尝试将其与Gradle一起转移到IntelliJ(个人喜爱的IDEA)上,以进行构建自动化。
我得到了要编译,导出所有依赖项等的项目,但是当我在IntelliJ中运行它时,出现“找不到证书错误”。不过,从侧面来看,如果我使用“ java-jar MyJar.jar”执行编译的Jar文件(从gradle中执行),则该文件可以完美运行,并且不会抛出cert错误。这里的关键是,如果我仅使用IntelliJ之外的gradle任务执行Jar,它就会起作用,但是如果我尝试在IntelliJ中构建后立即执行任务,则失败。
作品:
不起作用: -在IntelliJ中执行构建任务,并在构建任务结束时调用“ runMain”
我目前的理论是通过java -jar和gradle runMain运行它,导致JVM使用默认的cacerts“ / jre_xxx / libs / security / cacerts”(我已经在其中添加了证书),但是当我执行带有Gradle的IntelliJ中的Jar,它使用不同的位置。我也将证书添加到了“ C:\ Program Files \ JetBrains \ IntelliJ IDEA社区版2018.1.5 \ jre64 \ lib \ security \ cacerts”中,但是在IntelliJ中运行它时,我仍然收到此错误消息。
task(runMain, dependsOn: 'classes', type: JavaExec) {
main = 'com.xxx.xx.x.Utopia'
classpath = sourceSets.main.runtimeClasspath
args=[
"-Djavax.net.ssl.trustStore=C:\\ProgramFiles\\Java\\jre1.8.0_121\\lib\\security\\cacerts"
]
}
运行此VIA CLI似乎可以运行,但无法在IntelliJ中执行Gradle构建任务。
任何帮助将不胜感激。
编辑:我仅在IntelliJ中运行该错误(PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到到所请求目标的有效证书路径)
答案 0 :(得分:3)
在与我的问题联系JetBrains支持后,我意识到了这个问题。从逻辑上讲,我假设JRE将执行JAR文件,仅在运行java -jar my.jar或从CLI执行Gradle时才如此。 IntelliJ的工作方式是仅使用JDK,因此我不得不修改JDK中的小型JRE。完成此操作并将其添加到jdk.xxx/jre/lib/security/cacerts内的CACERTS中后,我便能够解决此问题。
答案 1 :(得分:0)
好吧..有时候这可能是非常微小的事情,我们往往会忽略它,始终使用从您的jdk> jre> lib> security文件夹中的 cacerts 文件路径来控制VMOptions设置。
答案 2 :(得分:0)
如果有人也遇到此问题。我已将证书添加到JDK存储中,并确保IntelliJ正在使用JDK,但是在尝试下载JAR时仍会失败。事实证明,我不得不杀死在后台运行的gradle守护进程,因为它在IntelliJ重新启动之间仍然存在。我在Windows上,因此ps java | kill
在Powershell中工作。 pkill java
将在Linux中工作。
答案 3 :(得分:0)
使用内置的 IntelliJ-IDEA 插件信任自定义证书:
https://www.jetbrains.com/help/idea/settings-tools-server-certificates.html