不少人都没搞清楚Ktpass跟Ktab的用法,特此写一篇文章来叙说一下。
我假设你对Kerberos有所认识,可以读我的一篇文章<Weblogic Security In Action>中篇,里面初步介绍了Kerberos协议(基于Windows KDC)。
在Kerberos中,安全性完全是依赖于Share Secret,也就是,KDC跟Kerberos Service之间都共享着一条Key,Ktpass这个命令行工具承担着这样一个角色,它能够将非Windows Kerberos服务配置一个Service Principal,通常类似于HTTP/Service@DomainName,并且同时生成一个Keytbab,这样做的目的是在Windows域中的KDC和非Windows的服务(Kerberos Service)建立一种安全的信任关系,Keytab文件中就是存放着那条非常重要的跟KDC打交道的Secret Key。
你更改了Keytab中的Key,就必须同时更改Kerberos database中的Key。操作Keytab,JDK提供了一个很好的工具叫做KTab。
首先,在Windows域控制器上创建一个用户tomcat2005, 这是一个Windows的用户,我们使用Ktpass将一个Kerberos service (HTTP/tomcat@MYDAVID.ORG)Mapping到这个用户上面。Ktpass会修改当前用户在Windows AD中的用户登录名,你可以用setspn -L tomcat2005来查看究竟有多少Service Principal绑定到tomcat2005上。
C:\>ktpass -princ HTTP/tomcat@MYDAVID.ORG -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 HTTP/tomcat@MYDAVID.ORG 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 HTTP/tomcat@MYDAVID.ORG
Password for HTTP/tomcat@MYDAVID.ORG:tomcat2005
Done!
Service key for HTTP/tomcat@MYDAVID.ORG 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 HTTP/tomcat@MYDAVID.ORG
KVNO是Service Key的更新序号,不需要理会,关键的是Principal。