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 だけです。