WebLogic Server 之安全(架構篇)
本文來自
http://www.chinaitpower.com/2005Nov/2005-11-23/209281.html安全的變化可是WebLogic Server近期版本(7.0,8.1)最大的變化之一,全新的安全體系架構,既易于客戶化安全解決方案的變化,又能實現細節和應用基礎架構分離,使安全更易于部署,管理,維護和根據需求變化.同時也是支持最新的J2EE的標準和規范。本文試圖從架構方面詳細講解WebLogic Server 7.0的安全體系及其相關細節,希望讀者能對其機制有個框架層次和深度上的了解,文檔參照了WebLogic Server 7.0的英文版手冊,表述不當的地方,希望大家一起探討。BTW,新出的WebLogic Server 8.1的安全架構完全和WebLogic Server 7.0一致。
WebLogic Security的基本特征開放,靈活的架構。
1. 基于標準,易于理解的設計
2. 基于WebLogic Server應用的端對端的安全(從主機到瀏覽器)
3. 能與已存在的安全規則(Scheme)進行集成,從而有利于保護企業投資。
4. 安全的工具集成到一個靈活,統一架構的系統以便于在企業級進行安全管理
5. 通過將公司的業務規則和安全policies的對應,能方便實現根據業務需求客戶化應用安全
6. 易于Security Policy的更新。
7. 易于客戶化安全解決方案的變化。
8. 因為具有模塊化的架構,因此安全架構能根據不同公司的特殊需求不斷變化
9. 能夠配置多個Security Provider
10. 安全實現細節和應用基礎架構分離,使安全更易于部署,管理,維護和根據需求變化
11. 當前的WebLogic Security providers提供了和應用無關的可行的安全規則。(Scheme)
12. 使用WebLogic custom security provider進行客戶化工作
13. 通過管理控制臺進行統一的安全規則(Rule),Security Policy和Security Provider的統一管理
14. 對最新的J2EE安全技術的支持,包括JAAS(Java Authentication and Authorization Service),JSSE(java Secure Sockets Extensions),and JCE(java Cryptography Extensions)
易于使用:對最終用戶而言,只需要登陸一次,就能訪問所有資源(SSO),(限制在WebLogic Domain) 可管理:提供WebLogic security Provider,當前的Provider支持所有需要的安全功能,Security Data存放在WebLogic Server提供的LDAP Server中 客戶化: WebLogic Security API,JAAS,JSSE custom security provider through SSPIs(WebLogic Server Security Service Provider Interfaces) |
WebLogic Server Security從6.x到7.0的變化:
WebLogic Server 6.x | WebLogic Server70 |
安全的API | 非常多的已存在API不推薦使用,BEA建議使用基于J2EE規范的標準接口實現應用 |
JAAS認證 | JAAS認證增強已提供對于IIOP和t3客戶端訪問的LoginModules |
審計 | 無需實現WebLogic.security.Audit接口已在你的應用中加入審計功能,WebLogic Auditing provider已提供。 |
定義weblogic.xml和weblogic-ejb-jar.xml和weblogic-ra.xml中的安全需求 | 增強可以通過管理控制臺定制 |
系統密碼 | 沒有指定的系統賬號 |
ACL | ACL已經不推薦使用,并由security policy代替 |
用戶和組 | 仍然存在,并通過security policy將weblogic resouce賦予user,group或security role |
6.x安全Realm | 不推薦使用,但仍存在Realm Adapter當你進行安全的轉換時 |
| 支持多個Security Provider |
SSL | 支持JSSE標準和TLS v1(Transport Layer Security)協議 |
| 支持J2EE JKS keystores |
安全基礎Audit(審計):
提供對操作請求和請求輸出的搜集,存儲和發布,提供了對計算機行為的電子紀錄。
在Security operations happens的前后,WebLogic調用Auditing Provider對特殊事件(基于audit criteria or serverity level)進行紀錄同時寫入LDAP Server,數據庫或文件系統中。
Authentication(認證)
通過使用username/password組合來判斷用戶是否是一個系統的合法用戶,主要回答"Who Are You?"的問題。
1. Principal & Subject
Principal認證通過后賦予用戶或組的身份(Identity)Subject JAAS 要求通過subject,Container知道客戶信息,包括pricipals |
·Relationships Among Users, Groups, Principals and Subjects |

