错误 - 信任运算符参数必须为非空

2022-08-31 04:14:58

我正在尝试在 Jenkins/Hudson 上配置我的电子邮件,但我经常收到错误:

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be
    non-empty

我在网上看到了大量关于这个错误的信息,但我还没有得到任何工作。我在Fedora Linux(不是OpenJDK)上使用Sun的JDK。

以下是我尝试过的一些事情。我尝试遵循这篇文章中的建议,但是将Cacerts从Windows复制到我的Fedora盒子中托管Jenkins不起作用。我尝试按照本指南进行操作,因为我正在尝试将Gmail配置为我的SMTP服务器,但它也不起作用。我还尝试手动下载并移动这些cacert文件,并使用本指南中命令的变体将它们移动到我的Java文件夹中。

我对任何建议持开放态度,因为我目前陷入困境。我已经从Windows Hudson服务器获得了它,但我在Linux上挣扎。


答案 1

此奇怪的消息意味着您指定的是:trustStore

  • 未找到,或
  • 无法打开
    • (由于错误/缺失,或trustStorePassword
    • 例如,文件访问权限)。

另请参阅下面@AdamPlumb的答案


答案 2

Ubuntu 18.04 中,此错误有不同的原因(JEP 229,从密钥库默认格式切换到该格式,以及 Debian cacerts 文件生成使用新文件的默认值)和解决方法jkspkcs12

# Ubuntu 18.04 and various Docker images such as openjdk:9-jdk throw exceptions when
# Java applications use SSL and HTTPS, because Java 9 changed a file format, if you
# create that file from scratch, like Debian / Ubuntu do.
#
# Before applying, run your application with the Java command line parameter
#  java -Djavax.net.ssl.trustStorePassword=changeit ...
# to verify that this workaround is relevant to your particular issue.
#
# The parameter by itself can be used as a workaround, as well.

# 0. First make yourself root with 'sudo bash'.

# 1. Save an empty JKS file with the default 'changeit' password for Java cacerts.
#    Use 'printf' instead of 'echo' for Dockerfile RUN compatibility.
/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

# 2. Re-add all the CA certs into the previously empty file.
/var/lib/dpkg/info/ca-certificates-java.postinst configure

状态 (2018-08-07),该 bug 已在 Ubuntu Bionic LTS 18.04.1 和 Ubuntu Cosmic 18.10 中修复。



推荐