如何让Tomcat中的JNDIRealm使用Kerberos身份验证?

时间:2009-09-14 14:44:55

标签: tomcat ldap kerberos

我正在尝试使用Kerberos进行身份验证运行tomcat JNDIRealm(authentication =“GSSAPI”)。

然而,我得到了这个:

SEVERE: Catalina.start:
LifecycleException:  Exception opening directory server connection:  
javax.naming.AuthenticationException: GSSAPI 
[Root exception is javax.security.sasl.SaslException: GSS initiate failed 
 [Caused by GSSException: No valid credentials provided 
 (Mechanism level: Attempt to obtain new INITIATE credentials failed! (null))
]]

我在server.xml中有这个:

 <Realm className="org.apache.catalina.realm.JNDIRealm"
                        authentication="GSSAPI"
                        connectionName="CN=XXX User,OU=XXXGenericAccounts,\
                                                   DC=xxx,DC=com"
                        connectionPassword="blah"
                        connectionURL="ldap://blah.xxx.com:389"
                        alternateURL="ldap://blah.xxx.com:389"
                        roleBase="OU=XXXGroups,DC=xxx,DC=com"
                        roleName="cn"
                        roleSearch="member={0}"
                        roleSubtree="true"
                        userBase="OU=XXXUsers,DC=xxx,DC=com"
                        userSearch="sAMAccountName={0}"
                        userSubtree="true"/>

知道我在这里缺少什么吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

jorel:

除了定义realm / KDC的初始问题之外,您收到的NamingException在错误消息中描述---您的LDAP服务器“blah.xxx.com”不允许匿名绑定,并且tomcat试图在没有绑定的情况下运行搜索。

如果您希望使用用户的凭据搜索LDAP,则问题在于它不会将凭据转发到LDAP。我还不熟悉这些东西在Java中是如何工作的,但是有几个可能的原因:

  1. Tomcat未请求可转发/委派的票证。
  2. 客户未提供此类机票。看到: http://publib.boulder.ibm.com/infocenter/ltscnnct/v2r0/index.jsp?topic=/com.ibm.connections.25.help/t_install_kerb_edit_browsers.html用于相关的浏览器配置。
  3. Tomcat没有尝试使用正确请求/给定的票证对LDAP服务器进行SASL绑定。
  4. 如果您尝试使用connectionName DN作为bindDN进行搜索,请检查LDAP服务器上的故障 - 即。 “凭据无效”(用户/通过不正确)或ACL问题。

答案 2 :(得分:1)

您需要通过系统属性传递:

  • krb5.conf / ini的路径
  • login.conf的路径,其中包含配置了Krb5Module的默认Sun名称,以及如何获取凭据。