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


当前回答

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

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

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

其他回答

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

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

参见下面@AdamPlumb的回答。

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

在更新OS X v10.9 (Mavericks)后,我在OS X上也遇到了这种情况,当时正在使用旧的Java 6,并试图访问HTTPS URL。修复方法与彼得·克里恩斯(Peter Kriens)相反;我需要将cacerts从1.7空间复制到1.6版本链接的位置:

(as root)
umask 022
mkdir -p /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security
cp $(/usr/libexec/java_home -v 1.7)/jre/lib/security/cacerts \
    /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security

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

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

来源:Java SSL和证书keystore

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

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

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

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