使用JDK1.6.45在Windows上进行MongoDB 3.0.0 / 2/3 Java驱动程序Kerberos身份验证

时间:2015-07-23 18:29:51

标签: java mongodb kerberos mongodb-java jdk1.6

我的Mongo服务器应该正确设置,因为我可以使用GSSAPI机制与客户端进行查询。

根据文档,Java Driver的Kerberos身份验证可以如此简单     credentialList.add(MongoCredential.createGSSAPICredential("people/myhost.com@EXAMPLE.COM"));

我使用的校长

  1. 我使用Mongo的企业版客户端进行测试,它可以工作:使用Kerberos对Mongo服务器进行身份验证,并且可以查找()。 (数据库测试,校长“people/myhost.com@EXAMPLE.COM”)
  2. kinit已执行并且新票证显示在klist中,票证缓存存储在KRB5CCNAME = D:\ Kerberos \ tickets.txt(环境变量集)
  3. 为确保读取krb5.ini / conf,我手动设置系统属性java.security.krb5.conf = C:/Windows/krb5.conf

    在我设置属性javax.security.auth.useSubjectCredsOnly之前,GSSAPIAuthenticator.createSaslClient()捕获了GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)的例外。

    我设置了属性javax.security.auth.useSubjectCredsOnly=false后,InternalStreamConnection.open()抓住了throwable:java.lang.SecurityException: Unable to locate a login configuration

    我真的很困惑。我以为它正在使用KRB5CCNAME下指定的票证缓存。如果我使用jaas配置,我应该指定什么名称?

    Name {
       com.sun.security.auth.module.Krb5LoginModule required
       useKeyTab=true
       keyTab="D:\\Kerberos\\people.keytab"
       useTicketCache=false;
    };
    

    我用随机名称设置它并开始抱怨GSSException: No valid credentials provided (Mechanism level: Attempt to obtain new INITIATE credentials failed! (null))

    你们可以帮帮我吗?我还可以在这里尝试一下,或者在这种情况下我可以启用哪些更有用和详细的日志?

1 个答案:

答案 0 :(得分:1)

根据设计,安全错误消息含糊不清: - /

但是有一个很好的“security trace flag”属性可以帮助您调试GSSAPI配置问题:

-Djava.security.debug=gssloginconfig,configfile,configparser,logincontext