为spring-security-kerberos-client生成MS AD密钥表

时间:2016-02-03 15:57:10

标签: spring testing active-directory single-sign-on spring-security-kerberos

我尝试测试我的in-ms-domain应用程序。 App服务器已成功部署。 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

我认为keytab我的keytab坏了,但找不到如何为客户端使用生成它(没有HTTP /用户名@ DOMAIN)。

P.S。对不起我的英文。

1 个答案:

答案 0 :(得分:2)

无论何时运行ktpass,AD都会将存储在AD中的版本号递增1.因此,在运行ktpass之前,您需要查看实际值,并使用/ kvno选项(https://technet.microsoft.com/en-us/library/cc753771.aspx)指定此值递增1这样存储在AD中的密钥版本号和密钥表文件中的密钥版本号是相同的。