日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

體驗(yàn)WebLogic Server 8.1 SP4新增功能之WebLogic Single...

 senjanwn 2007-01-25
體驗(yàn)WebLogic Server 8.1 SP4新增功能之WebLogic Single Sign-On

時(shí)間:2005-04-20
作者:馬曉強(qiáng)
瀏覽次數(shù): 7354
本文關(guān)鍵字:
文章工具
推薦給朋友 推薦給朋友
打印文章 打印文章
  在WebLogic 8.1最新的 SP4版本中,最引人注目的要算是在安全方面,提供了用于和Microsoft Windows客戶端進(jìn)行Single Sign-On的Single Pass Negotiate Identity Assertion Provider。通過該P(yáng)rovider可以輕松完成從前認(rèn)為技術(shù)難度很高的和Windows客戶端的Single Sign-On。

  這個(gè)簡(jiǎn)單,低成本的SSO解決方案相信對(duì)大多數(shù)的企業(yè)應(yīng)用來說更具吸引力:

  1. 用戶只需要開機(jī)時(shí)登錄Windows域,就可以以登錄用戶的身份訪問全部的基于WebLogic Server,IIS等的應(yīng)用系統(tǒng);
  2. 在后續(xù)的訪問中,用戶將不需要重新輸入口令,這樣使得口令不會(huì)以明文形式在內(nèi)網(wǎng)傳遞,來自內(nèi)網(wǎng)的安全威脅被降低了(企業(yè)的主要網(wǎng)絡(luò)安全威脅來自內(nèi)網(wǎng)),如果在內(nèi)網(wǎng)啟用SSL則成本太高;
  3. 只需要一次驗(yàn)證,因此不論是AD還是其他的存儲(chǔ)用戶信息的關(guān)系數(shù)據(jù)庫(kù),LDAP等,驗(yàn)證的開銷降低了;
  4. 極大改善用戶體驗(yàn),提高了IT服務(wù)品質(zhì),也提高了用戶的工作效率

  在成本方面,對(duì)比一些SSO產(chǎn)品,簡(jiǎn)單的說:

  1. 不需要添置新的硬件,不需要購(gòu)買新的軟件License,并且可以充分利用大多數(shù)企業(yè)中非常成熟的MS AD資源;

    * 而一些SSO產(chǎn)品,不僅需要添加新硬件,購(gòu)買License,而且成熟的部署往往涉及到Load Balance,F(xiàn)ailover等,成本驟然升高
  2. 不需要專門的運(yùn)營(yíng)維護(hù)人員,不需要專門的技術(shù)支持人員對(duì)服務(wù)器進(jìn)行管理,現(xiàn)有的IT團(tuán)隊(duì)即可勝任,成本被進(jìn)一步降低;
  3. 安裝配置簡(jiǎn)單,不需要安裝獨(dú)立的軟件,操作人員不需要專門的知識(shí)背景;
    * 對(duì)比一些SSO產(chǎn)品超厚的文檔手冊(cè),以及一次又一次的培訓(xùn)等

  因此這使得大多數(shù)的SSO產(chǎn)品廠商面臨了更大的挑戰(zhàn)。在應(yīng)用安全技術(shù)突飛猛進(jìn),SSO市場(chǎng)競(jìng)爭(zhēng)激烈的今天,用戶將有越來越多的自由去選擇適合自己的SSO解決方案,用戶將最終獲益。所以我們要感謝那些為今天這些技術(shù)的發(fā)展做出貢獻(xiàn)的人們。

  在我拿到WebLogic 8.1 SP4后,完成了WebLogic Web Server和Windows 的Single Sign-On的配置,最終效果比較理想,整個(gè)配置過程也比較簡(jiǎn)單。但是其間也遇到了一些問題,加上Bea在網(wǎng)站上提供配置文檔(http://e-docs./wls/docs81/secmanage/sso.html)很多地方說得并不清楚,甚至還有一些錯(cuò)誤,所以希望通過本文更好的幫助大家完成SSO的配置。

1 準(zhǔn)備
  
WebLogic Single Sign-On的主角是SPNEGO(Simple and Protected GSS-API Negotiation Mechanism)。所謂的Negotiate就是雙方通過一定的協(xié)商,確定最終使用的認(rèn)證協(xié)議。因此通過SPNEGO,雙方可以使用Kerberos,也可以使用NTLM等安全協(xié)議來完成雙方的認(rèn)證。所謂的GSS(http://www./rfc/rfc1508.txt )就是Generic Security Service API,SPNEGO可以說是其表現(xiàn)形式,主要目的是提供通用的安全服務(wù),保證應(yīng)用在不同環(huán)境中的可移植性。

  由于SPNEGO和Kerberos的緊密關(guān)系,因此我們更多情況下是看到SPNEGO/Kerberos這樣的組合。

  WebLogic的SPNEGO Identity Assertor僅支持Kerberos Token。通過下圖我們可以明白,SPNEGO Token和Kerberos Token關(guān)系,以及SPNEGO Token對(duì)底層認(rèn)證數(shù)據(jù)的封裝:

(from http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsecure/html/http-sso-2.asp
IE將Kerberos Token(Service Ticket以及一些認(rèn)證必須的信息),使用SPNEGO Token封裝,然后發(fā)送給WebLogic Web Server。Web Server通過SPNEGO Token中定義的協(xié)議類型確定使用的是Kerberos,然后從SPNEGO Token中解析中Kerberos Token進(jìn)而完成后續(xù)的驗(yàn)證。

  SPNEGO Token使用二進(jìn)制的ASN.1編碼(LDAP協(xié)議中的LDAP Message即使用ASN.1編碼),編碼后的二進(jìn)制數(shù)據(jù)通過Base64編碼為可見字符后傳送。具體可以參考http://www./rfcs/rfc2478.html。

  下面我們簡(jiǎn)單了解一下SPNEGO/Kerberos的驗(yàn)證過程:

  1. 用戶使用在AD中創(chuàng)建的用戶賬號(hào)和口令登錄Windows 2000 Domain;
  2. 用戶向一個(gè)Web Server發(fā)送請(qǐng)求訪問一個(gè)受限的資源;
  3. 如果用戶未認(rèn)證,Web Server將返回HTTP Code 401 Unauthorized以及HTTP Header WWW-Authenticate: Negotiate要求客戶端提供認(rèn)證信息;
  4. IE根據(jù)配置的SPN(后面將介紹)獲得向KDC請(qǐng)求的Service Ticket或者其他一些憑證;
  5. IE使用這些信息封裝成Negotiate Token發(fā)送給Web Server
  6. Web Server使用事先準(zhǔn)備好的keytab驗(yàn)證IE提交的認(rèn)證信息,或者將Kerberos Token中的信息提交到KDC驗(yàn)證;
  7. WebLogic Web Server驗(yàn)證成功后裝配相應(yīng)的Subject,然后為此用戶起一個(gè)Session,用戶登錄成功

  實(shí)際的驗(yàn)證過程是比較復(fù)雜的,讀者可以參考:http://www.microsoft.com/technet/prodtechnol/windows2000serv/maintain/security/kerberos.mspx

2 環(huán)境
  
接下來,我們將以一個(gè)具體的環(huán)境為例進(jìn)行說明。我們假設(shè)有下面的部署邏輯:

服務(wù)器端:
 * Windows 2000 Advance Server (Active Directory)
 * 域:SSO.COM
 * 機(jī)器域名:AD-SERVER.SSO.COM
 * RedHat Linux 7.2
 * 主機(jī)名:wls

 * WebLogic Server 8.1 SP4 (一定要是SP4)

客戶端機(jī):
 * Windows 2000 Professional
 * IE 6.0

注意:
 * 瀏覽器IE6.0和5.0以及5.5等在配置上會(huì)有不同
 * 檢查Windows 2000 Advance Server是否已經(jīng)安裝了Setspn.exe,否則從該鏈接中獲取并安裝。
http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/setspn-o.asp
 * 保證Windows 2000 Advance Server中存在Ktpass.exe,你可以在C:\Program Files\Support Tools\下找到它,否則需要從Windows2000 AD Server安裝盤中獲取。
 * Kerberos實(shí)現(xiàn)對(duì)大小寫敏感,因此配置中我們一律使用大寫的域名
 * 默認(rèn)情況下Windows2000 Ad Server跟運(yùn)行weblogic 的RedHat Linux兩個(gè)主機(jī)間的時(shí)間相差不能超過5分鐘(Kerberos協(xié)議對(duì)時(shí)間是敏感的),否則驗(yàn)證會(huì)失敗。根據(jù)實(shí)際情況我們可以縮短這個(gè)時(shí)間,獲得更好的安全性。

3 配置過程
 準(zhǔn)備工作都完成后,我們可以開始具體的配置工作了。

  1. 在Windows 2000 Advance Server上的配置
    (注意:以下的操作使用Administrator或者同等權(quán)限的用戶操作)

    在Windows2000 Advance Server配置了Active Directory,同時(shí)將其作為DNS服務(wù)器。Windows2000 Ad Server將在每個(gè)Domain Controler上面啟用KDC(Key Distribution Center),KDC包括兩部分,分別是Authentication Service以及Ticket Granting Service。具體我們就不多說了,總之大家明白一旦配置好 Windows Domain Controller(通過AD建了一個(gè)Domain)這些就已經(jīng)存在了并能正常工作,在Windows上除非有特殊要求,否則我們不需要多于的配置,或者啟用KDC之類的操作。

    * 在DNS中為WebLogic Server所在主機(jī)配置DNS記錄。

    DNS Name:wls.SSO.COM

    *在AD(域SSO.COM)中為WebLogic Server創(chuàng)建用戶賬號(hào)

    賬號(hào):wls
    注意,在創(chuàng)建用戶賬號(hào)時(shí),不能選擇用戶第一次登錄時(shí)需要修改口令的選項(xiàng)。而且需要使用默認(rèn)的DES加密類型,這個(gè)不要修改,其他類型不被WebLogic支持。

    以及測(cè)試用戶賬號(hào):TESTUSER

    *使用Setspn.exe為用戶wls創(chuàng)建一個(gè)Service Principal Name

    該SPN將作為用戶(wls)屬性存放,IE將根據(jù)它來判斷訪問的是哪一個(gè)Service,進(jìn)而從KDC請(qǐng)求該Service的Ticket。其中HTTP是服務(wù)類型,HOST可以代表全部類型,我們這里指定為HTTP。

    并且如果一個(gè)主機(jī)上,開了多個(gè)同樣的服務(wù),那么可以通過設(shè)置port來區(qū)分,具體參考http://www.microsoft.com/resources/documentation/WindowsServ/2003/all/techref/en-us/Default.asp?url=/Resources/Documentation/windowsserv/2003/all/techref/en-us/W2K3TR_adspn_how.asp 由于我這里只有一個(gè)WebLogic Server,所以沒有指定。

    下面是配置示例:
    C:\Program Files\Resource Kit>setspn -A HTTP/wls.SSO.COM wls
    Registering ServicePrincipalNames for CN=wls,CN=Users,DC=SSO,DC=com
     HTTP/wls.SSO.COM
    Updated object

    完成后可以通過命令檢查:
    C:\Program Files\Resource Kit>setspn -L wls
    Registered ServicePrincipalNames for CN=wls,CN=Users,DC=SSO,DC=com:
     HTTP/wls
     HTTP/wls.SSO.COM

    C:\Program Files\Resource Kit>

    *創(chuàng)建Kerberos Service Principal,并映射到wls用戶
    C:\Program Files\Resource Kit>ktpass -princ http/wls @SSO.COM -pass *** -mapus
    er wls -out c:\temp\wls.HTTP.keytab
    Successfully mapped http/wls to wls.
    Key created.
    Output keytab to c:\temp\wls.HTTP.keytab

    Keytab version: 0x502
    keysize 43 http/wls@SSO.COM ptype 1 (KRB5_NT_PRINCIPAL) vno 1 etype 0x1 (DES-CBC-CRC) keylength 8 (0xa7c7e6ab9767fb37)
    Account has been set for DES-only encryption.

    WebLogic Web Server就是Kerberos Service,這里通過-princ指定了生成的Service Principal(kerberos 5格式:name/instance@realm),它將代表一個(gè)WebLogic Web Server實(shí)體。這里是http/wls@SSO.COM(域名大寫),它非常重要,Sun Krb5LoginModule(JDK1.4中提供)將通過它以及keytab對(duì)客戶端提交的請(qǐng)求進(jìn)行驗(yàn)證。它將配置在JAAS LoginModule Config Entry中。-pass參數(shù)指定了用戶wls的口令,如果你前面選擇了用戶第一次登錄必須修改口令,這里就慘了。

    Account has been set for DES-only encryption.這個(gè)信息也比較重要,如果沒有DES-only,你的WebLogic認(rèn)證可能會(huì)失敗。

    上面的命令成功后將在磁盤上生成一個(gè)wls.HTTP.keytab文件,該文件非常重要,必須妥善保管,除了指定用戶外,禁止任何其他人訪問。
  2. 在RedHat上的配置
    *將文件wls.HTTP.keytab拷貝到Linux指定目錄下
    如果是在真實(shí)環(huán)境中,這個(gè)拷貝過程必須非常安全。我建議使用啟動(dòng)WebLogic的Linux用戶身份通過sftp將文件拷貝到啟動(dòng)WebLogic的目錄下,方便我們后面的配置。

    拷貝完成后,立即刪除Windows機(jī)器上的原文件。同時(shí)修改該文件屬性為只有屬主用戶可讀(屬主用戶為啟動(dòng)WebLogic的Linux用戶)??梢允褂萌缦旅钚薷奈募L問屬性:

    $chmod 600 wls.HTTP.keytab
    $

    注意:如果你擁有多個(gè)keytab,那么使用ktutil合并這些keytab到一個(gè) keytab文件中。默認(rèn)安裝的RedHat中似乎沒有安裝krb5-workstation這個(gè)RPM包(工具ktutil包含該RPM內(nèi)),如果這樣,需要下載RPM包進(jìn)行安裝,安裝完成后/usr/kerberos/目錄下會(huì)有我們需要的工具,大家可以通過該鏈接下載:http:///linux/RPM/redhat/6.2/i386/krb5-workstation-1.1.1-9.i386.html
    具體合并過程和文檔請(qǐng)參考相關(guān)文檔,比如:http://e-docs./wls/docs81/secmanage/sso.html#1101370

    * 配置JAAS Login Configruation Entry

    JAAS Login Configuration Entry被JAAS使用。WebLogic Negotiate Identity Assertor解析完成Negotiate Token后將通過Krb5LoginModule完成最終的用戶驗(yàn)證。

    此驗(yàn)證過程通過我們前面生成的keytab參與來完成,不需要訪問KDC機(jī)器。這降低了KDC認(rèn)證方面的開銷。

    com.sun.security.jgss.initiate {  com.sun.security.auth.module.Krb5LoginModule required  principal="HTTP/wls@SSO.COM" useKeyTab=true keyTab="wls.HTTP.keytab" storeKey=true;
    };
    com.sun.security.jgss.accept {  com.sun.security.auth.module.Krb5LoginModule required  principal="HTTP/wls@SSO.COM" useKeyTab=true keyTab="wls.HTTP.keytab" storeKey=true;
    };

    參數(shù)中的Principal為前面我們通過ktpass創(chuàng)建的Service Principal,這里是“HTTP/wls@SSO.COM”。keytab指向我們通過ktpass生成的keytab文件。

    將上面的內(nèi)容保存為krb5Login.conf。
  3. WebLogic的配置
    * 為WebLogic 配置Single Pass Negotiate Identity Assertion Provider

    這個(gè)配置比較簡(jiǎn)單,請(qǐng)參考http://e-docs./wls/docs81/secmanage/providers.html#1199872 ,這里就不多說了。 注意Supported Types中兩個(gè)Token Type需要全都選擇。

    * 創(chuàng)建一個(gè)Web應(yīng)用

    創(chuàng)建一個(gè)sso.war,其中在web.xml中指定將全部的頁(yè)面作為受限資源控制,用戶必須經(jīng)過身份驗(yàn)證才能夠訪問web應(yīng)用頁(yè)面。
    <security-constraint>
     <display-name>Security Constraint on Conversation</display-name>
     <web-resource-collection>
       <web-resource-name>Conversation web service</web-resource-name>
       <url-pattern>/*</url-pattern>
       <http-method>GET</http-method>
       <http-method>POST</http-method>
     </web-resource-collection>
     <auth-constraint>
     <role-name>*</role-name>
     </auth-constraint>
    </security-constraint>
    <login-config>
     <auth-method>CLIENT-CERT</auth-method>
    </login-config>

    Auth-method指定驗(yàn)證方式為CLIENT-CERT,這是必須的。Role-name為*表示只要用戶擁有至少一個(gè)J2EE Security Role即可訪問這些資源。用戶成功登錄后,其登錄名就是一個(gè)Principal,WebLogic將默認(rèn)將其映射為一個(gè)Security Role。因此只要用戶成功登錄,即可訪問/*資源。所以如果用戶沒有登錄,WLS將要求用戶登錄。

    在war包中的jsp文件內(nèi),比如index.jsp通過如下代碼獲取當(dāng)前用戶信息:

    <%=request.getRemoteUser()%>

    如果返回不為null,表明用戶已經(jīng)成功登錄,其返回值就是登錄用戶的UID。使用WebLogic Console部署該應(yīng)用,確保應(yīng)用部署成功。

    * 在WebLogic控制臺(tái)上增加一個(gè)用戶賬號(hào)

    該賬號(hào)同1步在AD中創(chuàng)建的賬號(hào)必須完全一致,這里叫TESTUSER;或者你配置一個(gè)Active Directory Authentication Provider指向AD也可,但我沒有實(shí)際操作,大家有興趣的可以試一下。

    * 修改啟動(dòng)WebLogic腳本增加如下的系統(tǒng)變量
    -Dsun.security.krb5.debug=true
    -Djava.security.krb5.realm=SSO.COM
    -Djava.security.krb5.kdc= AD-SERVER.SSO.COM
    -Djava.security.auth.login.config=krb5Login.conf -Djavax.security.auth.useSubjectCredsOnly=false-Dweblogic.security.enableNegotiate=true"

    Krb5Login.conf為我們 前面編輯的configuration entry。AD-SERVER.SSO.COM指向我們的AD Server??梢栽?etc/hosts文件中增加該名字到IP的映射會(huì)比較簡(jiǎn)單一些。sun.security.krb5.debug將使Krb5LoginModule輸出調(diào)試信息。這里還要提醒大家realm等參數(shù)(SSO.COM)都需要大寫。

    * 重新啟動(dòng)WebLogic
  4. IE瀏覽器的配置

    IE瀏覽器也需要適當(dāng)配置,我們這里以IE6.0為例說明。主要兩個(gè)地方需要配置:

    1. 工具 – Internet選項(xiàng) -點(diǎn)擊“本地Interanet”-點(diǎn)擊“站點(diǎn)”-高級(jí)
    將*.SSO.COM加入,這樣我們?cè)L問 wls.時(shí),IE會(huì)將wls.作為本地網(wǎng)站來訪問。

    2. 工具 -Internet選項(xiàng) -高級(jí) -安全
    “啟用集成Windows身份驗(yàn)證”前面打勾。6.0版本前的IE會(huì)默認(rèn)選擇該選項(xiàng),IE6默認(rèn)沒有選擇。

    具體請(qǐng)參考連接http://msdn.microsoft.com/library/en-us/dnsecure/html/http-sso-1.asp 中關(guān)于IE的配置。

    完成后重新啟動(dòng) Windows。

 

4 驗(yàn)證
  
找一個(gè)Windows 2000 Professional機(jī)器(切記不要是那臺(tái)AD Server, AD上的IE只會(huì)向Web Server發(fā)出NTLM Token而非Kerberos Token, NTLM Token不被WLS支持),按照上面的IE配置方法完成配置后,將其加入到SSO.COM域。

  使用用戶TESTUSER登錄域,打開IE,訪問http://wls.:7001/sso/index.jsp

  頁(yè)面上將顯示出用戶的登錄賬號(hào),如果失敗將會(huì)彈出用戶登錄對(duì)話框。失敗了也不要緊,看一下WebLogic的輸出,我們已經(jīng)打開了debug開關(guān),從其中的錯(cuò)誤信息我們可以發(fā)現(xiàn)是什么原因。具體請(qǐng)參考JAVA GSS-API的Troubleshooting,鏈接如下:http://java./j2se/1.5.0/docs/guide/security/jgss/tutorials/Troubleshooting.html

5 總結(jié)
  通過上面的介紹,相信大家已經(jīng)可以成功配置自己的SSO了(可以看出整個(gè)過程還是比較簡(jiǎn)單的,對(duì)比一些SSO產(chǎn)品的超復(fù)雜配置過程)。由于時(shí)間原因,本文寫的比較倉(cāng)促,難免有疏漏的地方。如果哪些地方描述有錯(cuò)誤,請(qǐng)給我指出;或者根據(jù)上面的配置沒有成功的,也請(qǐng)告知我。希望與大家交流,共同分享成功配置SSO的快樂!
附源代碼:下載源代碼

6 參考資料
1. http://e-docs./wls/docs81/secmanage/sso.html Bea關(guān)于WebLogic SPNEGO Identity Assertion Provider的配置指導(dǎo)
2. http://e-docs./wls/docs81/secmanage/providers.html#1199872 Bea關(guān)于Identity Assertion Provider的配置文檔
3. http://www./rfc/rfc1508.txt GSS的RFC文檔
4. http://www./rfc/rfc2478.txt SPNEGO的RFC文檔
5. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsecure/html/http-sso-2.asp 微軟的MSDN上有大量關(guān)于SPNEGO/Kerberos的資料
6. http://www.microsoft.com/technet/prodtechnol/windows2000serv/maintain/security/kerberos.mspx 微軟提供的關(guān)于Kerberos的資料
7. http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/setspn-o.asp 微軟關(guān)于Setspn.exe工具的使用說明
8. http://web./kerberos/www/ Kerberos安全協(xié)議的網(wǎng)站

 作者簡(jiǎn)介
馬曉強(qiáng)是高級(jí)軟件工程師,現(xiàn)在廣東從事J2EE,LDAP相關(guān)的設(shè)計(jì)開發(fā)工作。對(duì)WebLogic,LDAP以及Single Sign-On等產(chǎn)品、技術(shù)很感興趣。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多