我有一个 Java 客户端尝试使用自签名证书访问服务器。
当我尝试发布到服务器时,我收到以下错误:
无法找到到所请求目标的有效认证路径
在对这个问题进行了一些研究之后,我做了以下工作。
root.cer
在我的 Glassfish 服务器的 JRE 中,我运行了这个: keytool -import -alias example -keystore cacerts -file root.cer
keytool -import -alias example -keystore cacerts -file root.cer
为了检查证书是否已成功添加到我的 cacert,我这样做了: keytool -list -v -keystore cacerts 我可以看到证书存在。
keytool -list -v -keystore cacerts
然后我重新启动了 Glassfish 并退出了“帖子”。
我仍然遇到同样的错误。
我有一种感觉,这是因为我的 Glassfish 实际上并没有读取我修改过的 cacert 文件,但可能是其他文件。
你们有没有人遇到过这个问题,可以把我推向正确的方向?
不幸的是 - 它可能是很多东西 - 许多应用程序服务器和其他 java ‘包装器’ 很容易使用属性和他们对钥匙串的’自己’ 承担等等。所以它可能正在寻找完全不同的东西。
缺少 truss-ing - 我会尝试:
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
来源:#见http://download.oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#Debug