Java 错误-trustAnchors参数必须为非空
我试图在Jenkins/Hudson上配置我的电子邮件,但我不断收到错误:Java 错误-trustAnchors参数必须为非空,java,hudson,jakarta-mail,jenkins,Java,Hudson,Jakarta Mail,Jenkins,我试图在Jenkins/Hudson上配置我的电子邮件,但我不断收到错误: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty 我在网上看到了大量关于这个错误的信息,但是我没有得到任何有用的信息。我在FedoraLinux(不是OpenJDK)上使用Sun的JDK 以下是我尝试过的几件事。我试着按照这个建议做,但是从Windows复制cacerts到
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be
non-empty
我在网上看到了大量关于这个错误的信息,但是我没有得到任何有用的信息。我在FedoraLinux(不是OpenJDK)上使用Sun的JDK
以下是我尝试过的几件事。我试着按照这个建议做,但是从Windows复制cacerts到我的Fedora盒托管Jenkins没有用。当我试图将Gmail配置为我的SMTP服务器时,我尝试了以下操作,但也没有成功。我还尝试手动下载和移动这些cacert文件,并使用上的各种命令将它们移到我的Java文件夹中
我愿意接受任何建议,因为我目前正陷于困境。我已经从Windows Hudson服务器上获得了它,但我在Linux上遇到了困难。这个奇怪的消息意味着您指定的
信任库是:
- 空的,
- 找不到,或
- 无法打开
- (由于错误/缺失
trustStorePassword
,或
- 例如,文件访问权限)
另请参见@AdamPlumb。我从博客中找到了这个解决方案:
修复在OSX上运行OpenJDK 7时的信任锚问题。如果您在OSX上运行OpenJDK 7,并且看到此异常:
意外错误:java.security.invalidalgorithParameterException:信任锚
参数必须为非空
有一个简单的解决办法。只需在苹果JDK 1.6使用的相同cacerts文件中链接:
cd$(/usr/libexec/java_home-v1.7)/jre/lib/security
ln-fsh/System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts
您需要为已安装的每个OpenJDK版本执行此操作。只需将-v1.7
更改为要修复的版本。运行/usr/libexec/java_home-V
查看您安装的所有JRE和JDK
也许OpenJDK的伙计们可以将此添加到他们的安装脚本中。在(Quantal Quetzal)或更高版本中,证书保存在包中。使用-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts
无论您使用的是什么JDK,都会获取它们。升级到(Mavericks)后,我在OSX上使用JDK1.7遇到了这个问题。对我有效的修复方法是简单地重新安装Java的Apple版本,可在上获得。在更新OSX v10.9(Mavericks)后,当使用旧的Java 6并试图访问HTTPS URL时,我在OS X上也遇到了这种情况。修正案与彼得·克里恩斯相反;我需要将cacerts
从1.7空间复制到1.6版本链接的位置:
(as root)
umask 022
mkdir -p /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security
cp $(/usr/libexec/java_home -v 1.7)/jre/lib/security/cacerts \
/System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security
升级到(Mavericks)后,我遇到了很多安全问题:
- AmazonAWS的SSL问题
- 未使用Maven和Eclipse对对等机进行身份验证
trustAnchors
参数必须为非空
我应用了这个Java更新,它解决了我的所有问题:EJP基本上回答了这个问题(我意识到这有一个公认的答案),但我只是处理了这个边缘案例,我想让我的解决方案永垂不朽
我以前为仅SSL访问设置的托管服务器上出现了InvalidalgorithParameterException
错误。问题是我已经用PKCS#12格式设置了我的密钥库,但我的信任库是JKS格式的
在我的例子中,我编辑了我的server.xml
文件来指定PKCS的keystoreType,但我没有指定truststoreType,因此它默认为keystoreType。将truststoreType显式指定为JKS为我解决了这个问题。在Red Hat Linux上,我通过将证书导入/etc/pki/java/cacerts
解决了这个问题。这为我在Ubuntu上解决了这个问题:
sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure
(可在此处找到:)
ca证书java
在Oracle JDK/JRE中不是依赖项,因此必须显式安装。我希望这样,因为我在我的系统中使用了一个备用JVM(目前只支持JDK 1.7)。为了安全起见,我使用8。。。反正
- 更新您的证书存储:
sudo update-ca-certificates -f
然后
- 在初始化参数中添加新值
sudo gedit $(path to your architecture specific ini i.e. TOS_DI...ini)
Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts
对我来说,第二个条目起了作用。我认为,根据Talend Open Studio/TEnt+JVM的版本,它有不同的参数名,但它查找相同的密钥库文件。
sudo update-ca-certificates -f
要创建证书文件,请执行以下操作:
sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure
我又开始做生意了,谢谢你们。遗憾的是,它没有包含在安装中,但我最终做到了。在我的例子中,客户端应用程序中使用的JKS文件已损坏。我创建了一个新的,并在其中导入了目标服务器SSL证书。然后我在客户端应用程序中使用新的JKS文件作为信任存储,如:
System.setProperty("javax.net.ssl.trustStore",path_to_your_cacerts_file);
资料来源:
我使用(keystoreexplorer)工具来创建新的jk。您可以从这个链接下载它。错误表明系统无法在参数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
我在cacerts的路径上遇到了一些问题(环境变量%java_home%被覆盖了),所以我使用了这个简单的解决方案
这样做的目的是为信任库文件提供一个有效的路径——理想的情况是使用一个相对路径。也可以使用绝对路径
要确保存储类型为JKS,请运行以下命令:
keytool -list -keystore cacerts
Keystore type: JKS
Keystore provider: SUN
注意:由于证书有过期日期,或可能因其他原因而无效,请不时检查cacerts中的证书是否仍然有效
System.setProperty("javax.net.ssl.trustStore", "C:\\Users\\user-id\\Desktop\\tomcat\\cacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "passwd");
server.ssl.key-store=classpath:server.jks
server.ssl.trust-store=classpath:server.jks
keytool -list -keystore keystore.jks
-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts
sudo apt install ca-certificates-java
sudo update-ca-certificates -f
sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure
sudo apt install ca-certificates-java
cp /etc/ssl/certs/java/cacerts /path/to/jdk-9.0.1/lib/security/cacerts
sudo yum install ca-certificates
cp /etc/pki/java/cacerts /path/to/jdk-9.0.1/lib/security/cacerts
sudo dpkg --purge --force-depends ca-certificates-java
sudo apt-get install ca-certificates-java
sudo apt-get remove --purge openjdk* java-common default-jdk
sudo apt-get autoremove --purge
sudo update-alternatives --config java
sudo apt-get install openjdk-8-jdk
keystore.type=jks
sudo dpkg --purge --force-depends ca-certificates-java
sudo apt-get install ca-certificates-java
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"]