我们正在编写在windows和linux上运行的软件,并计划使用windows活动目录进行身份验证。我正在努力解决以下问题,非常感谢您的帮助:
域名:corp.company.com
在一台Linux计算机上运行的测试编程:host1.corp.company.com
测试程序来自krb5-1.11.3下载文件中的gss示例。
服务器将命名为“gssapitest”。
基于“kerberos 5(krb5 1.0)互操作性分步指南”(来自Microsoft)
我是说,
首先在广告中创建一个用户“host1”来表示主机
host1.corp.company.com(Linux机器)。
使用ktpass生成keytab(从Windows运行):
ktpass/princ host/[email protected]/mapuser host1/pass
主机密码/输出文件1.keytab
现在在ad中,创建另一个域用户“gssapitest”来表示测试服务器程序,并以类似方式映射用户:
ktpass/princ gssapitest/[email protected]/mapuser
gssapitest/pass gssapitestpassword/out file2.keytab
将file1.keytab和file2.keytab复制到Linux计算机host1,并合并它们
到/etc/krb5.keytab。
在Linux中,“ktutil”显示/etc/krb5.keytab的内容,如下所示:
插槽kvno主体
1 4主机/[email protected]
2 5 gssapitest/[email protected]
在Windows上,为Linux服务器程序注册服务(使用“setspn”),以便
结果类似于(2个条目,一个具有映射的主机名,另一个具有实际的主机名,用于测试目的)。如果只有一个条目,不管是哪一个,结果都是一样的):
的注册服务主名称
cn=xxxx,cn=users,dc=corp,dc=company,dc=com:
GSSAPITEST/主机1:2001
gssapitest/host1.corp.company.com:2001年
现在我用这种方式启动服务器:
GSS服务器-端口2001 GSSAPITEST
从另一个终端启动客户端:
GSS客户端-端口2001-用户xxxx-pass xxxxpassword host1.corp.company.com
gssapitest“abcd”
错误显示在服务器端:
GSS-API接受上下文时出错:未指定的GSS失败。小代码可以
提供更多信息
GSS-API接受上下文时出错:请求中的主体错误
可能的原因是什么?我想知道我概述的步骤
都是必要的。哪一个根本不需要或是不正确的。
(注意:我尝试使用本地用户帐户和
corp.company.com中的域帐户,结果显示相同的错误。
nslookup还显示了Linux机器的正确IP到主机映射)。

最佳答案

在使用setspn时,我不会包括端口号;我希望gssapitest不是gssapitest:2001。
另外,在对gss客户端的调用中,使用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

服务器也一样。

关于linux - GSSAPI-Windows Active Directory互操作性-接受上下文错误:请求中的主体错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25769351/

10-12 16:37