不少人都没搞清楚ktpass跟ktab的用法,特此写一篇文章来叙说一下。
我假设你对kerberos有所认识,可以读我的一篇文章<weblogic security in action>,里面初步介绍了kerberos协议(基于windows kdc)。
在kerberos中,安全性完全是依赖于share secret,也就是,kdc跟kerberos service之间都共享着一条key,ktpass这个命令行工具承担着这样一个角色,它能够将非windows kerberos服务配置一个service principal,通常类似于,并且同时生成一个keytbab,这样做的目的是在windows域中的kdc和非windows的服务(kerberos service)建立一种安全的信任关系,keytab文件中就是存放着那条非常重要的跟kdc打交道的secret key。
你更改了keytab中的key,就必须同时更改kerberos database中的key。操作keytab,jdk提供了一个很好的工具叫做ktab。
首先,在windows域控制器上创建一个用户tomcat2005, 这是一个windows的用户,我们使用ktpass将一个kerberos service (到这个用户上面。ktpass会修改当前用户在windows ad中的用户登录名,你可以用setspn -l tomcat2005来查看究竟有多少service principal绑定到tomcat2005上。
c:\>ktpass -princ -mapuser tomcat2005 -pass tomcat2005 -out tomcat2005_keytab -crypto des-cbc-md5
successfully mapped http/tomcat to tomcat2005.
key created.
output keytab to tomcat2005_keytab:
keytab version: 0x502
keysize 50 ptype 1 (krb5_nt_principal) vno 1 etype 0x3 (des-cbc-md5) keylength 8 (0xb64540dace6e70d3)
account has been set for des-only encryption.
接着,执行,目的是往keytab上面增加新的service principal。
c:\>ktab -k tomcat2005_keytab -a
password for
done!
service key for is saved in c:\\tomcat2005_keytab
你可能问,ktpass和ktab都往keytab文件两面写key,其实,他们都是写同样的key,只不过ktpass还有一个ad帐号set spn name的作用。
还可以通过ktab -l -k tomcat2005_keytab, 来看看里面究竟有针对什么service的key
c:\>ktab -l -k tomcat2005_keytab
keytab name: c:\\tomcat2005_keytab
kvno principal
--------------------------------
4
kvno是service key的更新序号,不需要理会,关键的是principal。