我正在尝试使用 python-kerberos (1.0.90-3.el6) 为 GSSAPI 服务器端身份验证初始化上下文。我的问题是 myserver.localdomain 被转换为 myserver - 我给定的主体的一部分在某处被砍掉。为什么会这样?
失败示例:
>>> import kerberos
>>> kerberos.authGSSServerInit("HTTP@myserver.localdomain")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
kerberos.GSSError: (('Unspecified GSS failure. Minor code may provide more information', 851968), ('Unknown error', 0))
>>>
在 KRB5_TRACE 的帮助下,我得到了原因:
[1257] 1346344556.406343: Retrieving HTTP/myserver@LOCALDOMAIN from WRFILE:/etc/krb5.keytab (vno 0, enctype 0) with result: -1765328203/No key table entry found for HTTP/myserver@LOCALDOMAIN
我无法为普通的 HTTP/myserver@LOCALDOMAIN 生成密钥表,因为它还会强制用户使用这样的地址访问服务器。我需要让函数使用正确的 FQDN 名称。据我所见,authGSSServerInit 应该与 FQDN 一起工作而不会破坏它。
我认为 python-kerberos 方法调用了以下 krb5-libs (1.9-33.el6) 提供的函数,问题也可能出在这些函数中:
maj_stat = gss_import_name(&min_stat, &name_token, GSS_C_NT_HOSTBASED_SERVICE, &state->server_name);
maj_stat = gss_acquire_cred(&min_stat, state->server_name,GSS_C_INDEFINITE,GSS_C_NO_OID_SET, GSS_C_ACCEPT, &state->server_creds, NULL, NULL);
kerberos 已在此主机上正确配置,并确认可以正常工作。例如,我可以以用户身份 kinit,并对票证进行身份验证。只是 authGSSServerInit 无法正常运行。