linux - GSSAPI - Windows Active Directory 互操作性 - 错误接受上下文 : Wrong principal in request

标签 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 生成 key 表(从 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 中的域帐户,结果显示相同的错误。 nslookup 还显示正确的 IP 到 linux 机器的主机映射)。

最佳答案

我不会在使用 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

服务器端类似。

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

相关文章:

arrays - 在 Powershell 中比较数组

php - 用于生产的 LAMP 堆栈?使用 PHP 5.4.x、Apache 2.4.x、MySQL 5.5.x

windows - 使用 vbscript 检查计划任务是否正在运行

php - 是否有适用于 Windows 的简单 php shell?

python - 为什么在 (python) pyglet.image 中引用一个类会导致 Windows 上的 CPU 负载过重?

c# - 使用 ValidateCredentials 重复失败的登录尝试是否会导致用户被锁定?

linux - 无法在 RHEL 7.1 中使用 yum 安装

linux - Git,有权限问题推送

php - apache/php 创建文件,但同一页面不允许编辑文件

c# - 从当前登录用户的 Active Directory 中获取专有名称