2014-09-10 151 views
0

我们正在编写可在Windows和Linux上运行的软件,并计划使用Windows Active Directory进行身份验证。我下面描述的问题挣扎,希望得到任何帮助非常多:GSSAPI - Windows Active Directory互操作性 - 错误接受上下文:请求中的主体错误

域名:CORP.COMPANY.COM

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

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

服务器将被命名为“gssapitest”。

基于“一步分步指南的Kerberos 5(KRB5 1.0)互操作性(微软) ,

首先创建一个用户‘中的AD主机1’表示主机 host1.corp。 。company.com(Linux机器)

使用的ktpass生成密钥表(从Windows上运行): 的ktpass/PRINC host/[email protected]/mapuser主机1 /传 hostpassword/out file1.keytab

现在在AD中,创建另一个d “gssapitest” omain用户以表示测试服务器程序,和地图用户类似地: 的ktpass/PRINC gssapitest/[email protected]/mapuser gssapitest /通行证gssapitestpassword /出file2.keytab

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

在Linux中, “ktutil” 表示/etc/krb5.keytab的像以下内容:

槽KVNO主 1 4 host/[email protected] 2 5 gssapitest /[email protected]

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

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

现在我启动服务器是这样的:

GSS-服务器-port 2001 gssapitest

,并开始从另一个终端客户这样说:

GSS-客户-port 2001 - 用户XXXX -pass xxxxpassword host1.corp .company.com gssapitest “ABCD”

错误显示了服务器侧:

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

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

(注:我试图登录到Linux既具有本地用户帐户和 在CORP.COMPANY.COM域帐户,结果显示了同样的错误 还使用nslookup显示正确的IP来承载。映射为Linux机器)。

回答

0

我做了一些测试运行,在我的情况下,问题似乎是这样的:我对我的映射用户进行了更改,即gssapitest(在“Active Directory用户和计算机”中,未选中“使用DES加密类型运行“ktpass”后,将输出文件合并到Linux机器上的krb5.keytab中,然后单击“帐户”下的该帐户)。 要解决这个问题,我再次从Active Directory中检查了“为此帐户使用DES加密类型”,然后转到Linux机器上,在启动我的服务器和客户端程序之前运行“kdestroy”。然后它工作。 如果任何人有类似的问题,你可能想看看这个可能的原因。谢谢。

+0

当您检查USE DES选项时,将使用最近MIT Kerberos和Windows默认禁用的非常弱加密。 – 2014-09-15 20:51:59

1

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

gss-client -user xxx -pass xxx -port 2001 hostname [email protected] "test message" 

您可以使用KRB5跟踪,以获取有关发生了什么更好的日志记录:

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

类似服务器。