不少人都沒(méi)搞清楚Ktpass跟Ktab的用法,特此寫(xiě)一篇文章來(lái)敘說(shuō)一下。
我假設你對Kerberos有所認識,可以讀我的一篇文章
在Kerberos中,安全性完全是依賴(lài)于Share Secret,也就是,KDC跟Kerberos Service之間都共享著(zhù)一條Key,Ktpass這個(gè)命令行工具承擔著(zhù)這樣一個(gè)角色,它能夠將非Windows Kerberos服務(wù)配置一個(gè)Service Principal,通常類(lèi)似于HTTP/Service@DomainName,并且同時(shí)生成一個(gè)Keytbab,這樣做的目的是在Windows域中的KDC和非Windows的服務(wù)(Kerberos Service)建立一種安全的信任關(guān)系,Keytab文件中就是存放著(zhù)那條非常重要的跟KDC打交道的Secret Key。
你更改了Keytab中的Key,就必須同時(shí)更改Kerberos database中的Key。操作Keytab,JDK提供了一個(gè)很好的工具叫做KTab。
首先,在Windows域控制器上創(chuàng )建一個(gè)用戶(hù)tomcat2005, 這是一個(gè)Windows的用戶(hù),我們使用Ktpass將一個(gè)Kerberos service (HTTP/tomcat@MYDAVID.ORG)Mapping到這個(gè)用戶(hù)上面。Ktpass會(huì )修改當前用戶(hù)在Windows AD中的用戶(hù)登錄名,你可以用setspn -L tomcat2005來(lái)查看究竟有多少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.
接著(zhù),執行,目的是往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
你可能問(wèn),Ktpass和Ktab都往keytab文件兩面寫(xiě)Key,其實(shí),他們都是寫(xiě)同樣的Key,只不過(guò)Ktpass還有一個(gè)AD賬號Set SPN Name的作用。
還可以通過(guò)ktab -l -k tomcat2005_keytab, 來(lái)看看里面究竟有針對什么Service的Key
C:\>ktab -l -k tomcat2005_keytab
Keytab name: C:\\tomcat2005_keytab
KVNO Principal
--------------------------------
4 HTTP/tomcat@MYDAVID.ORG
KVNO是Service Key的更新序號,不需要理會(huì ),關(guān)鍵的是Principal。
SSO總會(huì )有一個(gè)結束的時(shí)候,我最終把CAS Server 2.0放到Weblogic Portal上,并實(shí)現了到其他WebApp的單點(diǎn)登陸。困難比我原先想象的要大,總結幾點(diǎn),希望對來(lái)者有所幫助。
1,搞SSO前請先熟悉SSL/PKI,因為,CAS的安全性很大程度依賴(lài)于SSL,沒(méi)有安全性,不敢想象SSO有何作為。
2,因為我們的環(huán)境是在Weblogic Portal上,Portal環(huán)境上,調試CAS費了我好大力氣,加之我重寫(xiě)了CAS的LoginModule(CAS不提供J_Security_check登陸方式),中途拋出的錯誤很多,訪(fǎng)問(wèn)BEA Support網(wǎng)站是家常便飯了。
3,CAS需要配置信任證書(shū),如果象我那樣一步一步地創(chuàng )建根CA,ServerCA,恐怕會(huì )比較辛苦,但證書(shū)的確讓我高枕無(wú)憂(yōu),從CAS Server和各個(gè)Web應用之間建立一種更松耦合的信任關(guān)系。
4,IE端到CAS Server的雙向SSL雖是畫(huà)蛇添足,但是在一些高安全性的SSO環(huán)境,如網(wǎng)上付費,付出少許的計算代價(jià),即讓身份欺詐無(wú)所遁形。
冷靜下來(lái),想了一下SSO的用處,看來(lái)在互連星空中會(huì )有賣(mài)點(diǎn),事實(shí)上,電信已經(jīng)使用了SSO了,聯(lián)通在信平臺也在各SP與MISC之間部署SSO,隨著(zhù)B2B,B2C的發(fā)展,相信SSO會(huì )有很不錯的前途。
我個(gè)人對CAS的評價(jià)是,
PureJava Impl,OpenSource,能輕松在各種WebServer間移植,協(xié)議并沒(méi)有Kerberos那么復雜(當然Kerberos更安全),所以使用和調試起來(lái),沒(méi)有Kerberos那么痛苦。實(shí)戰中,本人更傾向使用CAS 3.0,基于Spring的一種實(shí)現方式,將來(lái)有空必為此寫(xiě)一Blog.
聯(lián)系客服