如何让 Tomcat 中的 JNDIRealm 使用 Kerberos 身份验证?
Posted
技术标签:
【中文标题】如何让 Tomcat 中的 JNDIRealm 使用 Kerberos 身份验证?【英文标题】:How do I get JNDIRealm in Tomcat to use Kerberos auth? 【发布时间】:2010-11-28 03:57:49 【问题描述】:我正在尝试使用 Kerberos 进行身份验证 (authentication="GSSAPI") 运行 tomcat JNDIRealm。
但是,我得到了这个:
严重:Catalina.start: LifecycleException:打开目录服务器连接异常: javax.naming.AuthenticationException:GSSAPI [根异常是 javax.security.sasl.SaslException: GSS 启动失败 [由 GSSException 引起:未提供有效凭据 (机制级别:尝试获取新的 INITIATE 凭据失败!(null)) ]]我在 server.xml 中有这个:
知道我在这里缺少什么吗?
【问题讨论】:
【参考方案1】:该错误表明 Kerberos 未正确设置。
您需要使用 -D 或 System.setProperty()
设置以下 JVM 参数,
java.security.krb5.realm : Default realm, like EXAMPLE.COM
java.security.krb5.kdc : KDC hostname, like ad.example.com
【讨论】:
是的。过去了,但我正在使用 Kerberos/JAAS :并得到这个:javax.security.auth.login.LoginException: javax.naming.NamingException: [LDAP: error code 1 - 00000000 :Lda,注释:为了执行此操作,必须在连接上完成成功的绑定。数据名称'ou=LIMUsers,dc=lim,dc=com'【参考方案2】:
乔尔:
除了定义领域/KDC 的初始问题外,错误消息中还描述了您收到的 NamingException --- 您的 LDAP 服务器“blah.xxx.com”不允许匿名绑定,并且tomcat 正在尝试在没有绑定的情况下运行搜索。
如果您希望使用用户的凭据搜索 LDAP,那么问题在于它没有将凭据转发到 LDAP。我还不熟悉这些东西在 Java 中是如何工作的,但有几个可能的原因:
-
Tomcat 未请求可转发/委托的票证。
客户端未提供此类票证。看:
http://publib.boulder.ibm.com/infocenter/ltscnnct/v2r0/index.jsp?topic=/com.ibm.connections.25.help/t_install_kerb_edit_browsers.html 用于相关浏览器配置。
Tomcat 未尝试使用正确请求/提供的票证将 SASL 绑定到 LDAP 服务器。
如果您尝试使用 connectionName DN 作为 bindDN 进行搜索,请检查 LDAP 服务器上的故障——即“无效凭据”(用户/密码不正确)或 ACL 问题。
【讨论】:
【参考方案3】:你需要通过系统属性来传递:
krb5.conf/ini 的路径 login.conf 的路径具有默认 Sun 名称和 Krb5Module 配置如何获取凭据。【讨论】:
以上是关于如何让 Tomcat 中的 JNDIRealm 使用 Kerberos 身份验证?的主要内容,如果未能解决你的问题,请参考以下文章
如何让 servlet 过滤器在 Tomcat 中的应用程序启动时停止加载?