我有个很奇怪的问题,想找些小贴士。我有一个由客户端发送的证书,我需要安装,这样我就可以访问HTTPS can服务。已经在windows和Linux操作系统中安装了证书。使用keytool命令
keytool -import -alias ca -file somecert.cer -keystore cacerts –storepass changeit
当我在windows中部署应用程序时,我可以与HTTPS web服务器进行通信。然而,Linux给了我一个错误:
导致: sun.security.provider.certpath.SunCertPathBuilderException:无法在java.security.cert.CertPathBuilder.build(CertPathBuilder.java:194) at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:216)的sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:236)找到被请求的目标的有效证书路径
这意味着它找不到证书。证书位于java安全仙人掌上。我使用了keytool -list
命令,它就在那里。
我不知道为什么它在windows而不是linux中工作。我已经尝试过在我的servlet中设置参数
System.setProperty("javax.net.debug", "all");
System.setProperty("javax.net.ssl.trustStore", "/usr/java/jdk1.5.0_14/jre/lib/security/cacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
还是不起作用。
我的问题是:
1.有人知道为什么这不管用,我什么都累了吗?
2.如何为tomcat.Ss设置System.setProperty("javax.net.debug", "all")
进行SSL调试?由于某些原因,我在Catalina.out中没有看到任何SSL调试信息。我是否需要更改任何应该看到的else.What调试信息。
任何帮助都会大大增加我的想法。
发布于 2015-03-19 12:08:02
要解决这个问题,您可以尝试以下方法
下载SSLPoke.java
汇编:
javac SSLPoke.java
编译代码后,将SSLPoke调用为
java -Djavax.net.debug=all SSLPoke [your https host] 443
在输出中,您将看到java正在寻找仙人掌的位置。
一旦您知道确切的位置,使用keytool将您的文件导入到仙人掌。
keytool -import -alias [your https host] -keystore [the location returned]/cacerts -file [your.crt]
仅此而已,重新启动tomcat,它必须工作正常。
有时,当同一台Linux机器上有大量java版本时,甚至向调试返回的仙人掌中添加your.crt都不起作用,如果是这种情况,那么将your.crt添加到Linux计算机上的所有仙人掌中,您可以通过以下方法找到它们:
locate cacert
一旦Linux机器返回仙人掌的所有位置,例如:
/home/xuser/NetBeansProjects/porjectx/conf/cacerts
/opt/otherlocation/j2sdkee1.3.1/lib/security/cacerts.jks
/opt/icedtea-bin-6.1.12.7/jre/lib/security/cacerts
/opt/icedtea-bin-6.1.13.5/jre/lib/security/cacerts
/opt/icedtea-bin-7.2.4.1/jre/lib/security/cacerts
/opt/oracle-jdk-bin-1.7.0.76/jre/lib/security/cacerts
/opt/sun-j2ee-1.3.1/lib/security/cacerts.jks
使用keytool将your.crt添加到所有它们中,然后重新启动tomcat。
如果您没有文件your.crt,您可以使用命令获得它
openssl s_client -connect [your https host]:443 < /dev/null
然后复印-开始证书
我希望这对你有帮助
发布于 2016-06-20 10:34:38
您是否检查了证书本身,以确定证书路径中是否缺少根证书?
另外,请记住,如果您指向Java的内置仙人掌,并且要更新Java,您的证书将被覆盖。为此,我通常使用备用密钥存储位置。
https://stackoverflow.com/questions/8436138
复制相似问题