Tomcat中的LDAP错误-需要TLS机密性

Tomcat中的LDAP错误-需要TLS机密性,tomcat,ldap,ssl,Tomcat,Ldap,Ssl,我试图在Tomcat中配置一个域,以访问具有TLS安全性的LDAP服务器。我的基本领域配置如下所示: <Realm className="org.apache.catalina.realm.JNDIRealm" debug="99" connectionURL="ldap://localhost:389/" userPattern="uid={0},ou=People,dc=nsdl,dc=org" /> SEVERE: Catalina.

我试图在Tomcat中配置一个域,以访问具有TLS安全性的LDAP服务器。我的基本领域配置如下所示:

<Realm className="org.apache.catalina.realm.JNDIRealm" debug="99" connectionURL="ldap://localhost:389/" userPattern="uid={0},ou=People,dc=nsdl,dc=org" /> SEVERE: Catalina.start: LifecycleException: Exception opening directory server connection: javax.naming.AuthenticationNotSupportedException: [LDAP: error code 13 - TLS confidentiality required] at org.apache.catalina.realm.JNDIRealm.start(JNDIRealm.java:1697) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1006) at org.apache.catalina.core.StandardHost.start(StandardHost.java:736) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:448) at org.apache.catalina.core.StandardServer.start(StandardServer.java:700) at org.apache.catalina.startup.Catalina.start(Catalina.java:552) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433) 我得到一个类似这样的错误:

<Realm className="org.apache.catalina.realm.JNDIRealm" debug="99" connectionURL="ldap://localhost:389/" userPattern="uid={0},ou=People,dc=nsdl,dc=org" /> SEVERE: Catalina.start: LifecycleException: Exception opening directory server connection: javax.naming.AuthenticationNotSupportedException: [LDAP: error code 13 - TLS confidentiality required] at org.apache.catalina.realm.JNDIRealm.start(JNDIRealm.java:1697) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1006) at org.apache.catalina.core.StandardHost.start(StandardHost.java:736) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:448) at org.apache.catalina.core.StandardServer.start(StandardServer.java:700) at org.apache.catalina.startup.Catalina.start(Catalina.java:552) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433) 严重:Catalina.start: LifecycleException:打开目录服务器连接时出现异常: javax.naming.AuthenticationNotSupportedException:[LDAP:错误代码13-需要TLS机密性] 位于org.apache.catalina.realm.jndiream.start(jndiream.java:1697) 位于org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1006) 位于org.apache.catalina.core.StandardHost.start(StandardHost.java:736) 位于org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014) 位于org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 位于org.apache.catalina.core.StandardService.start(StandardService.java:448) 位于org.apache.catalina.core.StandardServer.start(StandardServer.java:700) 位于org.apache.catalina.startup.catalina.start(catalina.java:552) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源) 位于java.lang.reflect.Method.invoke(未知源) 位于org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295) 位于org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433) 我尝试了各种各样的修复,但没有改变问题或错误消息。这包括:

  • 将connectionURL中的协议更改为“ldaps”
  • 将connectionURL中的端口更改为636
  • 将protocol=“TLS”添加到域
  • 在webapp中将领域声明从conf/server.xml(主机或引擎下)移动到META-INF/context.xml
  • 将ldap.jar添加到服务器/lib
  • 从Tomcat 5.5更改为Tomcat 6.0
其中每一个都会产生相同的错误消息(尽管堆栈跟踪在某些配置中是不同的)


有什么想法吗?

答案实际上与此处发布的问题无关。问题与如何指定领域有关

域是在webapp内META-INF/Context.xml文件中包含的上下文元素中指定的

我没有意识到的是

  • Tomcat将此文件复制到conf/Catalina/localhost/{webapp}.xml
  • 如果将WAR文件的较新版本提供给Tomcat,它将不会用较新版本替换{webapp}.xml
因此,每次都会出现相同的错误消息的原因是因为我的域的初始副本不正确,并且没有考虑我尝试的修复

事实上,领域规范是正确的,如上所示。一旦我清除了这个顽固的文件,它就工作得很好