0

我有一个尝试访问 https url 的网络应用程序。我有一组 4 个证书,我使用 keytool 将它们导入一个通用文件中

keytool -import -v -alias a_base64 -trustcacerts -file a_Base64.cer -keystore testcacerts
keytool -import -v -alias b_base64 -trustcacerts -file b_base64.cer -keystore testcacerts
keytool -import -v -alias c_base64 -trustcacerts -file c_Base64.cer -keystore testcacerts
keytool -import -v -alias d_base64 -trustcacerts -file d_base64.cer -keystore testcacerts

文件 testcacerts 生成良好。在我的 Eclipse IDE 中,我有一个可以访问 https url 的 java 程序。在运行程序时,我在 VM 参数中给出了以下内容 -Djavax.net.ssl.keyStore=c://testcacerts

java程序运行良好。现在我在tomcat server 7中部署项目的war。当我的应用程序尝试访问https url时,它给出了以下异常

    sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.

我将环境变量 CATALINA_OPTS 和 JAVA_OPTS 设置为指向 testcacerts 位置 JAVA_OPTS=-Djavax.net.ssl.trustStore=/temp/testcacerts

在我重新启动我的 tomcat 后,当我的应用程序点击 https url 时,我得到了同样的异常。我什至尝试在 tomcat conf 中更改 server.xml 中的配置,如下所示

   <Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" 
maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" 
scheme="https" secure="true" SSLEnabled="true" clientAuth="false" sslProtocol="TLS"  
keystoreFile="/temp/testcacerts" keystorePass="samplePassword" />

keystorePass 中的密码是我在生成密钥库时提供的密码。

即使经过上述更改,我也遇到了同样的异常。

我目前正在 Unix 环境中运行该应用程序,并且 Unix 服务器中也存在 tomcat。我无权访问 java 安装目录,因此我无法将此证书文件放在 jre\lib\security 文件夹中。

我在这里有什么遗漏吗。请指导我。

4

1 回答 1

0

如果它是有效的自签名证书,您应该为 SSL 连接器选择一个证书。请将keyAlias所选证书(例如a_base64)添加到您的连接器配置中

<Connector port="8443" ... keyAlias="a_base64" />

有用的链接:

http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html

http://tomcat.apache.org/tomcat-7.0-doc/config/http.html

您可以删除您的-Djavax设置。

于 2013-05-15T13:09:25.687 回答