我试图在Jenkins/Hudson上配置我的电子邮件,但我经常收到错误:

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be
    non-empty

我已经在网上看到了关于这个错误的大量信息,但我还没有得到任何工作。我在Fedora Linux上使用Sun的JDK(不是OpenJDK)。

以下是我尝试过的一些方法。我试着按照这篇文章的建议,但是从Windows复制cacerts到我的Fedora盒子托管Jenkins不起作用。我尝试按照这个指南,因为我试图配置Gmail作为我的SMTP服务器,但它也没有工作。我还尝试手动下载并移动这些cacert文件,并使用本指南中的命令的变体将它们移动到我的Java文件夹中。

我愿意接受任何建议,因为我现在被困住了。我已经让它在Windows Hudson服务器上工作了,但在Linux上却很吃力。


当前回答

一些OpenJDK供应商发布的版本通过将空cacerts文件与二进制文件一起分发而导致了这种情况。该错误的解释在这里:https://github.com/AdoptOpenJDK/openjdk-build/issues/555

您可以从c:\Program Files\Java\ jdk1.8.0_192\jre\lib\security\cacerts等旧安装中将该文件复制到adoptOpenJdk8\jre\lib\security\cacerts。

AdoptOpenJDK的错误版本是https://github.com/AdoptOpenJDK/openjdk8-releases/releases/download/jdk8u172-b11/OpenJDK8_x64_Win_jdk8u172-b11.zip

其他回答

您必须将证书文件添加到java密钥存储库中 进入chrom,打开网站,以txt格式保存证书

2 .执行cmd> keytool -import -trustcacerts -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -alias Root -import -file Trustedcaroot.txt

https://knowledge.digicert.com/solution/SO4085.html

这招很管用

Marquis of Lorne的回答是准确的,我添加了一些信息用于调试:

要调试这个问题(我在这里写了更多细节)并了解正在使用(或试图使用)什么信任库,可以添加属性javax.net.debug=all,然后过滤关于信任库的日志。您还可以使用属性javax.net.ssl.trustStore来指定特定的信任库。例如:


    java -Djavax.net.debug=all -Djavax.net.ssl.trustStore=/Another/path/to/cacerts -jar test_get_https-0.0.1-SNAPSHOT-jar-with-dependencies.jar https://www.calca.com.py 2>&1| grep -i truststore

郑重声明,这里没有一个答案对我有用。由于这个错误,我的Gradle构建开始神秘地失败,无法从Maven中心获取特定POM文件的HEAD。

结果发现,我将JAVA_HOME设置为我自己构建的OpenJDK,这是我为调试javac问题而构建的。将它设置回安装在我系统上的JDK就可以解决这个问题。

对我来说,它只是通过升级Jenkins插件“电子邮件扩展插件”到最新版本(2.61)来解决的。

这两个插件负责Jenkins中的电子邮件配置:

电子邮件扩展 邮件扩展模板

我在IntelliJ IDEA 14中导入Gradle项目时遇到过这个问题。 一种解决方案是使用Gradle的本地副本,而不是项目目录中的包装器。