具有Active Directory的Java GSSAPI凭据

具有Active Directory的Java GSSAPI凭据,java,kerberos,gssapi,Java,Kerberos,Gssapi,提前道歉-我对Kerberos/GSSAPI还很陌生,所以我可能有一些非常简单的东西 我试图运行的基本上是来自的示例客户机代码 我设置了两个虚拟机。一个是KDC-TETTING。它是一个安装了Active Directory的域控制器和一个名为“testuser”的用户。它正在KDC.COM域上运行 第二个是在KDC.COM域上运行名为IIS-WEB的IIS服务器 我也有我的电脑(Windows7)。它位于不同的域上,但它当前使用域控制器的IP作为其DNS。我试图在这里从eclipse运行基本的

提前道歉-我对Kerberos/GSSAPI还很陌生,所以我可能有一些非常简单的东西

我试图运行的基本上是来自的示例客户机代码

我设置了两个虚拟机。一个是KDC-TETTING。它是一个安装了Active Directory的域控制器和一个名为“testuser”的用户。它正在KDC.COM域上运行

第二个是在KDC.COM域上运行名为IIS-WEB的IIS服务器

我也有我的电脑(Windows7)。它位于不同的域上,但它当前使用域控制器的IP作为其DNS。我试图在这里从eclipse运行基本的GSSAPI客户机

当您转到iis-web.kdc.com(从域控制器vm或我的计算机)时,系统会提示您输入用户名/密码组合。您可以使用testuser登录(显然,使用其密码)

当我运行客户端程序时,出现以下错误:

org.ietf.jgss.GSSException, major code: 13, minor code: 0
    major string: Invalid credentials
    minor string: SubjectCredFinder: no JAAS Subject
它是从这一行抛出的:

GSSContext context = manager.createContext(clientName, krb5Mechanism, null, GSSContext.DEFAULT_LIFETIME);
由于它说凭据无效,我添加了以下内容(并尝试使用
creds
而不是
null
创建上下文):

这实际上没有改变任何东西(除了堆栈跟踪)

通过查看大量的文档/博客,我认为问题在某种程度上与配置有关,但我不确定到底需要进行哪些配置

我已经设置了一个krb5.conf文件,并使用命令行参数运行它

我没有在我的计算机上做任何Kerberos设置,但是我有一个SPN来测试用户,可能在VM上设置了一个键表(但我几乎可以肯定这不是原因)

编辑/更新:

我从一个新的虚拟机上运行了它,该虚拟机位于KDC.COM域上,并使用KDC-TESTING.KDC.COM作为其DNS,它似乎按照预期工作(还有另一个错误,这次是身份验证-进度!我想我知道这一个有什么问题)

我以JAR的形式运行它(而不是从eclipse内部运行),正如预期的那样,命令窗口提示我输入用户名和密码。这可能是一个问题吗(比如,eclipse不能接受输入,所以它只是崩溃了还是什么的)


我在eclipse中也没有看到任何安全调试日志(我一直在使用
-Djava.security.debug=all
),但在虚拟机上它都在那里(有很多)。

为了用凭据填充主题,客户机和服务器应用程序通常使用Kerberos模块执行JAAS身份验证。位于的JAAS身份验证教程演示了如何执行此操作。检查jaas.conf以了解详细信息。本教程是(如果我阅读正确的话)Kerberos,没有明确使用jaas。应该提示用户输入用户名和密码(基于jaas.conf中的设置)。
GSSCredential creds = manager.createCredential(clientName, GSSContext.DEFAULT_LIFETIME, krb5Mechanism, GSSCredential.INITIATE_ONLY);