当你谷歌这个例外:java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
,会出现多个结果.然而,没有确定的解决方案,只有猜测.
当我尝试使用SSL打开连接时,问题出现了(至少在我的情况下).它在我的Windows机器上工作正常,但是当我将它部署到linux机器(安装了sun的jre)时,它会因上述异常而失败.
问题是JRE的默认信任库由于某种原因是空的(大小只有32字节,而在Windows上是80kb).
当我将我的jre/lib/security/cacerts
文件从Windows 复制到linux时,它运行正常.
问题是 - 为什么linux jre有一个空的信任存储?
请注意,这种情况发生在使用AMI linux的Amazon EC2实例上,因此可能是由于一些亚马逊政策(我认为java已预先安装,但我不确定)
use*_*346 101
我在Ubuntu中遇到了这个错误.我看到/ usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts是/ etc/ssl/certs/java/cacerts的断开链接.这导致我 犯了这个错误: https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/983302 ca-certificates-java的README最终显示了实际修复:
跑
update-ca-certificates -f
Run Code Online (Sandbox Code Playgroud)
apt-get install ca-certificates-java对我不起作用.它只是将其标记为手动安装.
bes*_*sss 26
标准的Sun JDK for linux具有绝对正确的cacerts和指定目录中的所有文件.问题是您使用的安装.
小智 13
我通过在密钥库中放置一个虚拟证书来避免此错误(OSX 10.5.8上的Java 1.6.0),例如
keytool -genkey -alias foo -keystore cacerts -dname cn=test -storepass changeit -keypass changeit
Run Code Online (Sandbox Code Playgroud)
当然问题应该是"为什么java不能处理空的trustStore?"
不是原始问题的答案,但在尝试解决类似问题时,我发现Mac OS X对Maverics的更新搞砸了java安装(实际上是cacert).sudo rm -rf /Library/Java/JavaVirtualMachines/*.jdk
从http://www.oracle.com/technetwork/java/javase/downloads/index.html中删除并重新安装
我可以通过将系统属性trustStore设置为缺少的jks文件来生成此错误.例如
System.setProperty("javax.net.ssl.keyStore", "C:/keystoreFile.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "mypassword");
System.setProperty("javax.net.ssl.trustStore", "C:/missing-keystore.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "mypassword");
Run Code Online (Sandbox Code Playgroud)
此代码由于某种原因不会生成FileNotFound异常,但完全是上面列出的InvalidAlgorithmParameter异常.
有点愚蠢的答案,但我可以重现.
在安装了java-8-oracle的Ubuntu 14.10上遇到了同样的问题.
解决了安装ca-certificates-java包的问题:
sudo apt-get install ca-certificates-java
Run Code Online (Sandbox Code Playgroud)
小智 6
我在Windows上的解决方案是以管理员身份运行控制台窗口或更改环境变量MAVEN_OPTS以使用trust.jks的硬编码路径(例如'C:\ Users\oddros')而不是'%USERPROFILE%'.我的MAVEN_OPTS现在看起来像这样:
-Djavax.net.ssl.trustStore=C:\Users\oddros\trust.jks -Djavax.net.ssl.trustStorePassword=changeit
Run Code Online (Sandbox Code Playgroud)
我的 cacerts 文件完全是空的。我通过从我的 Windows 机器(使用 Oracle Java 7)复制 cacerts 文件并将其 scp 到我的 Linux 机器(OpenJDK)解决了这个问题。
cd %JAVA_HOME%/jre/lib/security/
scp cacerts mylinuxmachin:/tmp
Run Code Online (Sandbox Code Playgroud)
然后在linux机器上
cp /tmp/cacerts /etc/ssl/certs/java/cacerts
Run Code Online (Sandbox Code Playgroud)
到目前为止效果很好。
归档时间: |
|
查看次数: |
204893 次 |
最近记录: |