当前位置: 首页 > 面试题库 >

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

殷浩慨
2023-03-14
问题内容

我有一个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


 类似资料:
  • 我正在使用restTemplate发出post请求,并收到以下错误:无法找到到请求目标的有效证书路径 我的方法如下:

  • 我最近为我的maven repo(Apache代理背后的人工制品)切换到了letsencrypt证书。通过浏览器访问回购协议工作正常,证书没有问题(下面的屏幕截图)。 如果我手动将证书导入到java密钥库中,它也可以工作。 但是根据这个SO问题,Java应该接受以8u101开头的lets加密证书。 我总是遇到这样的例外:

  • 问题内容: 我有一个可以从https服务器下载文件的类。当我运行它时,它返回很多错误。我的证书似乎有问题。是否可以忽略客户端服务器认证?如果是这样,怎么办? 错误: 问题答案: 当你的服务器具有自签名证书时,会出现此问题。要解决此问题,你可以将此证书添加到JVM的受信任证书列表中。 在本文中,作者描述了如何从浏览器中获取证书并将其添加到JVM的cacerts文件中。你可以使用-参数编辑文件或运行应

  • 我在Flutter中创建了一个新应用程序。我尝试在Android Mobile上运行该应用程序。它显示在错误下方。 但当我试图在Chrome或Edge(网络设备)上运行同样的程序时。它在跑。

  • 我在Apache Tomcat7上有一个web应用程序,我的web应用程序上有不可信的证书。我的web应用程序必须与另一个使用HTTPS的web应用程序通信。然而,我总是遇到这样一个例外: 连接失败:javax.net.ssl.sslhandShakeException:sun.security.validator.validatoreXception:PKIX路径构建失败:sun.securit

  • 问题内容: 我有一个Web应用程序,要求客户端发送其证书,并且服务器必须验证证书(即查看颁发者是否为有效的颁发者,并存在于服务器的信任库中)。这是代码: 但是我有一个例外: 注意: 此处,客户端发送的证书为client.crt,用于签署client.crt证书的证书为密钥库“ trustedca”中的ca.crt。那为什么给这个例外呢? 问题答案: 如果您希望获得客户证书,请让JSSE为您完成所有