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


当前回答

在Ubuntu上:

Sudo apt安装ca-certificates-java

or

Sudo apt-get install ca-certificates-java

帮我整理好了。

其他回答

这个奇怪的消息意味着您指定的trustStore是:

空的, 未找到,或 无法打开 (由于错误/缺少trustStorePassword,或 例如,文件访问权限)。

参见下面@AdamPlumb的回答。

我希望出现这样的情况,因为我在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文件。

一些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

在ubuntu 14.04和openjdk 11 from ppa:openjdk-r/ppa上,这对我来说是有效的:

在java中。安全性将密钥库类型更改为

keystore.type=jks

然后:

sudo dpkg --purge --force-depends ca-certificates-java
sudo apt-get install ca-certificates-java

当您检查它是否工作时,请确保您使用的守护进程中没有任何旧的Java仍在运行(例如。——gradle的no-daemon选项)

这个bug很好地描述了所有内容,并将帮助您理解正在发生的事情https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1739631

我在一篇博客文章中遇到了这个解决方案:在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的人可以把这个添加到他们的安装脚本中。