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


当前回答

我跑

sudo update-ca-certificates -f

创建证书文件,然后:

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

然后修改jar执行的命令行:

sudo java -cp xx.jar:lib/* co.com.ixxx.clixxxlarxa.Main

其他回答

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

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

参见下面@AdamPlumb的回答。

我在尝试使用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,这解决了问题。

在我的案例中,客户端应用程序中使用的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和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

在升级到Spring Boot 1.4.1(或更新版本)后也可能遇到此错误,因为它将Tomcat 8.5.5作为其依赖项的一部分。

问题在于Tomcat处理信任存储的方式。如果恰好在Spring Boot配置中指定了信任存储库位置与密钥存储库相同,那么在启动应用程序时可能会得到trustAnchors参数必须为非空的消息。

server.ssl.key-store=classpath:server.jks
server.ssl.trust-store=classpath:server.jks

只需删除server.ssl。信任存储配置,除非您知道您需要它,在这种情况下,请参考下面的链接。

以下问题包含该问题的详细信息:

HTTPS Tomcat连接器以1.4.1 #7069启动失败 带有自签名证书的SSL-client-auth停止工作#7406 升级到Tomcat 8.5.5 #6703