如何解决无法在生产中找到所请求目标的有效认证路径?

时间:2016-04-15 10:20:54

标签: java tomcat ssl

我有一个JKS,我需要进行身份验证才能开始使用SOAP Web服务。 在我的本地机器(Windows)上一切正常。要将以下内容添加到Eclipse中Tomcat的启动参数中:

-Dsun.security.ssl.allowUnsafeRenegotiation=true -Djavax.net.ssl.keyStore="path\to\keystore\keystore.jks"   -Djavax.net.ssl.keyStorePassword=passwordC -Djavax.net.ssl.keyStoreType=jks

在生产(ubuntu)中,我们有以下内容:

-Dsun.security.ssl.allowUnsafeRenegotiation=true -Djavax.net.ssl.keyStore=/path/to/keystore/keystore.jks -Djavax.net.ssl.keyStorePassword=password -Djavax.net.ssl.keyStoreType=jks"

我正在使用Java 1.7.0.80和Tomcat 7.0.61

当我想连接SOAP webservice时,我得到以下Stacktrace:

Caused by: javax.net.ssl.SSLHandshakeException: SSLHandshakeException invoking https://www.correosexpress.com/wsp/services/GrabacionEnvio: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1359)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1343)
    at org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:56)
    at org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:215)
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:652)
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
    ... 121 more
Caused by: 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

我检查了Java版本,tomcat版本。 我还检查了JKS的路径是否正确,它是否正确。

在我的本地计算机上,我没有手动安装任何其他证书。即我在cacerts中没有任何与jks内容相关的条目。

1 个答案:

答案 0 :(得分:0)

  1. 使用java keytool检查您的证书是否存在于证书列表中。
  2. 检查您的java home和jre是否相同。在ubuntu中,java_home可以使用一个版本的java,默认jre可以使用其他版本(请查看此命令 - update-alternatives --config java)
  3. 如果您将证书添加到正确版本的java并且它出现在证书列表中,请检查您是否使用了正确版本的证书。