成功的認證后,principal簽名同時存在一個subject中,principal validation provider簽名,并且Authentication Provider的LoginModule存放pricipal到subject中,當caller試圖訪問存在subject中的pricipal時,principal validation provider認證pricipal自簽名后沒有改變,然后principal回給caller.
2. JAAS
JAAS實現了java版本的PAM模塊,允許應用和后層采用的認證技術,同時允許再不更改應用的情況下采用更新的或者變化了的安全認證技術。
WebLogic sever使用JAAS在胖客戶端認證和內部認證,因此,只有客戶化Authentication Provider的開發者和遠程胖客戶端需要直接使用JAAS, Thin 客戶端和在container內的胖客戶端(EJB throgh servelt)不需要直接使用JAAS.
·JAAS LoginModules
認證用戶,發布Subject.不用于perimeter authentication
·JAAS Control Flags
Multiple Authentication provider configured
REQUIRED : 必須成功,如果失敗,authentication繼續其他的LoginModule(當前)
REQUISITE:必須成功,成功繼續,不成功,將返回應用。
SUFFICIENT:不需要成功,如果成功,返回應用,如果失敗,繼續LoginModule List
OPTIONAL:允許成功或失敗,但必須通過一個LoginModule
·CallBackHandlers
CallbackHandler 是為將參數或復雜對象傳入方法中的一種高度靈活的規范。包括NameCallback:return username
PasswordCallback:return password
TextInputCallback: return 用戶在Login form中輸入的數據。
Security service將不同的Callback傳入CallbackHandler要求獲取不同類型的信息,CallbackHandler的實現決定如何根據不同的Callback獲取和顯示。
·Mutual Authentication
客戶端和服務端都需要相互認證,WebLogic Server支持2-way SSL
·Identity Assertion Providers and LoginModules
當和LoginModules一起使用時,Identity Assertion provider支持Sigle-sign-on,LoginModule包含:
→ 客戶化開發的Authentication Provider
→ BEA 開發的WebLogic Authentication Provider
→ 第三方的Authentication Provider
·Identity Assertion and Tokens
Identity Assertion Provider支持用戶名的mapping,對應到weblogic server中的一個正確的token,能夠開發Identitty Assertion Provider已支持多種token類型,但 只有一種為Active狀態,同時只有一種Identity Assertion provider最終執行這一mapping的操作。
Authentication類型
WebLogic authentication provider支持的認證類型有:
用戶名/口令認證:SSL,HTTPS CA(Certification Authentication):當SSL或HTTPS客戶請求發起時,WebLogic Server回應客戶一個數字認證(digital certification),客戶證實這個數字認證從而建立SSL聯結,數字認證是由仍證機構CA發放。 Perimeter Authentication 主要用于應用服務器外的遠程用戶的認證過程 遠程用戶指定assert identity和相應得材料來完成。 Authentication agent能采用各種格式,VPN,Firewall,企業級認證服務。 Authentication agent處理認證過程同時導致artifact和token產生。Identity assertion的概聯使weblogic server能使用perimeter authentication schemes提供的認證機制,比如Checkpoint's OPSEC,the emerging Security Assertion Markup Language(SAML), enhancement of Common Secure Interoperability(CSI)v2完成功能。 |

