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


当前回答

在升级到OS X v10.9 (Mavericks)后,我使用JDK 1.7在OS X上遇到了这个确切的问题。对我来说,有效的解决方法是简单地重新安装苹果版的Java,可以在http://support.apple.com/kb/DL1572上找到。

其他回答

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

在Ubuntu 12.10 (Quantal Quetzal)或更高版本中,证书保存在ca-certificates-java包中。使用-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts将获取它们,不管你使用的是什么JDK。

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

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

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

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

我在Linux上的Java 9.0.1上有这个错误消息。这是由于JDK的一个已知错误,其中。tar.gz二进制包中的cacerts文件是空的(从http://jdk.java.net/9/下载)。

参见JDK 9.0.1版本说明的“已知问题”段落,说“TLS在OpenJDK 9上默认不工作”。

在Debian/Ubuntu(可能还有其他衍生版本)上,一个简单的解决方法是用"ca-certificates-java"包中的cacerts文件替换cacerts文件:

sudo apt install ca-certificates-java
cp /etc/ssl/certs/java/cacerts /path/to/jdk-9.0.1/lib/security/cacerts

在Red Hat Linux/CentOS上,你可以从“ca-certificates”包中做同样的事情:

sudo yum install ca-certificates
cp /etc/pki/java/cacerts /path/to/jdk-9.0.1/lib/security/cacerts