Eclipse调试Java Servlet(使用Tomcat)通过SSL连接到服务器

Eclipse调试Java Servlet(使用Tomcat)通过SSL连接到服务器,java,eclipse,tomcat,ssl,Java,Eclipse,Tomcat,Ssl,我正在处理一个需要通过SSL连接到LDAP服务器的服务器。连接需要javax.net.ssl.trustStore。我已将所有内容配置到正确的位置。一旦我将servlet部署到Tomcat容器上,一切都会很完美。没有任何问题 但是,当我将这些代码放入eclipse并使用eclipse Tomcat服务器(这意味着我在eclipse上部署了相同的代码、相同的配置和相同的环境)时,每次运行代码时,连接处总是出现异常,如下所示: javax.naming.CommunicationException:

我正在处理一个需要通过SSL连接到LDAP服务器的服务器。连接需要javax.net.ssl.trustStore。我已将所有内容配置到正确的位置。一旦我将servlet部署到Tomcat容器上,一切都会很完美。没有任何问题

但是,当我将这些代码放入eclipse并使用eclipse Tomcat服务器(这意味着我在eclipse上部署了相同的代码、相同的配置和相同的环境)时,每次运行代码时,连接处总是出现异常,如下所示:

javax.naming.CommunicationException: simple bind failed: IP-Address:Port-Number [Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors]
at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:218)
at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2740)
at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:316)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:193)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:211)
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:154)
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:84)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
at javax.naming.InitialContext.init(InitialContext.java:242)
at javax.naming.InitialContext.<init>(InitialContext.java:216)
at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:101)
at ldap.LdapTool.init(LdapTool.java:53)
at ldap.LdapTool.<init>(LdapTool.java:36)
at beans.LdapUserGroups.<init>(LdapUserGroups.java:9)
at org.apache.jsp.Organisations_jsp._jspService(Organisations_jsp.java:80)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
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:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
javax.naming.CommunicationException:简单绑定失败:IP地址:端口号[根异常为javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径验证失败:java.security.cert.CertPathValidatorException:路径未与任何信任锚链接]
位于com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:218)
位于com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2740)
位于com.sun.jndi.ldap.LdapCtx(LdapCtx.java:316)
位于com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:193)
位于com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:211)
位于com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:154)
位于com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:84)
位于javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
位于javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
位于javax.naming.InitialContext.init(InitialContext.java:242)
位于javax.naming.InitialContext。(InitialContext.java:216)
位于javax.naming.directory.InitialDirContext。(InitialDirContext.java:101)
位于ldap.LdapTool.init(LdapTool.java:53)
LdapTool.(LdapTool.java:36)
位于beans.LdapUserGroups。(LdapUserGroups.java:9)
位于org.apache.jsp.organizations\u jsp.\u jsp服务(organizations\u jsp.java:80)
位于org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
位于org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
位于org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
位于org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
位于org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
位于org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
位于org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
位于org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
位于org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
位于org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
运行(Thread.java:744)

有人对此有任何线索吗?

因为我看到您无法从本地主机服务器连接到LDAP。LDAP服务器是否需要身份验证?对您的服务器(Tomcat)上是否有某种凭据?我想你没有。看看这个。Thx Thrash,是的LDAP服务器需要身份验证才能访问它,是的,我的tomcat服务器上有一个凭据。如果我构建一个war文件并将其部署到我的tomcat服务器中,那么它工作得非常好。只有直接从eclipse运行代码时,问题才会出现。我还将所有配置文件从tomcat服务器复制到eclipse服务器,但它仍然不工作。您是否必须向密钥库添加证书?如果是,您确定从Eclipse运行时使用的JRE与独立Tomcat使用的JRE相同吗?密钥库是根据JRE设置的。也许当Tomcat从Eclipse运行时,它正在使用为Eclipse配置的JRE。要检查Eclipse中的JRE是开放项目的属性,请选择Java构建路径并单击Libraries选项卡,然后查看JRE库系统。为了检查JRE在我的机器中的使用情况,我运行以下命令:readlink-f$(哪个java)。两者都是相同的/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.45/jreIn Eclipse用于内置的JRE不一定与用于服务器的JRE相同。在Windows、Preferences下,然后在Server、Runtime Environments部分中,选择Tomcat,然后编辑,然后查看JRE字段。