我们正在编写可在 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 生成密钥表(从 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 的内容,如下所示:
slot KVNO Principal
1 4 host/host1.corp.company.com@CORP.COMPANY.COM
2 5 gssapitest/host1.corp.company.com@CORP.COMPANY.COM
在 Windows 上,为 Linux 服务器程序注册服务(使用“setspn”),以便结果看起来像(2 个条目,一个带有映射主机名,另一个带有实际主机名,用于测试目的。如果只有一个条目,则没有不管哪一个,结果都是一样的):
Registered ServicePrincipalNames for
CN=xxxx,CN=Users,DC=corp,DC=company,DC=com:
gssapitest/host1: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 error accepting context: Unspecified GSS failure. Minor code may
provide more information
GSS-API error accepting context: Wrong principal in request
这可能是什么原因?我想知道我概述的步骤是否都是必要的。哪个根本不需要或不正确。
(注意:我尝试在 CORP.COMPANY.COM 中使用本地用户帐户和域帐户登录 Linux,结果显示相同的错误。nslookup 也显示了正确的 IP 到 linux 机器的主机映射) .