3. Authorization
Authorization在用戶和weblogic 控制的資源中交互的進程,基于用戶身份或其他信息。
Authorization主要回答的問題是"What can you access"
WebLogic resource:包含
管理資源
應用資源
COM資源
EIS資源
EJB
JDBC
JMS
JNDI
Server資源
URL資源
Web Service資源
·Security Policy
代替ACL,主要回答的問題是:Who have access to WebLogic resource?
當你將weblogic resource和用戶,組,security role相關聯時,Security Policy產生。
Security Policy存儲在Authorization Provider的數據庫中,當前的WebLogic Authorization provider存在LDAP Server中
BEA推薦在security role上建立security policy.
·ContextHandlers
從resource container中獲取context和有關container的信息,為security provider做出訪問或權限mapping決定的提供信息。
·Access Decisions
回答了"is access allowed?"的問題.Access Decision結果為PERMIT,DENY,ABSTAIN
·Adjudication
解決了當多個Authorization Provider提供授權時產生的沖突問題。Adjudication Server權衡多個Access Decision的結果,并且決定最終permit或者deny的結果。當唯一的Authorization provider返回結果為ABSTAIN時,Adjudication provider決定怎樣處理。
·SSL
當前WebLogic Server支持1-way方式的SSL認證,使用管理控制臺,能夠配置2-way的SSL.
需要配置privite key,包括public key的數字證書(digital certificate),和至少由一個CA認證的數字證書(digital certificate),有可能需要安裝root trusted CA's digital certificate.
為獲取數字證書,自己生成public key,private key和認證簽名請求(CSR)(包含public key),同時將CSR發到認證機構已得到簽名的證書。
Public key存放在WebLogic domain目錄下的文件系統中
Private key和通過認證的證書能存放在文件系統或通過WebLogic keystore provider提供的keystore中。
SSL提供
1) 應用間溝通的機制便于認證雙方的身份
2) 應用間交換數據的加密。
Server authentication:WebLogic Server使用經過CA簽名的數字證書,向客戶認證。當客戶不需要向Server證明自己的數字證書時,這種聯接的方式叫1-way SSL認證。
Client Identity Verification:可選的,客戶必須向WebLogic Server出示數字證書,WebLogic Server證實數字證書由CA發放同時建立SSL聯結,這種方式叫2-way SSL認證。
Confidentiality所有客戶的請求和Server的相應在網絡上的傳輸都加密。
數據完整性:客戶端和服務端傳輸的數據受保護。
SSL Tunneling
SSL是在基于IP協議上Tuneled.意味著每個SSL紀錄被封裝同時有使它在其他協議上發送的header來包裝。
One-way/Two-way SSL認證
在One-way情況下,客戶端通過兩種方式檢查數字認證
1. 檢查數字認證在它的可信任認證機構中(CA)
2. 檢查認證中的主機名和Server一致。

Domestic SSL和Exportable SSL
Exportable SSL支持512位證書和40-或50-位數據加密(標準支持) Domestic SSL支持768位和 1024位證書和128位數據加密(Ask BEA Sales) |
Security Realm(安全域) Security Realm 包含整套保護WebLogic資源的機制,由一系列配置好的Security Provider,用戶,組,security role,和security policy構成

