一尘不染

Java无法找到到请求目标的有效证书路径-即使导入证书后也出错

java

我有一个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文件,而是可能读取了其他文件。

你们中有人遇到过这个问题,可以将我推向正确的方向吗?


阅读 1529

收藏
2020-03-03

共1个答案

一尘不染

不幸的是-可能有很多事情-许多应用程序服务器和其他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
2020-03-03