web service安全

Web service目前被SOA所廣泛採用。從目前Web Service的應用來看,Web Service技術確實具有某些顯著的優點,已成爲當前分佈式技術的重要代表。

Web Service的一個顯著特點就是Loose Coupling。服務的可發現性,平臺無關性,接口的自描述性構成了Web Service的這一重要特點。而正是由於這個特點,Web Service被廣泛的用於企業信息集成,其中既包括了企業內部的信息集成(不同部門的信息集成,遺留系統與新系統的信息集成),也包括了企業與企業之間的信息集成。同樣也是由於這個特點,使得通過服務與服務的組合而構成新的應用變得更加簡單,也更加可行,這也是SOA中廣泛使用Web Service的原因。

在考慮企業應用的時候,一個不得不關注的問題就是安全。而Web Service的諸多優點反而使得安全問題變得比以往任何時候都更具挑戰性。由於Web Service被廣泛的運用於企業間的交互,使得安全邊界由Intranet擴大到了Internet,安全的風險也自然大大增加;SOA中服務組合的思想,使得Web Service應用更具動態性,服務的創建者往往無法預料到服務將在何種環境下(比如使用何種安全認證方式)被使用,在這種情況下要想實現服務的安全訪問變的更加複雜;同時由於Web Service使用的是基於XML的,具有自描述能力的消息(在面向消息的方式中,消息甚至就是業務實體)進行通訊,那麼如何保證消息的安全性也成爲了Web Service安全中需要重視的問題。

在我們考慮安全問題的時候,有三個概念是最爲基礎的:Confidentiality(機密性), Integrity(完整性), Authentication(身份鑑別)

Confidentiality: 機密性。 除了特定的接受者,別人無法查看消息的內容。使用Key(對稱,非對稱)來加密消息,從而保證消息的confidentiality

Integrity: 完整性。 保證消息在傳輸的過程中沒有被修改。即消息的接受者所持有的消息與消息的發送者完全一致。對消息做摘要(Digest)後,再使用Key(對稱,非對稱)來加密摘要,從而保證消息的Integrity

Authentication: 身份鑑別。確定消息的發送者的身份與消息中所聲稱的用戶身份一致。最簡單的做法就是讓用戶同時發送用戶名和密碼,接受方確認密碼的有效性從而判斷該用戶身份是否與用戶名所代表的一致。然而在實際的應用中通常沒有這麼簡單,往往使用Key對一段信息加密,接受方解密此信息,從而確認身份。比如在Kerberos協議中,使用對稱密鑰加密用戶身份信息,加密後的信息稱爲(Authenticator),服務方通過解密此消息將身份與Ticket中的身份相比較以確認發送方身份。同樣經過私鑰(非對稱密鑰)加密的消息摘要(數字簽名)也可以用於消息發送方的身份鑑別。

 

     
   Note    從上面的描述我們可以看到對稱,非對稱密鑰往往同時出現。比如在Confidentiality中,我們可以使用任何一個來加密消息。而在Integrity中,他們也都可以用於加密摘要。那麼一個有趣的問題,我們怎麼確定使用那個呢?

由於對稱密鑰的加密解密速度比非對稱密鑰快很多(大約有1000) 所以在加密消息的時候一般都是使用的對稱密鑰。但是有一個問題就是對稱密鑰又如何發佈呢?網絡上兩個沒有聯繫的用戶如何建立起一個共享的密鑰?這時就需要PKI來幫助我們將這個共享的密鑰建立起來---即利用非對稱密鑰中的公鑰來加密那個共享密鑰,傳遞到私鑰的擁有方。由此我們得到結論---對稱密鑰加密普通信息,非對稱密鑰加密對稱密鑰。

Integrity中,使用非對稱密鑰的私鑰加密摘要,得到的東西是一個廣爲人知的東西—Digital Signature(數字簽名). 而使用對稱密鑰加密摘要得到的是HMAC(Hash message authentication codes)。他們在保證消息完整性的同時,都具有身份鑑別的功能,不過前者還有一個功能---抗否認性,而這點在電子商務中往往是不可豁缺的,所以大家對前者更加熟悉。

最後提醒大家注意,在Confidentiality中,使用非對稱密鑰方法是用公鑰加密,私鑰解密,而在Integrity中使用非對稱密鑰的方法恰恰相反。


   

Web Service已經被廣泛的採用,那麼現在Web Service的安全問題是如何處理?在沒有運用WS-Security之前,主要是通過Https提供的運輸層的安全來確保的運行在此之上Web Service的安全的。

從之前對安全技術的介紹可以看出,要想實現Web Service的安全,最重要的就是讓服務請求方和服務提供方能夠共享一個祕密(對稱密鑰). 有了對稱密鑰就可以用它加密,從而保證消息的機密性(Confidentiality), 也可以利用它來加密摘要從而保證消息的Integrity,並用於身份鑑別,這點從KerberosSSL協議中都可以看出。在Kerberos協議中,我們通過引入一個第三方(KDC)來實現密鑰的發佈。初始時Service Requestor(R)KDC(K)之間享有一個密鑰,KDC(K)Service Provider(P)之間享有一個密鑰。而後K產生RP之間的session key, 分別通過它和RP的密鑰加密後傳給它們,這樣RP各自解密後之間就安全的擁有了他們共同的密鑰(K產生的session key)。而SSL則是利用PKI的公鑰技術來實現密鑰的傳遞,R先向P打聲招呼,然後P把自己的證書(Certificate: 包含用戶名和該用戶的公鑰,並由CA簽名)發送給RR產生他們之間的密鑰,然後用證書中P的公鑰將密鑰加密後傳遞給P,這樣RP之間就安全的擁有了一個密鑰。HttpsWeb Service安全的保障就是通過這個密鑰來實現了(最常被用於加密的就是我們的密碼)看上去SSL似乎顯得比較簡單,不過這是基於PKI才得以實現的,而PKI卻是一個很複雜的安全基礎設施。而Kerberos由於初始時的前提條件,使得它的應用往往侷限於某個組織內部的網絡。

 

雖然目前Web Service廣泛採用Https來保障安全,但是該方法也有很多的缺點,尤其是應用於現在越來越複雜的Web Service安全需求。

1.                       Https提供的是點對點安全保護,而Web Service的特點就是消息往往就要經過多箇中介才能到達最終的服務提供方,每個中介還有可能對消息做出些處理,也就是說它需要的是端到端的保護。這顯然是Https所不能提供的。

2.                       Https是在傳輸層提供的安全,而不是在消息層面,也就是隻有在傳輸的過程中才有消息纔是安全的(加密的),而一旦到達了終點就是明文的了。比如可以從消息隊列中將重要的信息竊取出來。

3.                       Https的建立完共享密鑰後,傳遞消息的時候並沒有使用數字簽名技術,所以也就無法得到抗否認性的能力。而這又是在電子商務中不可豁缺的。

4.                       由於Https提供的是傳輸層的安全,當然也就不可能達到消息安全所需要的靈活性的要求。比如加密消息中的部分元素;用不同的密鑰加密消息的不同部分,從而讓不同的消息接受者查看與之對應的信息。

 

因此,爲了適應Web Service對安全的特殊要求,IBMMS等公司共同制定了WS-Security規範。重新回顧安全問題的三個概念:Confidentiality(機密性), Integrity(完整性), Authentication(身份鑑別),在Web Service使用SOAPXML 格式)作爲消息傳輸協議的背景下,分別產生了XML Digital SignatureXML EncryptionSAML(XML格式的Security Token), WS-Security則是如何將他們組合起來以滿足Web Service安全需求的一套規範。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章