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


当前回答

删除ca-certificates-java包并重新安装它对我来说是有效的(Ubuntu MATE 17.10 (Artful Aardvark))。

sudo dpkg --purge --force-depends ca-certificates-java

sudo apt-get install ca-certificates-java

谢谢,jdstrand:关于bug 983302的评论1,Re: ca-certificates-java无法在Oneiric Ocelot上安装Java cacerts。

其他回答

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

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

来源:Java SSL和证书keystore

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

我在Ubuntu 14.04 (Trusty Tahr)上运行一套特定的Android测试时遇到了这个问题。根据shaheen的建议,有两件事对我有用:

sudo update-ca-certificates -f

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

EJP基本上回答了这个问题(我意识到这有一个公认的答案),但我只是处理了这个边缘情况,并想让我的解决方案永垂不朽。

我在托管的Jira服务器上有InvalidAlgorithmParameterException错误,我之前为仅ssl访问设置了该服务器。问题是我用PKCS#12格式设置了密钥存储库,但我的信任存储库是JKS格式。

在我的例子中,我编辑了server.xml文件,将keystoreType指定为PKCS,但是我没有指定truststoreType,因此它默认为keystoreType。明确指定truststoreType作为JKS为我解决了这个问题。

我在使用IBM Websphere JDK keytool在#PKCS12格式中导出的信任库时遇到了这个错误,并试图在Oracle JRE上使用该文件通过SSL进行通信。

我的解决方案是在IBM JRE上运行,或者使用IBM Websphere keytool将信任库转换为JKS,这样我就能够在Oracle JRE中运行它。

我在尝试使用Maven 3时遇到了这个问题,从Ubuntu 16.04 LTS (Xenial Xerus)升级到Ubuntu 18.04 LTS (Bionic Beaver)。

检查/usr/lib/jvm/java-8-oracle/jre/lib/security,发现我的cacerts文件是一个指向/etc/ssl/certs/java/cacerts的符号链接

我还有一个可疑的cacerts.original文件。

我重新命名了cacerts。原cacerts,这解决了问题。