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


当前回答

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

其他回答

我发现了这个错误的另一个原因,这与Ubuntu无关。

我尝试在Spring boot 2应用程序中设置相互TLS,在使用只有私钥条目而没有受信任证书条目的信任库后遇到了这个问题。

这是我的Spring Boot TLS配置

server.port=8443
server.ssl.key-alias=oba-tls
server.ssl.key-password=mypw
server.ssl.key-store-password=mypw
server.ssl.key-store=classpath:keys/tls-keystore.pfx
server.ssl.key-store-type=PKCS12
server.ssl.enabled=true
server.ssl.client-auth=need

server.ssl.trust-store=classpath:keys/truststore.pfx
server.ssl.trust-store-password=mypw
server.ssl.trust-store-type=PKCS12
server.ssl.ciphers=ECDHE-RSA-AES128-GCM-SHA256,ECDHE-RSA-AES256-SHA384
server.ssl.protocol=TLS
server.ssl.enabled-protocols=TLSv1.2

用于生成信任库。我必须使用以下命令使其工作。

openssl req -newkey rsa:2048 -nodes -keyout private.key -x509 -out cert.crt

keytool -importcert -alias oba-trust -file cert.crt -keystore truststore.jks

keytool -importkeystore -srckeystore truststore.jks -destkeystore truststore.pfx -srcstoretype JKS - deststoretype PKCS12 -deststorepass yourpassword

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

sudo update-ca-certificates -f

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

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

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

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

一些OpenJDK供应商发布的版本通过将空cacerts文件与二进制文件一起分发而导致了这种情况。该错误的解释在这里:https://github.com/AdoptOpenJDK/openjdk-build/issues/555

您可以从c:\Program Files\Java\ jdk1.8.0_192\jre\lib\security\cacerts等旧安装中将该文件复制到adoptOpenJdk8\jre\lib\security\cacerts。

AdoptOpenJDK的错误版本是https://github.com/AdoptOpenJDK/openjdk8-releases/releases/download/jdk8u172-b11/OpenJDK8_x64_Win_jdk8u172-b11.zip