首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >需要帮助调试tomcat中的SSL握手

需要帮助调试tomcat中的SSL握手
EN

Stack Overflow用户
提问于 2011-12-08 10:56:42
回答 2查看 19.3K关注 0票数 4

我有个很奇怪的问题,想找些小贴士。我有一个由客户端发送的证书,我需要安装,这样我就可以访问HTTPS can服务。已经在windows和Linux操作系统中安装了证书。使用keytool命令

代码语言:javascript
运行
AI代码解释
复制
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中设置参数

代码语言:javascript
运行
AI代码解释
复制
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调试信息。

任何帮助都会大大增加我的想法。

EN

回答 2

Stack Overflow用户

发布于 2015-03-19 12:08:02

要解决这个问题,您可以尝试以下方法

下载SSLPoke.java

SSLPoke.java

汇编:

代码语言:javascript
运行
AI代码解释
复制
javac SSLPoke.java 

编译代码后,将SSLPoke调用为

代码语言:javascript
运行
AI代码解释
复制
java -Djavax.net.debug=all SSLPoke [your https host] 443

在输出中,您将看到java正在寻找仙人掌的位置。

一旦您知道确切的位置,使用keytool将您的文件导入到仙人掌。

代码语言:javascript
运行
AI代码解释
复制
keytool -import -alias [your https host] -keystore [the location returned]/cacerts -file [your.crt]

仅此而已,重新启动tomcat,它必须工作正常。

有时,当同一台Linux机器上有大量java版本时,甚至向调试返回的仙人掌中添加your.crt都不起作用,如果是这种情况,那么将your.crt添加到Linux计算机上的所有仙人掌中,您可以通过以下方法找到它们:

代码语言:javascript
运行
AI代码解释
复制
locate cacert

一旦Linux机器返回仙人掌的所有位置,例如:

代码语言:javascript
运行
AI代码解释
复制
/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

然后复印-开始证书

我希望这对你有帮助

票数 6
EN

Stack Overflow用户

发布于 2016-06-20 10:34:38

您是否检查了证书本身,以确定证书路径中是否缺少根证书?

另外,请记住,如果您指向Java的内置仙人掌,并且要更新Java,您的证书将被覆盖。为此,我通常使用备用密钥存储位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8436138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档