·用戶
當用戶訪問WebLogic Server時,通過JAAS LoginModule到認證提供者,如果通過認證,weblogic server通過一個線程將principal和用戶相聯,在用戶線程開始執行代碼前,WebLogic Server檢查WebLogic resource的policy和principal以確認用戶取得相應的要求的權限。
當定義一個用戶時,WebLogic 對用戶的密碼進行加密,同時當WebLogic接收到客戶請求時,客戶端請求的密碼被hash加密,同時和以存在的加密密碼比較以判斷是否符合。
·組
組是用戶的邏輯組合。在一個Security Realm中,所有的用戶和組必須唯一。
·Security Role
動態賦予用戶和組,根據用戶名,組的成員或一天中的某個時間。
能在一個WebLogic server的域中,針對單個應用定義資源。
在weblogic 6.x中,security role只能賦予web application 和 EJB, 在 70版本中,用戶的security role能擴展到所有的WebLogic資源。
·Security Policy
Policy是WebLogic資源和用戶,組,和Security Role的關聯。用以保護WebLogic資源不收不被授權的用戶訪問。它代替了6.x中用的ACL
·Security Provider
對應用提供安全服務的模塊,用以保護WebLogic資源,客戶能夠直接使用WebLogic Server直接提供的security provider,也能購買第三方的產品進行集成,或者開發自己的security provider.
Security Provider數據庫
Security Provider數據庫包含用戶,組,role和policy,以及有些安全提供者使用的密碼。比如Authentication provider要求用戶和組的信息。Authorization provider要求安全policy方面的信息,Role Mapping Provider要求安全Role方面的信息,Credential Mapping provider要求resource Adapter用于聯結后臺的EIS系統的密碼信息。這些信息都存放在數據庫中。
Security provider的數據庫在遞一次使用security provider時候被初始化,所做的工作是
當WebLogic實例重起。
當一個security provider的Mbean被調用。
當你在一個security realm中配置了多個security provider,那么這些security provider將是用同一個security provider數據庫。當你在不同的security realm中配置兩個security provider或兩個相同的security provider,他們將使用不同的provider database.,在一個時間只有一個security Realm處在激活狀態。
·Embedded LDAP Server
Embedded LDAP Server被當前的WebLogic security provider使用作為數據庫存儲用戶,組,role和policy. 是一個完整的LDAP Server,支持的操作有:
在LDAP Server中訪問和修改
使用LDAP browser導入或導出安全的數據
被WebLogic security provider讀寫訪問。
WebLogic Server不支持在Embedded LDAP Server中加入屬性(Attribute)
WebLogic Security Provider | Embedded LDAP Server Usage |
Authentication | Stores user and group information. |
Identity Assertion | Stores user and group information. |
Authorization | Stores security roles and security policies. |
Adjudication | None. |
Role Mapping | Supports dynamic role associations by obtaining a computed set of roles granted to a requestor for a given WebLogic resource. |
Auditing | None. |
Credential Mapping | Stores Username-Password credential mapping information. |
·Security Provider的類型
Authentication Provider
主要用于:
用戶名/密碼的認證
直接和WebLogic Server基于證書的認證
通過外部的web server基于HTTP證書的認證代理
Identity Assertion Provider主要用于處理基于perimeter的認證和多個安全另牌(token)類型和協議。
在安全域中必須至少有一個Authentication provider,同時你可以配置多個Authentication Provider,意味著你有多個LoginModules,每個處理不同的認證。管理員配置不同的provider以便于當用戶登陸系統時多個LoginModules怎樣被調用。
Identity Assertion Provider
使用客戶提供的可能存在于請求外的Token識別客戶的身份。
WebLogic Security Service Architecture(架構)
Security Framwork

security framework提供的應用API被security和應用開發者定義安全服務使用,同時做為weblogic Container(Web和EJB),資源 Container和安全提供者間的中間層。
下面詳細描述各層間的交互
·認證過程

當用戶通過username/passwd組和登陸系統時,WebLogic建立信任同時對于每個JAAS請求回送包含principal的subject。
通過認證后,一個authentication context建立。
·Identity Assertion Process

主要用于perimeter authentication過程,當使用perimeter authentication時,外部系統傳入token給Identity Assertion Provider.如果通過,Identity Assertion provider將token對應到相應的username,并將回送username到weblogic server,然后由WebLogic Server將username送回到JAAS的CallbackHandler并傳遞到每個配置的Authentication Provider的LoginModule模塊,最后LoginModule能產生包含正確principal的Subject.
·Principal Validation Process

WebLogic將subject傳遞給principal validation Provider,后者將對principal進行簽名并通過WebLogic Server把他回送客戶的應用。以后principal validation provider將用來證明經過簽名的subject中的principal沒有被別人改過。
Authorization process

