GSSAPI - Windows Active Directory互操作性 - 接收上下文错误:请求中的主体错误

时间:2014-09-10 15:27:08

标签: linux windows active-directory kerberos gssapi

我们正在编写在Windows和Linux上运行的软件,并计划使用Windows Active Directory进行身份验证。我正在努力解决下面描述的问题,并非常感谢任何帮助:

域名:CORP.COMPANY.COM

在一台Linux机器上运行的测试编程:host1.corp.company.com

测试程序来自krb5-1.11.3下载文件的gss-sample。

服务器将命名为“gssapitest”。

基于“Kerberos 5循环指南(krb5 1.0)互操作性(来自Microsoft) ,

首先在AD中创建用户“host1”以表示主机 host1.corp.company.com(linux机器)。

使用ktpass生成keytab(从Windows运行): ktpass / princ host/host1.corp.company.com@CORP.COMPANY.COM / mapuser host1 / pass hostpassword / out file1.keytab

现在在AD中,创建另一个域用户“gssapitest”来表示测试服务器程序,并类似地映射用户: ktpass / princ gssapitest/host1.corp.company.com@CORP.COMPANY.COM / mapuser gssapitest / pass gssapitestpassword / out file2.keytab

将file1.keytab和file2.keytab复制到Linux机器host1,并合并它们 到/etc/krb5.keytab。

在Linux中,“ktutil”显示/etc/krb5.keytab的内容,如下所示:

插槽KVNO校长 1 4 host/host1.corp.company.com@CORP.COMPANY.COM 2 5 gssapitest/host1.corp.company.com@CORP.COMPANY.COM

在Windows上,为Linux服务器程序注册服务(使用“setspn”),以便 结果看起来像(2个条目,一个带有映射的主机名,另一个带有实际的主机名,用于测试目的。如果只有一个条目,无论哪个条目,结果都相同):

注册的ServicePrincipalNames为 CN = XXXX,CN =用户,DC =公司,DC =公司,DC = COM: gssapitest /主机1:2001 gssapitest / host1.corp.company.com:2001

现在我以这种方式启动服务器:

gss-server -port 2001 gssapitest

以这种方式从另一个终端启动客户端:

gss-client -port 2001 -user xxxx -pass xxxxpassword host1.corp.company.com gssapitest“abcd”

错误显示在服务器端:

接受上下文的GSS-API错误:未指定的GSS失败。次要代码可能 提供更多信息 接受上下文的GSS-API错误:请求中的主体错误

可能的原因是什么?我想知道我概述的步骤是否正确 都是必要的。哪一个根本不需要或不正确。

(注意:我尝试使用本地用户帐户登录Linux CORP.COMPANY.COM中的域帐户,结果显示相同的错误。 另外nslookup显示了正确的IP到主机映射的linux机器。)

2 个答案:

答案 0 :(得分:1)

使用setspn时我不会包含端口号;我希望gssapitest不是gssapitest:2001。 另外,在调用gss-client时使用gssapitest @ host作为服务名称;

gss-client -user xxx -pass xxx -port 2001 hostname gssapitest@hostname "test message"

您可以使用krb5跟踪来更好地记录正在发生的事情:

export KRB5_TRACE=/tmp/trace.client # and run client

类似于服务器。

答案 1 :(得分:0)

我做了一些测试运行,在我的情况下,问题似乎是这样:我对我的映射用户进行了更改,即gssapitest(在" Active Directory用户和计算机",我取消选中& #34;在运行" ktpass"之后,为此帐户使用DES加密类型"在"此用户的帐户"标签下)并将输出文件合并到Linux机器中的krb5.keytab。 为了解决这个问题,我检查了这个帐户"使用DES加密类型"再次从Active Directory内部,然后转到Linux机器,运行" kdestroy"在启动我的服务器和客户端程序之前然后它奏效了。 如果有人遇到类似的问题,你可能想看看这个可能的原因。感谢。