如何让 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 身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

设置 Tomcat 以使用来自特定组的 LDAP 用户

如何让 servlet 过滤器在 Tomcat 中的应用程序启动时停止加载?

使Tomcat忽略WEB-INF/LIB中的Servlet

如何设置使eclipse修改代码不重启tomcat

下载了tomcat 和jdk后如何安装才能使tomcat成功运行

如何使剔除可观察数组中的对象属性可观察?