我有一个尝试访问 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 文件夹中。
我在这里有什么遗漏吗。请指导我。