我有一个Java客户端尝试使用自签名证书访问服务器。
当我尝试发布到服务器时,出现以下错误:
无法找到到请求目标的有效认证路径
在对该问题进行了一些研究之后,我进行了以下工作。 1. 2. 将我的服务器域名保存为root.cer文件。 3. 在我的Glassfish服务器的JRE中,运行了此命令: 4. keytool -import -alias example -keystore cacerts -file root.cer 5. 要检查证书是否成功添加到我的cacert中,我这样做: 6. keytool -list -v -keystore cacerts 7. 我可以看到该证书存在。 8. 然后,我重新启动了Glassfish,并退出了“职位”。
我仍然收到相同的错误。
我感觉这是因为我的Glassfish实际上并未读取我修改过的cacert文件,而是可能读取了其他文件。
你们中有人遇到过这个问题,可以将我推向正确的方向吗?
不幸的是-可能有很多事情-许多应用程序服务器和其他Java“包装器”都倾向于使用属性,它们的“自己”承担钥匙串,而没有。因此,它可能正在寻找完全不同的东西。
缺少桁架-我会尝试:
java -Djavax.net.debug=all -Djavax.net.ssl.trustStore=trustStore ...
看看是否有帮助。除了“全部”之外,还可以将其设置为“ ssl”,密钥管理器和信任管理器-这可能对你有帮助。将其设置为“帮助”将在大多数平台上列出如下内容。
无论如何-请确保你完全了解密钥库(在其中你拥有自己的私钥和证书,以证明自己的身份)和信任库(确定你信任的人)之间的区别-并且你自己的身份也对根有信任的“链”-这与到根的任何链是分开的,你需要弄清楚你对“谁”的信任。
all turn on all debugging ssl turn on ssl debugging The following can be used with ssl: record enable per-record tracing handshake print each handshake message keygen print key generation data session print session activity defaultctx print default SSL initialization sslctx print SSLContext tracing sessioncache print session cache tracing keymanager print key manager tracing trustmanager print trust manager tracing pluggability print pluggability tracing handshake debugging can be widened with: data hex dump of each handshake message verbose verbose handshake message printing record debugging can be widened with: plaintext hex dump of record plaintext packet print raw SSL/TLS packets