Java 需要帮助调试tomcat中的SSL握手吗
我有一个非常奇怪的问题,正在寻找一些提示。我有一个客户端发送的证书,我需要安装它,以便访问HTTPS Web服务。该证书已在windows和Linux操作系统中安装。使用keytool命令Java 需要帮助调试tomcat中的SSL握手吗,java,tomcat,ssl,certificate,Java,Tomcat,Ssl,Certificate,我有一个非常奇怪的问题,正在寻找一些提示。我有一个客户端发送的证书,我需要安装它,以便访问HTTPS Web服务。该证书已在windows和Linux操作系统中安装。使用keytool命令 keytool -import -alias ca -file somecert.cer -keystore cacerts –storepass changeit 在windows tomcat中部署应用程序时,我可以与HTTPS web服务器通信。但是Linux tomcat给了我一个错误: 原因:su
keytool -import -alias ca -file somecert.cer -keystore cacerts –storepass changeit
在windows tomcat中部署应用程序时,我可以与HTTPS web服务器通信。但是Linux tomcat给了我一个错误:
原因:sun.security.provider.certpath.SunCertPathBuilderException:
在上找不到请求目标的有效证书路径
SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:236)
位于java.security.cert.CertPathBuilder.build(CertPathBuilder.java:194)
在
sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:216)
这意味着它找不到证书。该证书位于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设置启用SSL调试System.setProperty(“javax.net.debug”,“all”)
工作?出于某种原因,我在Catalina.out中没有看到任何SSL调试信息。我是否需要更改其他内容。我应该看到什么样的调试信息
如果需要任何帮助,我将束手无策。要解决此问题,您可以尝试以下方法 下载SSLPoke.java 编译它:
javac SSLPoke.java
编译代码后,调用SSLPoke作为
java -Djavax.net.debug=all SSLPoke [your https host] 443
在输出中,您将看到java在哪里寻找Cacert
知道确切位置后,使用keytool将文件导入cacerts
keytool -import -alias [your https host] -keystore [the location returned]/cacerts -file [your.crt]
就这些,重新启动tomcat,它必须正常工作
有时,当您在同一台Linux机器上有很多java版本时,即使将[your.crt]添加到调试返回的cacerts中也不起作用,如果是这种情况,将[your.crt]添加到Linux机器上的所有cacerts中,您可以通过以下方法找到它们:
locate cacert
一旦Linux机器返回cacerts的所有位置,例如:
/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_客户端-连接[您的https主机]:443
并从------开始证书------复制到------结束证书-----
我希望这对您有所帮助您是否检查了证书本身,以查看证书路径中是否缺少任何根证书
另外,请记住,如果您指向Java的内置cacerts并转到更新Java,您的证书将被覆盖。出于这个原因,我通常使用备用密钥库位置。您在Tomcat中配置了SSL吗?默认情况下它没有运行。tomcat中是否有SSL客户端,如果有,我认为它正在运行,因为我有其他工作正常的HTTPS通信。只有这个不行。你能帮我检查一下它是否在运行吗。Tomcat是这里的客户。我知道tomcat SSL服务器有soem配置,您能否澄清“我有一个由客户端发送的证书”?你是在说客户端证书吗?听起来您的应用程序(在Tomcat中运行)是一个连接到另一台服务器的客户机(因此与Tomcat本身没有什么关系)。是这样吗?这正是你说的布鲁诺。我的应用程序(在Tomcat中运行)是一个连接到另一台服务器的客户机(因此与Tomcat本身没有什么关系)。这个应用程序是一个基于tomcat的WAR文件。tomcat使用我已安装的JRE 5,有什么提示我如何调试它吗?或是你让我开心的一天:)