性能
以上圖的影響性能的關(guān)鍵步驟在于:
l 通過ESB發(fā)送請求/應(yīng)答
n 不可靠的萬國和協(xié)議
l 序列化/反序列化請求/應(yīng)答
n 通常會(huì)是XML,但是XML太啰嗦,在核心數(shù)據(jù)上,其大小會(huì)按4到20的因子增長。
n 使用中間協(xié)議也可以,當(dāng)然這要看它轉(zhuǎn)換的時(shí)間
n 增加一些安全檢查也會(huì)影響
l 處理請求
n 服務(wù)運(yùn)行緩慢的主要原因在于,服務(wù)的實(shí)現(xiàn)運(yùn)行耗時(shí)。這通常得看看一個(gè)服務(wù)調(diào)用通常得響應(yīng)時(shí)間,然后考慮這個(gè)響應(yīng)時(shí)間的伸縮性有多好。
n 如果服務(wù)供應(yīng)者資源有限,或存在瓶頸,同時(shí)處理對個(gè)服務(wù)調(diào)用就可能導(dǎo)致嚴(yán)重的性能障礙。因此,一份契約應(yīng)該包括一個(gè)服務(wù)等級協(xié)議(SLA),他不僅指明平均響應(yīng)時(shí)間,還要指明在一定時(shí)間內(nèi)能響應(yīng)的調(diào)用的數(shù)量(時(shí)間服務(wù)系數(shù),TSF)
服務(wù)調(diào)用的開銷
如果調(diào)用多個(gè)服務(wù)的開銷比較大,可以考慮將多個(gè)服務(wù)合并。
可重用性
如果調(diào)用多個(gè)細(xì)粒度的服務(wù)開銷比一個(gè)粗粒度服務(wù)高,那么出于性能方面的考慮,可能會(huì)導(dǎo)致粗粒度的服務(wù);
如果,處理過多的數(shù)據(jù)的代價(jià)過高,性能方面的考慮會(huì)導(dǎo)致細(xì)粒度的服務(wù)。
安全
認(rèn)證(檢驗(yàn)身份)、授權(quán)、機(jī)密性、完整性、可用性、記賬(保持消費(fèi)記錄)、審計(jì),在談及安全的上下文環(huán)境中,“AAA”通常用來指認(rèn)證、授權(quán)和記賬。
處理安全需求
處理安全不是什么新鮮事物,SOA使用的方法和分布式系統(tǒng)使用的典型方法一樣:
l 對認(rèn)證和授權(quán),通常你需要用戶ID這個(gè)概念和密碼(或者Kerberos、證書、硬件令牌)。用戶可以被授權(quán)角色,角色和權(quán)限相關(guān)
l 就機(jī)密性和完整性而言,考慮加密和數(shù)字簽名
互操作性和安全
SOA的一個(gè)關(guān)鍵概念是高互操作性。遵循EAI的概念,對其他系統(tǒng)的連接應(yīng)該簡單易行。
該方法的結(jié)果是,靠使用不同通信渠道和不同協(xié)議所形成的“自然”防火墻不存在了。所以,為了保護(hù)敏感數(shù)據(jù),我們不得不限制消費(fèi)者調(diào)用所有服務(wù)和看到所有結(jié)果的能力。
分布式過程和多層抽象
SOA導(dǎo)致的一個(gè)最嚴(yán)重的問題是,產(chǎn)生了許多不同的抽象層。當(dāng)每個(gè)服務(wù)從下層抽象出業(yè)務(wù)功能時(shí),他也必須從下層應(yīng)用中同時(shí)抽象出用戶身份的上下文環(huán)境。
從最初對業(yè)務(wù)流程的請求,到最后處理這個(gè)請求的系統(tǒng),中間有長長地一段路。這帶來了兩個(gè)重要的問題:
1.不清楚哪個(gè)系統(tǒng)在對用戶進(jìn)行認(rèn)證和授權(quán)
2.機(jī)密性不能只在一個(gè)連接上得到保證,更要在中間涉及多個(gè)節(jié)點(diǎn)的多個(gè)連接上
多客戶端能力和安全
一個(gè)分布式系統(tǒng)通常有多客戶端能力。比如一個(gè)數(shù)據(jù)處理中心管理者幾家不同的銀行數(shù)據(jù)。可能有些數(shù)據(jù)得保密,有些數(shù)據(jù)又能讓大家訪問。因此,當(dāng)涉及到多客戶端能力時(shí),可能需要執(zhí)行運(yùn)行時(shí)安全檢查。也就是說,針對特定系統(tǒng),靜態(tài)地允許或拒絕特定服務(wù)通常來說是不夠的。
實(shí)踐SOA安全
在實(shí)踐中,我們應(yīng)該考慮一下幾點(diǎn):
l 基礎(chǔ)設(shè)施沒有提供足夠的安全性
n 不要假設(shè)基礎(chǔ)設(shè)施處理安全的方式已經(jīng)很好,即使有某些支持,也必須考慮是否覆蓋了安全的所有方面(認(rèn)證(檢驗(yàn)身份)、授權(quán)、機(jī)密性、完整性、可用性、記賬(保持消費(fèi)記錄)、審計(jì))
l 處理機(jī)密性和完整性
n 傳輸層安全
在這里,可以使用基礎(chǔ)設(shè)施的底層協(xié)議來引入安全性。比如,SSL加密Web Srvice調(diào)用
雖然這個(gè)方法比較容易,代價(jià)也不高,但是他只對數(shù)據(jù)“從系統(tǒng)到系統(tǒng)”)(點(diǎn)對點(diǎn))傳輸這種情況有用。不是端對端,也就是說,在節(jié)點(diǎn)內(nèi)部,數(shù)據(jù)仍然可讀
n 消息層安全
在傳送的消息內(nèi)部引入安全。也就是說對消息加密,簽名
消息層通常更安全,因?yàn)樗麕矶说蕉说陌踩?。傳輸層僅僅是點(diǎn)對點(diǎn)安全性。
l 作為服務(wù)的安全
處理SOA安全性的最好辦法是將安全作為服務(wù)提供。
l 安全性能和狀態(tài)
n 安全又成本,加密,解密,驗(yàn)證完整性。
n 安全影響了性能,同樣,也會(huì)對服務(wù)的狀態(tài)造成影響。業(yè)務(wù)的觀點(diǎn)來看,可以說服務(wù)時(shí)無狀態(tài)的。然而,對每一個(gè)服務(wù)調(diào)用來說,必須關(guān)注調(diào)用者是否允許執(zhí)行調(diào)用和/或看到結(jié)果找到答案。
XML和Web Srvices的安全
WEB Services安全標(biāo)準(zhǔn):WS-Security、WS-Policy、WS-Trust...
基于XML的通用安全標(biāo)準(zhǔn):SAML、XACML.....
XML安全標(biāo)準(zhǔn):XML Encryption,XML Signature
通用安全標(biāo)準(zhǔn):Kerberos、PKI、X.509、SSL
安全算法:AES、DES、RSA
SAML:
由OASIS維護(hù)的安全斷言標(biāo)記語言(SAML)。SAML是基于XML的語言,負(fù)責(zé)在不同系統(tǒng)間管理和交換安全信息。他使一方能夠就一個(gè)主題做出安全信息斷言。
XML和Web Services標(biāo)準(zhǔn):
下面的這些并沒有引入新的安全技術(shù)或過程,而是定義了再通過Web Srvices,用XML文件交換數(shù)據(jù)時(shí),如何應(yīng)用現(xiàn)有的技術(shù)和過程。
對XML來說:
XML簽名:允許XML文檔被簽名,保證其數(shù)據(jù)的完整性(和真實(shí)性)
XML加密:允許XML文檔被加密。
XML密鑰管理:針對XML簽名標(biāo)準(zhǔn)支持密鑰管理
對Web Services來說:(.
NET 下實(shí)現(xiàn)Web Services安全的平臺)
WS-安全(WS-Security):針對Web Services(SOAP)的授權(quán)、完整性和私密性,定義了如何應(yīng)用不同的安全技術(shù)。它描述了一個(gè)標(biāo)準(zhǔn)的方法,用于將類似于令牌、加密、簽名、SAML、Kerberos等安全信息嵌入SOAP頭部的標(biāo)準(zhǔn)方法
WS-安全政策(WS-SecurityPolicy):
使你能夠找出一個(gè)服務(wù)供應(yīng)者要求和/或支持哪個(gè)安全標(biāo)準(zhǔn)。一個(gè)供應(yīng)者可以再WSDL/UDDI中,指定接受X.509和Kberos協(xié)議。這些都是Web Services的一部分。
WS-信任(WS-Trust):使你能發(fā)布、更新和檢驗(yàn)安全令牌
WS-安全對話(WS-SecureConversation):在對個(gè)消息交換間建立一個(gè)共享的安全上下文環(huán)境。
WS-聯(lián)盟(WS-Federation):定義了若干機(jī)制,通過允許身份、屬性和認(rèn)證的托拉斯,并且在這些托拉斯之間進(jìn)行中轉(zhuǎn),使得在不同的安全領(lǐng)域進(jìn)行集成和建立聯(lián)盟成為可能。
信息資源安全總論XML和Web Services攻擊
在所有分布式系統(tǒng)中都存在風(fēng)險(xiǎn),比如洪水(Dos)攻擊。但是,針對XML和Web Services還可能有其他類型的攻擊。
XML炸彈
XMl是一種原始遞歸語言,在某些情況下,XML解析器甚至能把非常小的XML文檔擴(kuò)展為巨大的文檔。比如下面的例子:
<?xml version="1.0"?>
<!DOCTYPE xmlbomb [
<!ELEMENT data (#PCDATA)>
<!ENTITY a "&b;&b;&b; ">
<!ENTITY b "&c;&c;&c; ">
<!ENTITY c "&d;&d;&d; ">
<!ENTITY d "foo ">
]>
<data>&a;</data>
被引用的實(shí)體a擴(kuò)展成了許多其他的實(shí)體。這導(dǎo)致了3^3,在瀏覽器中看起來可能這樣:
<data>foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo</data>
當(dāng)試圖解析擴(kuò)展為包含10000000000個(gè)foo的序列,那可能就崩潰了。這一類無法由防火墻拒絕,可以限制XML解析器或者在解析之前就發(fā)現(xiàn)這類情形。
XPath注入