我试图在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上却很吃力。
我是可移植性的粉丝,所以我不安装java,只是下载tar.gz并导出路径中的一些值,一切都可以工作。
我与这个问题作斗争,没有解决方案(安装或更新操作系统证书)对我有效。
在我的情况下的错误是:空cacerts在我的jdk。
我不知道为什么,但是我的jdk.tar.gz有一个空的cacerts文件
/ . ./some_openjdk/jre/lib/security/cacerts size: 32字节
下载:
https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
https://download.java.net/java/GA/jdk9/9/binaries/openjdk-9_linux-x64_bin.tar.gz
Fix
经过几次尝试,我找到了一个正确的jdk.tar.gz,其中包含一个101 KB大小的cacerts文件
我从https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries下载了这个开放jdk
https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u262-b10/OpenJDK8U-jdk-jfr_x64_linux_8u262b10.tar.gz
我在这个Dockerfile中找到了这个url:
https://github.com/docker-library/openjdk/blob/b5d14d9165fad693901c285d6e7bbc36d1cde41f/8/jdk/Dockerfile
我在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
我发现了这个错误的另一个原因,这与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