2

ms ドメイン内のアプリケーションをテストしようとしています。アプリ サーバーが正常にデプロイされました。kerberos とユーザー名/パスワードの両方で、認証はうまく機能します。

しかし、「ktpass」クライアントキータブによって生成された「KerberosRestTemplate」を使用して「test」(コントローラーである理由があります) を追加すると、「SunJaasKerberosTicketValidator」が例外をスローしました:

' java.security.PrivilegedActionException: GSSException: GSS-API レベルで特定されていない障害 (メカニズム レベル: 指定されたバージョンのキーは使用できません (44)) '.

理由は、ktpass によって生成された keytab ファイルが壊れていることだと思います。それが私がそれを生成する方法です:

"C:> ktpass /princ deniz@TESTAD.LOCAL /pass Qw1er2ty3 /ptype KRB5_NT_PRINCIPAL /out deniz.keytab

*NOTE: creating a keytab but not mapping principal to any user.
For the account to work within a Windows domain, the
principal must be mapped to an account, either at the
domain level (with /mapuser) or locally (using ksetup)
If you intend to map deniz@TESTAD.LOCAL to an account through other means
or don't need to map the user, this message can safely be ignored.
WARNING: pType and account type do not match. This might cause problems.
Key created.
Output keytab to deniz.keytab:
Keytab version: 0x502
keysize 52 deniz@TESTAD.LOCAL ptype 1 (KRB5_NT_PRINCIPAL) vno 1 etype 0x17 (RC4-HMAC) keylength 16 (0xa0eb0b1e09b8c36edc
2da4762c53283f)*"

念のため、サンプルを github に保存しました: https://github.com/mezlogo/kerberos_sample

キータブが壊れていると思いますが、クライアントで使用するためにキータブを生成する方法が見つかりません (HTTP/username@DOMAIN なし)。

Ps私の英語でごめんなさい。

4

1 に答える 1

2

ktpass を実行するたびに、AD は AD に格納されているバージョン番号を 1 ずつ増やします。したがって、ktpass を実行する前に、実際の値を確認し、/kvno オプションを使用してこの値を 1 ずつ増やして指定する必要があります ( https://technet.microsoft.com /en-us/library/cc753771.aspx ) を使用して、AD 内に保存されているキーのバージョン番号とキータブ ファイル内のバージョン番号が同じになるようにします。

于 2016-02-04T12:42:19.737 に答える