我试图在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上却很吃力。


当前回答

在我的案例中,客户端应用程序中使用的JKS文件已损坏。我创建了一个新的,并在其中导入了目标服务器SSL证书。然后我在客户端应用程序中使用新的JKS文件作为信任存储,如下所示:

System.setProperty("javax.net.ssl.trustStore",path_to_your_cacerts_file);

来源:Java SSL和证书keystore

我使用(KeyStore Explorer)工具创建新的JKS。您可以从这个链接(KeyStore Explorer)下载它。

其他回答

我是可移植性的粉丝,所以我不安装java,只是下载tar.gz并导出路径中的一些值,一切都可以工作。

我与这个问题作斗争,没有解决方案(安装或更新操作系统证书)对我有效。

在我的情况下的错误是:空cacerts在我的jdk。

我不知道为什么,但是我的jdk.tar.gz有一个空的cacerts文件

/ . ./some_openjdk/jre/lib/security/cacerts size: 32字节

下载:

https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz https://download.java.net/java/GA/jdk9/9/binaries/openjdk-9_linux-x64_bin.tar.gz

Fix

经过几次尝试,我找到了一个正确的jdk.tar.gz,其中包含一个101 KB大小的cacerts文件

我从https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries下载了这个开放jdk

https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u262-b10/OpenJDK8U-jdk-jfr_x64_linux_8u262b10.tar.gz

我在这个Dockerfile中找到了这个url:

https://github.com/docker-library/openjdk/blob/b5d14d9165fad693901c285d6e7bbc36d1cde41f/8/jdk/Dockerfile

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

我希望出现这样的情况,因为我在Talend Open Studio中使用了另一个JVM(目前只支持JDK 1.7)。出于安全考虑,我使用8。无论如何

更新您的证书存储: Sudo update-ca-certificates -f

then

在初始化参数中添加一个新值 sudo gedit $(到你的体系结构特定的ini的路径,例如TOS_DI…ini) Djavax.net.ssl.trustStore = / etc / ssl /证书/ java /除

对我来说,第二项成功了。我认为,根据Talend Open Studio/TEnt + JVM的版本,它有不同的参数名称,但它查找相同的keystore文件。

我跑

sudo update-ca-certificates -f

创建证书文件,然后:

sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure

我又开始工作了,谢谢各位。很遗憾,它没有包括在安装中,但我最终做到了。

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

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