<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    kapok

    垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      455 隨筆 :: 0 文章 :: 76 評論 :: 0 Trackbacks

    http://dev2dev.bea.com.cn/techdoc/webser/2005042002.html
    在WebLogic 8.1最新的 SP4版本中,最引人注目的要算是在安全方面,提供了用于和Microsoft Windows客戶端進行Single Sign-On的Single Pass Negotiate Identity Assertion Provider。通過該Provider可以輕松完成從前認為技術難度很高的和Windows客戶端的Single Sign-On。

      這個簡單,低成本的SSO解決方案相信對大多數的企業應用來說更具吸引力:

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

      在成本方面,對比一些SSO產品,簡單的說:

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

      * 而一些SSO產品,不僅需要添加新硬件,購買License,而且成熟的部署往往涉及到Load Balance,Failover等,成本驟然升高
    2. 不需要專門的運營維護人員,不需要專門的技術支持人員對服務器進行管理,現有的IT團隊即可勝任,成本被進一步降低;
    3. 安裝配置簡單,不需要安裝獨立的軟件,操作人員不需要專門的知識背景;
      * 對比一些SSO產品超厚的文檔手冊,以及一次又一次的培訓等

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

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

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

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

      WebLogic的SPNEGO Identity Assertor僅支持Kerberos Token。通過下圖我們可以明白,SPNEGO Token和Kerberos Token關系,以及SPNEGO Token對底層認證數據的封裝:

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

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

      下面我們簡單了解一下SPNEGO/Kerberos的驗證過程:

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

      實際的驗證過程是比較復雜的,讀者可以參考:http://www.microsoft.com/technet/prodtechnol/windows2000serv/maintain/security/kerberos.mspx

    2 環境
      
    接下來,我們將以一個具體的環境為例進行說明。我們假設有下面的部署邏輯:

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

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

    客戶端機:
     * Windows 2000 Professional
     * IE 6.0

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

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

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

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

      * 在DNS中為WebLogic Server所在主機配置DNS記錄。

      DNS Name:wls.SSO.COM

      *在AD(域SSO.COM)中為WebLogic Server創建用戶帳號

      帳號:wls
      注意,在創建用戶帳號時,不能選擇用戶第一次登錄時需要修改口令的選項。而且需要使用默認的DES加密類型,這個不要修改,其他類型不被WebLogic支持。

      以及測試用戶帳號:TESTUSER

      *使用Setspn.exe為用戶wls創建一個Service Principal Name

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

      并且如果一個主機上,開了多個同樣的服務,那么可以通過設置port來區分,具體參考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 由于我這里只有一個WebLogic Server,所以沒有指定。

      下面是配置示例:
      C:Program FilesResource 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 FilesResource Kit>setspn -L wls
      Registered ServicePrincipalNames for CN=wls,CN=Users,DC=SSO,DC=com:
       HTTP/wls
       HTTP/wls.SSO.COM

      C:Program FilesResource Kit>

      *創建Kerberos Service Principal,并映射到wls用戶
      C:Program FilesResource Kit>ktpass -princ http/wls .COM -pass *** -mapus
      er wls -out c: empwls.HTTP.keytab
      Successfully mapped http/wls to wls.
      Key created.
      Output keytab to c: empwls.HTTP.keytab

      Keytab version: 0x502
      keysize 43 http/wls.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),它將代表一個WebLogic Web Server實體。這里是http/wls.COM(域名大寫),它非常重要,Sun Krb5LoginModule(JDK1.4中提供)將通過它以及keytab對客戶端提交的請求進行驗證。它將配置在JAAS LoginModule Config Entry中。-pass參數指定了用戶wls的口令,如果你前面選擇了用戶第一次登錄必須修改口令,這里就慘了。

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

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

      拷貝完成后,立即刪除Windows機器上的原文件。同時修改該文件屬性為只有屬主用戶可讀(屬主用戶為啟動WebLogic的Linux用戶)。可以使用如下命令修改文件訪問屬性:

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

      * 配置JAAS Login Configruation Entry

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

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

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

      參數中的Principal為前面我們通過ktpass創建的Service Principal,這里是“HTTP/wls.COM”。keytab指向我們通過ktpass生成的keytab文件。

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

      這個配置比較簡單,請參考http://e-docs.bea.com/wls/docs81/secmanage/providers.html#1199872 ,這里就不多說了。 注意Supported Types中兩個Token Type需要全都選擇。

      * 創建一個Web應用

      創建一個sso.war,其中在web.xml中指定將全部的頁面作為受限資源控制,用戶必須經過身份驗證才能夠訪問web應用頁面。
      <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指定驗證方式為CLIENT-CERT,這是必須的。Role-name為*表示只要用戶擁有至少一個J2EE Security Role即可訪問這些資源。用戶成功登錄后,其登錄名就是一個Principal,WebLogic將默認將其映射為一個Security Role。因此只要用戶成功登錄,即可訪問/*資源。所以如果用戶沒有登錄,WLS將要求用戶登錄。

      在war包中的jsp文件內,比如index.jsp通過如下代碼獲取當前用戶信息:

      <%=request.getRemoteUser()%>

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

      * 在WebLogic控制臺上增加一個用戶帳號

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

      * 修改啟動WebLogic腳本增加如下的系統變量
      -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的映射會比較簡單一些。sun.security.krb5.debug將使Krb5LoginModule輸出調試信息。這里還要提醒大家realm等參數(SSO.COM)都需要大寫。

      * 重新啟動WebLogic
    4. IE瀏覽器的配置

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

      1. 工具 – Internet選項 -點擊“本地Interanet”-點擊“站點”-高級
      將*.SSO.COM加入,這樣我們訪問 wls.sso.com時,IE會將wls.sso.com作為本地網站來訪問。

      2. 工具 -Internet選項 -高級 -安全
      “啟用集成Windows身份驗證”前面打勾。6.0版本前的IE會默認選擇該選項,IE6默認沒有選擇。

      具體請參考連接http://msdn.microsoft.com/library/en-us/dnsecure/html/http-sso-1.asp 中關于IE的配置。

      完成后重新啟動 Windows。

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

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

      頁面上將顯示出用戶的登錄帳號,如果失敗將會彈出用戶登錄對話框。失敗了也不要緊,看一下WebLogic的輸出,我們已經打開了debug開關,從其中的錯誤信息我們可以發現是什么原因。具體請參考JAVA GSS-API的Troubleshooting,鏈接如下:http://java.sun.com/j2se/1.5.0/docs/guide/security/jgss/tutorials/Troubleshooting.html

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

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

    7 關于作者
    作者馬曉強,高級軟件工程師,現在廣東從事J2EE,LDAP相關的設計開發工作。對WebLogic,LDAP以及Single Sign-On等產品、技術很感興趣。您可以通過 E-mail: iammxq.com.cn 與他聯系。

    posted on 2005-04-25 13:58 笨笨 閱讀(821) 評論(0)  編輯  收藏 所屬分類: J2EEALLWeblogic Portal
    主站蜘蛛池模板: 亚洲毛片基地日韩毛片基地| 7777久久亚洲中文字幕蜜桃| 亚洲福利在线播放| 久久久久国产亚洲AV麻豆| 亚洲产国偷V产偷V自拍色戒| 亚洲伊人久久精品| 免费夜色污私人影院网站电影| 特级做A爰片毛片免费看无码| 57pao国产成视频免费播放| 手机在线免费视频| 国产精品亚洲片在线观看不卡 | 婷婷亚洲综合五月天小说| 亚洲日韩一区精品射精| 中文字幕成人免费高清在线| 成人毛片18女人毛片免费视频未| 亚洲熟妇无码一区二区三区| **aaaaa毛片免费| 亚洲中文字幕无码av在线| 热99RE久久精品这里都是精品免费| 日本成人免费在线| 亚洲专区先锋影音| 国产一精品一av一免费爽爽| 亚洲AV无码成人精品区大在线| 一区二区三区视频免费观看| 日韩免费高清视频网站| 国产成人无码精品久久久免费| 永久免费bbbbbb视频| 亚洲国产美女福利直播秀一区二区| 免费看黄的成人APP| 亚洲精品一区二区三区四区乱码| 免费人成在线视频| 亚洲二区在线视频| 免费a在线观看播放| 亚洲日韩看片无码电影| 亚洲无码日韩精品第一页| 精品在线视频免费| 在线免费观看中文字幕| 亚洲а∨天堂久久精品9966| 青青在线久青草免费观看| 久久久久亚洲av无码专区喷水| 在线不卡免费视频|