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


当前回答

在我的例子中,这个问题的根本原因是空的信任库(它是应用程序服务器信任库)。 当我添加任何虚拟x.509证书时,停止抛出此错误。

将证书添加到truststore vis keytool中

keytool -import -alias dummy -keystore <path to keystore> -storepass <truststore password if any>

其他回答

在Ubuntu 18.04上,我需要使用OpenJDK 1.7来维护一个旧项目。我下载了二进制包。但当我执行我的脚本上,我得到了同样的错误。

解决方案是删除已下载JDK的jre/lib/security文件夹中的cacerts文件,然后将其创建为/etc/ssl/certs/java/系统cacerts文件的符号链接:

Sudo ln -s /etc/ssl/certs/java/cacerts /path/to/ downloading /java/jre/lib/security/cacerts

在Ubuntu 12.10 (Quantal Quetzal)或更高版本中,证书保存在ca-certificates-java包中。使用-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts将获取它们,不管你使用的是什么JDK。

我在一篇博客文章中遇到了这个解决方案:在OS X上运行OpenJDK 7时修复trustAnchors问题:

修复在OS X上运行OpenJDK 7时的trustAnchors问题。如果你在OS X上运行OpenJDK 7,并且看到了这个异常:

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

有一个简单的解决办法。只要链接到苹果JDK 1.6使用的cacerts文件:

cd $(/usr/libexec/java_home -v 1.7)/jre/lib/security
ln -fsh /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts

您需要为已安装的每个OpenJDK版本执行此操作。只需将-v 1.7更改为您想要修复的版本。运行/usr/libexec/java_home -V查看已安装的所有jre和jdk。

也许OpenJDK的人可以把这个添加到他们的安装脚本中。

在升级到OS X v10.9 (Mavericks)后,我遇到了很多安全问题:

亚马逊AWS的SSL问题 未使用Maven和Eclipse验证Peer trustAnchors参数必须非空

我应用了这个Java更新,它解决了我所有的问题:http://support.apple.com/kb/DL1572?viewlocale=en_US

在Ubuntu 18.04上,根本原因是openjdk-11-jdk(默认值)和依赖于它的其他包之间的冲突。Debian已经修复了这个问题,Ubuntu很快也会修复。同时,最简单的解决方法是将java降级到版本8。使用ca-certificates-java的其他解决方案要复杂得多。

首先删除冲突包:

sudo apt-get remove --purge openjdk* java-common default-jdk
sudo apt-get autoremove --purge

检查您是否成功删除了所有相关的包:

sudo update-alternatives --config java

系统将提示您没有可供配置的Java,否则此解决方案将失败。

然后重新安装所需的软件包:

sudo apt-get install openjdk-8-jdk