我试图在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>

其他回答

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

对我来说,这是由于信任存储库中缺少一个trustedCertEntry造成的。

要测试,请使用:

keytool -list -keystore keystore.jks

它给我:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

cert-alias, 31-Jul-2017, PrivateKeyEntry

即使我的PrivateKeyEntry包含一个CA,它需要单独导入:

keytool -import -alias root-ca1 -file rootca.crt -keystore keystore.jks

它导入证书,然后重新运行keytool -list -keystore keystore。JKS现在提供:

Your keystore contains 2 entries

cert-alias, 31-Jul-2017, PrivateKeyEntry,
Certificate fingerprint (SHA1): <fingerprint>

root-ca1, 04-Aug-2017, trustedCertEntry,
Certificate fingerprint (SHA1): <fingerprint>

现在它有了一个trustedCertEntry, Tomcat将成功启动。

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

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

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

这为我解决了Ubuntu上的问题:

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

(网址:https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760)

ca-certificates-java不是Oracle JDK/JRE中的依赖项,因此必须显式安装。

对于我的情况,我没有完全指定VM参数。

(运行配置. .>(在Apache Tomcat下)任何服务器> (x)=参数>虚拟机参数:)

确保所有VM参数设置正确。