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

其他回答

我在网上找到的解决办法都没用,但彼得·克里恩斯(Peter Kriens)的答案的修改版本似乎管用。

首先运行/usr/ libeexe /java_home找到Java文件夹。对我来说,它是1.6.0。jdk版本。然后转到它的lib/security子文件夹(对我来说/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security)。

然后删除cacerts文件(如果已经有),然后使用sudo find / name "cacerts"在系统中搜索。它为我找到了多个项目,在我安装的Xcode或其他应用程序版本中,也在/Library/Internet plug - in /JavaAppletPlugin中。plugin/Contents/Home/lib/security/cacerts。

使用该文件并对其进行符号链接(在之前的Java文件夹中),sudo ln -fsh "/Library/Internet Plug-Ins/JavaAppletPlugin. exe "。plugin/Contents/Home/lib/security/cacerts”,它应该可以工作。

我两者都有——Java从苹果的2017-001下载(https://support.apple.com/kb/dl1572 -我假设这是正确的证书来源)和Oracle的安装在Mac OS X v10.12 (Sierra)上的证书。

在升级到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

在更新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

使用Amazon SDK v2、Windows 10和JDK8就可以做到这一点。 Amazon SDK抱怨凭证加载。 我通过将JDK11的security/cacert文件替换为JDK8的security/cacert文件来解决这个问题。

我也犯了同样的错误,问题不在于配置JDK,而在于应用程序中JKS文件的路径错误。trust-store: parameter下的属性文件,仔细检查路径是否正确。