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


当前回答

我在网上找到的解决办法都没用,但彼得·克里恩斯(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)上的证书。

其他回答

我跑

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

EJP基本上回答了这个问题(我意识到这有一个公认的答案),但我只是处理了这个边缘情况,并想让我的解决方案永垂不朽。

我在托管的Jira服务器上有InvalidAlgorithmParameterException错误,我之前为仅ssl访问设置了该服务器。问题是我用PKCS#12格式设置了密钥存储库,但我的信任存储库是JKS格式。

在我的例子中,我编辑了server.xml文件,将keystoreType指定为PKCS,但是我没有指定truststoreType,因此它默认为keystoreType。明确指定truststoreType作为JKS为我解决了这个问题。

除了....,这对任何人都没有帮助对于任何在树莓派(使用AMD CPU)上从Docker镜像运行Java 8的人来说,我得到了以下Dockerfile,为我成功地构建和运行

FROM hypriot/rpi-java
USER root

WORKDIR /usr/build/

RUN /usr/bin/printf '\xfe\xed\xfe\xed\x00\x00\x00\x02\x00\x00\x00\x00\xe2\x68\x6e\x45\xfb\x43\xdf\xa4\xd9\x92\xdd\x41\xce\xb6\xb2\x1c\x63\x30\xd7\x92' > /etc/ssl/certs/java/cacerts
RUN update-ca-certificates -f
RUN /var/lib/dpkg/info/ca-certificates-java.postinst configure

EXPOSE 8080

ARG JAR_FILE=target/app-0.0.1-SNAPSHOT.jar

ADD ${JAR_FILE} app.jar

ENTRYPOINT ["java", "-Djavax.net.ssl.trustStorePassword=changeit", "-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts", "-jar", "app.jar"]

您必须将证书文件添加到java密钥存储库中 进入chrom,打开网站,以txt格式保存证书

2 .执行cmd> keytool -import -trustcacerts -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -alias Root -import -file Trustedcaroot.txt

https://knowledge.digicert.com/solution/SO4085.html

这招很管用

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