Dav*_*ill 456 java hudson jakarta-mail jenkins
我正在尝试在Jenkins/Hudson上配置我的电子邮件,并且我经常收到错误:
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be
non-empty
Run Code Online (Sandbox Code Playgroud)
我在网上看到了大量有关错误的信息,但我没有任何工作.我在Fedora Linux上使用Sun的JDK(而不是OpenJDK).
以下是我尝试过的一些事情.我尝试按照这篇文章的建议,但将cacerts从Windows复制到我托管Jenkins的Fedora盒子都没有用.我尝试将Gmail配置为我的SMTP服务器时尝试按照本指南操作,但它也无法正常工作.我还尝试手动下载并移动这些cacert文件,并使用本指南中的命令变体将它们移动到我的Java文件夹.
我对任何建议持开放态度,因为我现在正被困住.我已经从Windows Hudson服务器上工作了,但我在Linux上苦苦挣扎.
use*_*421 483
这个奇怪的消息意味着您指定的信任库是:
另见@ AdamPlumb的答案如下.
Mik*_*eck 257
在Ubuntu 18.04中,此错误有不同的原因(JEP 229,从jks密钥库默认格式切换到pkcs12格式,以及使用新文件的默认值生成Debian cacerts文件)和解决方法:
# 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
Run Code Online (Sandbox Code Playgroud)
https://git.mikael.io/mikaelhg/broken-docker-jdk9-cacerts
状态(2018-08-07),该错误已在Ubuntu Bionic LTS 18.04.1和Ubuntu Cosmic 18.10中修复.
Ubuntu 1770553:[SRU] backport ca-certificates-java from cosmic(20180413ubuntu1)
Ubuntu 1769013:请合并来自Debian unstable(main)的ca-certificates-java 20180413(main)
Ubuntu 1739631:使用JDK 9进行全新安装无法使用生成的PKCS12 cacerts密钥库文件
docker-library 145:9-jdk image有SSL问题
JDK-8044445:JEP 229:默认情况下创建PKCS12密钥库
如果在此变通办法之后问题仍然存在,您可能希望确保实际运行刚刚修复的Java发行版.
$ which java
/usr/bin/java
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令将Java替代项设置为"auto":
$ sudo update-java-alternatives -a
update-alternatives: error: no alternatives for mozilla-javaplugin.so
Run Code Online (Sandbox Code Playgroud)
您可以仔细检查您正在执行的Java版本:
$ java --version
openjdk 10.0.1 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 10.0.1+10-Ubuntu-3ubuntu1, mixed mode)
Run Code Online (Sandbox Code Playgroud)
有替代的解决方法为好,但那些有自己的副作用,这将需要额外的未来的维护,因为没有任何回报.
下一个最佳解决方法是添加行
javax.net.ssl.trustStorePassword=changeit
Run Code Online (Sandbox Code Playgroud)
到文件
/etc/java-9-openjdk/management/management.properties
/etc/java-11-openjdk/management/management.properties
Run Code Online (Sandbox Code Playgroud)
无论哪个存在.
第三个问题最少的解决方法是更改值
keystore.type=pkcs12
Run Code Online (Sandbox Code Playgroud)
至
keystore.type=jks
Run Code Online (Sandbox Code Playgroud)
在文件中
/etc/java-9-openjdk/security/java.security
/etc/java-11-openjdk/security/java.security
Run Code Online (Sandbox Code Playgroud)
无论哪个存在,然后删除该cacerts文件并以前面描述的方式重新生成它.
小智 103
这解决了我在Ubuntu上的问题:
sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure
Run Code Online (Sandbox Code Playgroud)
(在此处找到:https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760)
ca-certificates-java 不是Oracle JDK/JRE中的依赖项,因此必须显式安装.
shv*_*abi 67
在Ubuntu 18.04上,根本原因是openjdk-11-jdk(默认)和其他包依赖于它之间的冲突.它已经在Debian中修复,很快就会被包含在Ubuntu中.同时最简单的解决方法是将您的java降级为版本8.其他解决方案使用ca-certificates-java起来要复杂得多.
首先删除冲突的包:
sudo apt-get remove --purge openjdk* java-common default-jdk
sudo apt-get autoremove --purge
Run Code Online (Sandbox Code Playgroud)
检查您是否已成功删除所有相关包:
sudo update-alternatives --config java
Run Code Online (Sandbox Code Playgroud)
系统将提示您没有可用于配置的Java,否则此解决方法将失败.
然后重新安装所需的包:
sudo apt-get install openjdk-8-jdk
Run Code Online (Sandbox Code Playgroud)
Ada*_*umb 55
EJP基本上回答了这个问题(我意识到这有一个已经接受的答案),但我刚刚处理了这个边缘案例并想要永久化我的解决方案.
我在托管的Jira服务器上遇到了InvalidAlgorithmParameterException错误,我之前已将其设置为仅限SSL访问.问题是我以PKCS#12格式设置了我的密钥库,但我的信任库是JKS格式.
在我的例子中,我编辑了我的server.xml文件以将keystoreType指定为PKCS,但我没有指定truststoreType,因此它默认为keystoreType.明确地将truststoreType指定为JKS为我解决了它.
Pet*_*ens 52
我在OS X上运行OpenJDK 7时从博客文章修复了trustAnchors问题遇到了这个解决方案:
在OS X上运行OpenJDK 7时修复了trustAnchors问题.如果你在OS X上运行OpenJDK 7并且看到了这个异常:
Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors
parameter must be non-empty
Run Code Online (Sandbox Code Playgroud)
有一个简单的解决方案.只需链接Apple的JDK 1.6使用的相同cacerts文件:
cd $(/usr/libexec/java_home -v 1.7)/jre/lib/security
ln -fsh /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts
Run Code Online (Sandbox Code Playgroud)
您需要为已安装的每个OpenJDK版本执行此操作.只需更改-v 1.7为您要修复的版本即可.运行/usr/libexec/java_home -V以查看已安装的所有JRE和JDK.
也许OpenJDK的人可以将它添加到他们的安装脚本中.
小智 42
在Ubuntu 12.10(Quantal Quetzal)或更高版本中,证书保存在ca-certificates-java包中.-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts无论您使用的是什么JDK,使用都会将它们捡起来.
Kiw*_*tin 34
在升级到OS X v10.9(Mavericks)之后,我在OS X上使用JDK 1.7遇到了这个问题.对我有用的修复方法是简单地重新安装Apple版本的Java,可从http://support.apple.com/kb/DL1572获得.
小智 28
我跑了
sudo update-ca-certificates -f
Run Code Online (Sandbox Code Playgroud)
创建证书文件,然后:
sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure
Run Code Online (Sandbox Code Playgroud)
我回来了,谢谢你们.遗憾的是它没有包含在安装中,但最终我到了那里.
raz*_*one 17
该错误告诉系统在参数提供的路径中找不到信任库javax.net.ssl.trustStore.
在Windows下,我将cacerts文件复制jre/lib/security到Eclipse安装目录(与eclipse.ini文件相同的位置),并在以下位置添加了以下设置eclipse.ini:
-Djavax.net.ssl.trustStore=cacerts
-Djavax.net.ssl.trustStorePassword=changeit
-Djavax.net.ssl.trustStoreType=JKS
Run Code Online (Sandbox Code Playgroud)
我在cacerts的路径上遇到了一些麻烦(%java_home%环境变量以某种方式被覆盖),所以我使用了这个简单的解决方案.
我们的想法是提供信任库文件的有效路径 - 理想情况下,它将使用相对文件.您也可以使用绝对路径.
要确保商店类型是JKS,您将运行以下命令:
keytool -list -keystore cacerts
Keystore type: JKS
Keystore provider: SUN
Run Code Online (Sandbox Code Playgroud)
eri*_*111 13
删除ca-certificates-java包并再次安装它对我有用(Ubuntu MATE 17.10(Artful Aardvark)).
sudo dpkg --purge --force-depends ca-certificates-java
sudo apt-get install ca-certificates-java
Run Code Online (Sandbox Code Playgroud)
谢谢你,jdstrand:错误983302的评论1,Re:ca-certificates-java无法在Oneiric Ocelot上安装Java cacerts.
Fre*_*her 11
升级到OS X v10.9(Mavericks)后,我遇到了很多安全问题:
trustAnchors 参数必须为非空我应用了这个Java更新,它修复了我的所有问题:http://support.apple.com/kb/DL1572?viewlocale = en_US
rai*_*tin 11
某些 OpenJDK 供应商版本导致此问题的原因是cacerts随二进制文件分发了一个空文件。该错误在这里解释:https : //github.com/AdoptOpenJDK/openjdk-build/issues/555
您可以adoptOpenJdk8\jre\lib\security\cacerts从旧安装复制到文件,如c:\Program Files\Java\jdk1.8.0_192\jre\lib\security\cacerts.
AdoptOpenJDK 错误版本是https://github.com/AdoptOpenJDK/openjdk8-releases/releases/download/jdk8u172-b11/OpenJDK8_x64_Win_jdk8u172-b11.zip
小智 9
我期待这样的事情,因为我在我的Talend Open Studio中使用备用JVM (目前支持仅存在于JDK 1.7之前).无论如何,我使用8作为安全目的
更新证书存储区:
sudo update-ca-certificates -f
Run Code Online (Sandbox Code Playgroud)然后
在初始化参数中添加新值
sudo gedit $(path to your architecture specific ini i.e. TOS_DI...ini)
Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts
Run Code Online (Sandbox Code Playgroud)对我来说,第二个条目有效.我认为,根据Talend Open Studio/TEnt + JVM的版本,它具有不同的参数名称,但它会查找相同的密钥库文件.
对我来说,这是由信任库中缺少trustedCertEntry引起的.
要测试,请使用:
keytool -list -keystore keystore.jks
Run Code Online (Sandbox Code Playgroud)
它给了我:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
cert-alias, 31-Jul-2017, PrivateKeyEntry
Run Code Online (Sandbox Code Playgroud)
即使我的PrivateKeyEntry包含CA,它也需要单独导入:
keytool -import -alias root-ca1 -file rootca.crt -keystore keystore.jks
Run Code Online (Sandbox Code Playgroud)
它导入证书,然后重新运行keytool -list -keystore keystore.jks现在给出:
Your keystore contains 2 entries
cert-alias, 31-Jul-2017, PrivateKeyEntry,
Certificate fingerprint (SHA1):
<fingerprint>
root-ca1, 04-Aug-2017, trustedCertEntry,
Certificate fingerprint (SHA1):
<fingerprint>
Run Code Online (Sandbox Code Playgroud)
现在它有一个trustedCertEntry,Tomcat将成功启动.
我在 Linux 上的 Java 9.0.1 上收到此错误消息。这是由于 JDK 的一个已知错误,导致 .tar.gz 二进制包(从http://jdk.java.net/9/下载)中的 cacerts 文件为空。
请参阅JDK 9.0.1 发行说明的“已知问题”段落,其中提到“TLS 默认情况下在 OpenJDK 9 上不起作用”。
在 Debian/Ubuntu(可能还有其他衍生版本)上,一种简单的解决方法是将 cacerts 文件替换为“ca-certificates-java”包中的文件:
sudo apt install ca-certificates-java
cp /etc/ssl/certs/java/cacerts /path/to/jdk-9.0.1/lib/security/cacerts
Run Code Online (Sandbox Code Playgroud)
在 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
Run Code Online (Sandbox Code Playgroud)
我是可移植性的粉丝,所以我不安装 java,只需下载 tar.gz 并导出路径中的一些值,一切正常。
我与这个问题作斗争,但没有解决方案(安装或更新操作系统证书)。没有什么对我有用。
就我而言,查看我的 jdk 文件夹,与其他 jdk 文件夹(服务器和朋友)相比,cacerts 文件的大小较小:
/../some_openjdk/jre/lib/security/cacerts 大小:32 字节
我从以下位置下载的:
经过多次尝试,我找到了正确的 jdk.tar.gz,其中包含大小为101 KB的cacerts文件
我从https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries下载了open jdk
我在这个 Dockerfile 中找到了这个网址:
就我而言,客户端应用程序中使用的 JKS 文件已损坏。我创建了一个新证书并在其中导入了目标服务器 SSL 证书。然后我在客户端应用程序中使用新的 JKS 文件作为信任存储,例如:
System.setProperty("javax.net.ssl.trustStore",path_to_your_cacerts_file);
Run Code Online (Sandbox Code Playgroud)
我使用(KeyStore Explorer)工具来创建新的 JKS。您可以从此链接KeyStore Explorer下载它。
升级到 Spring Boot 1.4.1(或更高版本)后,您也可能会遇到此错误,因为它带来了Tomcat 8.5.5 作为其依赖项的一部分。
该问题是由于 Tomcat 处理信任存储的方式造成的。如果您碰巧在 Spring Boot 配置中指定了与密钥库相同的信任存储位置,那么您可能会trustAnchors parameter must be non-empty在启动应用程序时收到该消息。
server.ssl.key-store=classpath:server.jks
server.ssl.trust-store=classpath:server.jks
Run Code Online (Sandbox Code Playgroud)
只需删除server.ssl.trust-store配置,除非您知道需要它,在这种情况下,请参阅下面的链接。
以下问题包含有关该问题的更多详细信息:
如果您在使用JDK9和Maven的Ubuntu上遇到这种情况,则可以添加此JVM选项-首先检查路径是否存在:
-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts
Run Code Online (Sandbox Code Playgroud)
如果该文件丢失,请尝试按照以下提示安装ca-certificates-java:
sudo apt install ca-certificates-java
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
527421 次 |
| 最近记录: |