2013-07-01 48 views
0

我们那里一个特定的服务器上的应用程序中使用Tomcat 5JDK 1.4)可以使用HTTPS Web服务和相同的应用程序成功连接这种情况下连接到Web服务在另一台服务器上使用Tomcat 7JDK 1.7)无法连接到此Web服务。话虽如此,Tomcat 7应用程序能够使用port 8080HTTP连接到Web服务。这个问题似乎与HTTPS连接时。错误是:JAVA - Tomcat的5应用程序使用HTTPS,而Tomcat的7应用程序不

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 
    at sun.security.ssl.Alerts.getSSLException(Unknown Source) 
    at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source) 
    at sun.security.ssl.Handshaker.fatalSE(Unknown Source) 
    at sun.security.ssl.Handshaker.fatalSE(Unknown Source) 
    at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source) 
    at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source) 
    at sun.security.ssl.Handshaker.processLoop(Unknown Source) 
    at sun.security.ssl.Handshaker.process_record(Unknown Source) 
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) 
    at sun.security.ssl.SSLSocketImpl.writeRecord(Unknown Source) 
    at sun.security.ssl.AppOutputStream.write(Unknown Source) 
    at java.io.BufferedOutputStream.flushBuffer(Unknown Source) 
    at java.io.BufferedOutputStream.write(Unknown Source) 
    at java.io.FilterOutputStream.write(Unknown Source) 
    at org.apache.commons.httpclient.methods.ByteArrayRequestEntity.writeRequest(ByteArrayRequestEntity.java:89) 
    at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:495) 
    at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:1973) 
    at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:993) 
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:397) 
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170) 
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396) 
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324) 
    at Pdf.HtmlToPdf.GeneratePdf(HtmlToPdf.java:42) 
    at Crm.CAA.CaaTest.generatePdf(CaaTest.java:584) 
    at Crm.CAA.CaaTest.GeneratePdf(CaaTest.java:194) 
    at Crm.Servlets.CaaPdfOutputter.doPost(CaaPdfOutputter.java:53) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at Filters.ExampleFilter.doFilter(ExampleFilter.java:133) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.validator.PKIXValidator.doBuild(Unknown Source) 
    at sun.security.validator.PKIXValidator.engineValidate(Unknown Source) 
    at sun.security.validator.Validator.validate(Unknown Source) 
    at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source) 
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source) 
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source) 
    ... 44 more 
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source) 
    at java.security.cert.CertPathBuilder.build(Unknown Source) 
    ... 50 more 

我正在做一些研究,发现cacerts文件可能是这背后,但是,可能仍然是因为Tomcat的5应用程序的情况下工作,只有Tomcat 7一个不是?

+0

看吧http://stackoverflow.com/questions/9619030/resolving-javax-net-ssl-sslhandshakeexception-sun-security-validator-validatore – Michael

+0

@迈克尔 - 这种情况是不同的。这个问题稍有不同,因为一个特定的应用程序正在连接,而另一个则不是。 –

回答

1

看起来这个问题的根本原因在于,当您运行较新的版本(tc7,jdk1.7)时,您的应用程序无法找到证书存储区。

您是否指定证书存储在您的java代码中?或者其他地方呢?

如果是这样,您可能正在以更新版本的Java1.4方式进行操作。

java的默认证书存储区是{$ JAVA_HOME}/lib/security/cacerts 如果您的证书没有存储在这里,那么这可能是您的问题。 这个商店是每个Java版本所以这可以解释为什么旧版本正在工作,而新版本不是。

(这是覆盖在由迈克尔链接到文章)

如果不能解决这个问题,那么这将是有用的,如果你能发布关于你如何连接一些更多的信息(即在Java抛出异常的代码...)。另外你的平台会很有用。

希望这有助于

相关问题