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


当前回答

该错误表明系统无法在参数javax.net.ssl.trustStore提供的路径中找到信任库。

在Windows下,我将jre/lib/security中的cacerts文件复制到Eclipse安装目录(与Eclipse .ini文件相同的位置),并在Eclipse .ini中添加以下设置:

-Djavax.net.ssl.trustStore=cacerts
-Djavax.net.ssl.trustStorePassword=changeit
-Djavax.net.ssl.trustStoreType=JKS

我在cacerts的路径上遇到了一些问题(%java_home%环境变量以某种方式被覆盖了),所以我使用了这个简单的解决方案。

其思想是提供信任库文件的有效路径——理想情况下是使用相对路径。也可以使用绝对路径。

要确保存储类型为JKS,您将运行以下命令:

keytool -list -keystore cacerts

Keystore type: JKS
Keystore provider: SUN

注意:由于证书有过期日期,或可能因其他原因失效,请不时检查cacerts中的证书是否仍然有效。您通常会在jdk的最新版本中找到证书的有效版本。

其他回答

这为我解决了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中的依赖项,因此必须显式安装。

删除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。

在Red Hat Linux上,我通过将证书导入到/etc/pki/java/cacerts解决了这个问题

我在使用Android SDK sdkmanager时遇到了这个问题。对我来说,这个解决方案是有效的:

进入“/usr/lib/jvm/java-8-oracle/jre/lib/security/”目录 将cacert替换为cacert.original

cacert文件很小(22B)。我已经从ppa:webupd8team/java安装了oracle-java8-installer(根据本手册:https://docs.nativescript.org/start/ns-setup-linux)。

另一个原因是它实际上是一个有效的错误。一些恶意的Wi-Fi热点会破坏证书,并对你进行中间人攻击,谁知道你会做什么(逃跑!)

一些大的雇主也会做同样的事情,特别是在敏感的网络区域,这样他们就可以监控所有的加密流量(从最终用户的角度来看不是很好,但这样做可能有很好的理由)。