我有一个Java客户端试图使用自签名证书访问服务器。
当我试图发布到服务器,我得到以下错误:
无法找到请求目标的有效认证路径
在对这个问题做了一些研究之后,我做了以下工作。
保存我的服务器域名为根。cer文件。
在我的Glassfish服务器的JRE中,我运行了这个:
Keytool -import -alias example -keystore cacerts -file root.cer
为了检查证书是否成功添加到我的cacert,我这样做:
Keytool -list -v -keystore cacerts
我可以看到证书是存在的。
然后我重新启动Glassfish并重新尝试“post”。
我还是得到同样的错误。
我有一种感觉,这是因为我的Glassfish实际上没有读取我修改过的cacert文件,但可能是其他一些文件。
你们中有人遇到过这样的问题吗,可以帮我找到正确的方向吗?
在我的例子中,我遇到了这个问题,因为在我的tomcat进程中,特定的密钥存储库是使用的
-Djavax.net.ssl.trustStore=/pathtosomeselfsignedstore/truststore.jks
当我将证书导入JRE/lib/security的cacert时,没有反映更改。
然后执行以下命令,其中/tmp/cert1。Test包含目标服务器的证书
keytool -import -trustcacerts -keystore /pathtosomeselfsignedstore/truststore.jks -storepass password123 -noprompt -alias rapidssl-myserver -file /tmp/cert1.test
可以再次检查证书导入是否成功
keytool -list -v -keystore /pathtosomeselfsignedstore/truststore.jks
并查看是否在别名rapidssl-myserver中找到您的taget服务器
我在我的windows 10笔记本电脑上创建了一个ubuntu,当我试图从https://github.com/yahoo/CMAK网站加载CMAK网站下载时遇到了问题。首先,它给出了致命的ssl错误。
openssl s_client -showcerts -servername github.com -connect github.com:443 </dev/null 2>/dev/null | sed -n -e '/BEGIN\ CERTIFICATE/,/END\ CERTIFICATE/ p' > github-com.pem
并使用以下命令(确保您为ca-cert设置了正确的路径)
cat github-com.pem | sudo tee -a /etc/ssl/certs/ca-certificates.crt
然后使用以下语句(确保cert的路径正确):
git config --global http.sslCAinfo /etc/ssl/certs/ca-certificates.crt
然后我能够下载CMAK,但当我尝试。/sbt清洁语句时遇到了问题。它给出了一个pkix路径错误。原因是我的cacert文件中没有存储我的公司颁发证书。
我已经下载了公司证书(谷歌),并根据本文将下载的证书添加到cacert文件中。使用sudo update-ca-certificates之前一次。/ sbt。这对我很管用。
注意:在执行以上步骤时,您可能需要在root和exit之间切换。
在我的例子中,我遇到了这个问题,因为在我的tomcat进程中,特定的密钥存储库是使用的
-Djavax.net.ssl.trustStore=/pathtosomeselfsignedstore/truststore.jks
当我将证书导入JRE/lib/security的cacert时,没有反映更改。
然后执行以下命令,其中/tmp/cert1。Test包含目标服务器的证书
keytool -import -trustcacerts -keystore /pathtosomeselfsignedstore/truststore.jks -storepass password123 -noprompt -alias rapidssl-myserver -file /tmp/cert1.test
可以再次检查证书导入是否成功
keytool -list -v -keystore /pathtosomeselfsignedstore/truststore.jks
并查看是否在别名rapidssl-myserver中找到您的taget服务器
您需要配置JSSE系统属性,特别是指向客户端证书存储。
通过命令行:
java -Djavax.net.ssl.trustStore=truststores/client.ts com.progress.Client
或者通过Java代码:
import java.util.Properties;
...
Properties systemProps = System.getProperties();
systemProps.put("javax.net.ssl.keyStorePassword","passwordForKeystore");
systemProps.put("javax.net.ssl.keyStore","pathToKeystore.ks");
systemProps.put("javax.net.ssl.trustStore", "pathToTruststore.ts");
systemProps.put("javax.net.ssl.trustStorePassword","passwordForTrustStore");
System.setProperties(systemProps);
...
更多详情请参阅RedHat网站。