Authenorization process最初由用戶或系統要求使用WebLogic Server資源時觸發。Resource Container處理被請求的資源。 Resource Container調用WebLogic Security Framwork同時傳遞給它相應的請求subject和請求resource的信息。WebLogic framework調用配置的role mapping provider,同時將傳遞的信息轉換成相應的格式,由Role Mapping provider回送role的列表給WebLogic security framework, Authorization provider決定subject是否有訪問相關資源的權限,如果配有多個Authorization provider,WebLogic security framework決定任何有沖突的訪問判斷傳遞給Adjudication Provider,最后由Adjudication Provider決定最終的訪問許可。
·Role Mapping Process

WebLogic security framework調用每個role mapping provider以得到請求的role list,如果security policy指定請求賦予相應的role,role就被加入到subject可用的role list中,同時role list 返回給WebLogic security framwork做為下一步訪問控制的判斷。
·Auditing Process

Authentication Provider除了提供認證服務外,需要發送audit事件,初始化AuditEvent對象(包含audit的event類型和audit的級別),Authentication Provider隨后調用Audit Provider,同時傳遞AuditEvent對象,當AuditEvent和Auditing Provider配置的需要Audit的信息相同時,將被記錄到文件系統,數據庫或其他存儲介質中。
·Credential Mapping Process

最初由應用組件(包括jsp,ejb,resource adapter)訪問EIS系統(包括Oracle,SQL Server或其他)調用 WebLogic security framework時引發。應用組件傳遞subject(who),weblogic resource(what)和需要的credential。WebLogic security framework將請求傳遞給credential mapping provider,credential mapping provider處理請求,并將數據庫中的credential回送weblogic security framework,最后將credential返回給組件層,組件層使用credential以訪問EIS系統。
·weblogic security provider
缺省自帶的security provider,如果不能滿足你的需求,可以自己開發客戶化的security provider.
→ 從weblogic.security.spi包中實現正確的SSPIs(security service provider interface)以生成security provider.
→ 建立Mbean的定義文件(MDF),使用Weblogic MbeanMaker工具生成Mbean類型。

weblogic authentication provider
代替了6.xFile realm的功能,支持用戶名/密碼認證,利用embedded LDAP Server存儲用戶和組的信息。
支持LDAP Authentication訪問外部的LDAP 存儲(Open LDAP,Netscape iPlanet,Microsoft Active Directory,Novell NDS)
WebLogic Identity Assertion Provider
支持X.509認證和CSIv2(CORBA Common Secure Interoperability version 2)身份認證。
WebLogic Identity Assertion provider驗證token 的類型,然后將X.509數字認證和x.501的單一的名字和WebLogic 的用戶名相對應。同樣指定一信任的客戶principal列表便于CSIv2的身份確認。統配符*用于指定所有的信任的principal.如果客戶沒有列入到信任的principal中,CSIv2 Identity Assertion將失敗。
支持的token類型有
→ AU_TYPE -- WebLogic authenticationdUser
→ X509_TYPE X.509客戶端
→ CSI_PRINCIPAL_TYPE CSIV2 principal name
→ CSI_ANONYMOUS_TYPE CSIV2 anonymous identity
CSI_X509_CERTCHAIN_TYPE CSIv2 X.509 certificate chain identity
→ CSI_DISTINGUISHED_NAME_TYPE CSIv2 distinguished name identity
WebLogic principal validation provider
WebLogic authorization provider
WebLogic adjudication provider
WebLogic role mapping provider
·WebLogic auditing provider
WebLogic credential mapping provider
以上provider功能在前面已經做了基本介紹。在此省略。
·Weblogic keystore provider
使用sun公司sdk提供的keystore實現,利用標準的JKS keystore類型,將keystore做為文件(每臺機一個)來保存。有兩種keystore 文件
→ 一個文件保存CA認證(CA certificates)
→ 另一個文件保存server的private key
·WebLogic realm adapter provider
主要用來提供和6.x安全域的兼容。Realm Adapter提供
Authentication(include Identity Assertion Provider)
Authorization
Auditing
Adjudication
僅僅用于升級且不建議使用。
?作者簡介 |
| 聶健是(dev2dev ID: ericnie) Horizon Software Ltd. 技術顧問 |