【问题标题】:Resolving: SunCertPathBuilderException: unable to find valid certification path to requested target正在解决:SunCertPathBuilderException:无法找到请求目标的有效证书路径
【发布时间】:2014-08-14 10:19:13
【问题描述】:

我的异常的完整跟踪是:

javax.net.ssl.SSLHandshakeException: 
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

首先我想说,我知道这是非常常见的异常,我尝试应用不同的解决方案,我稍后会描述它们,但没有任何帮助。

所以,我在同一台机器上有两个 tomcat 7 实例。直接来说,这些实例都有自己的CATALINA_BASE目录,但是共同的CATALINA_HOME。它们也是隔离的 - 配置端口以便实例不会干扰。一个实例 - 服务器 - 带有已部署的 Web 应用程序 servlet。还有另一个客户端实例 - servlet。

这是服务器tomcat的server.xml片段:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
        maxThreads="150" scheme="https" secure="true"
        clientAuth="true" sslProtocol="TLS" 
        truststoreFile="C:/Users/dpivovar/ssl_server.jks" 
        truststorePass="start123"
        keystoreFile="C:/Users/dpivovar/ssl_server.jks" 
        keystorePass="start123"/>

还有这个客户端tomcat的片段:

<Connector port="8444" protocol="HTTP/1.1" SSLEnabled="true"
        maxThreads="150" scheme="https" secure="true"
        clientAuth="false" sslProtocol="TLS" 
        truststoreFile="C:/Program Files/Java/jdk1.7.0_45/jre/lib/security/cacerts" 
        truststorePass="changeit"
        keystoreFile="C:/Users/dpivovar/ssl_client.jks" 
        keystorePass="start123" />

工作流程:客户端尝试对服务器执行 GET,但出现上述异常。

证书呢。我使用了java keytool。我做了one keystore for server and separate for client。每个密钥库包含对应侧的private keypublic certificate。在上面的示例中,客户端信任库引用了 jre cacerts 密钥库,因为我发现的解决方案之一是将服务器的公共证书放入 jre cacerts。但这对我不起作用。 我发现的另一个解决方案 (http://www.nodsw.com/blog/leeland/2006/12/06-no-more-unable-find-valid-certification-path-requested-target) 通过 InstallCert 工具提供了获取服务器的公共证书,然后在客户端信任库中使用它。所以现在,在 jre caserts 中有一个服务器的公共证书,但引发了异常。 另外,我有一个简单的客户端示例-它是普通的 java 程序,通过系统属性,我设置了用于客户端的密钥库所需的路径,并且以同样的方式,我使 GET 到服务器并且它工作,握手发生,连接建立.

那么你能帮我吗,可能是什么问题,是什么阻止了部署在 tomcat 上的客户端与服务器建立 ssl 连接?

【问题讨论】:

  • 任何help
  • 使用openssl s_client 测试设置。请将s_client 的输出作为问题的一部分发布。

标签: java tomcat ssl https


【解决方案1】:
    truststoreFile="C:/Users/dpivovar/ssl_server.jks" 
    truststorePass="start123"

这些属性不存在。您必须通过系统属性设置它们。

【讨论】:

    【解决方案2】:

    我通过在 tomcat 配置系统中为 keystore/truststore 和 keystorePassword/truststorePassword 设置 Java 属性解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2017-12-27
      • 2015-04-04
      • 1970-01-01
      • 2020-03-25
      • 2020-11-25
      • 2020-11-24
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      相关资源
      最近更新 更多