全立新
(湖南財(cái)政經(jīng)濟(jì)學(xué)院 信息管理系,長沙 410205)
Web服務(wù)[1]技術(shù)已成為新一代計(jì)算技術(shù)的導(dǎo)向,在電子商務(wù)、系統(tǒng)集成等多個(gè)領(lǐng)域發(fā)揮著日益重要的作業(yè)。然而作為一種新興技術(shù),Web服務(wù)面臨著許多挑戰(zhàn)。Web服務(wù)同CORBA、COM+、RMI這些分布式對(duì)象系統(tǒng)相比,在安全、事務(wù)處理能力、可管理能力等方面有所欠缺,尤其安全問題亟待解決[2]。
考察現(xiàn)有的一些安全技術(shù)[3],1)防火墻:當(dāng)用戶想要把訪問限定在一個(gè)專用網(wǎng)絡(luò)中的計(jì)算機(jī)上時(shí),則可以使用防火墻技術(shù),在一定程度上限制Web服務(wù)應(yīng)用范圍;2)SSL(Secure Sockets Layer,安全套接字層):雖然SSL可以有效的建立安全的通信,但是它會(huì)對(duì)性能造成很大的影響。3)VPN(Virtual Private Networks,虛擬專用網(wǎng)絡(luò)):VPN可在共享的或公共的網(wǎng)絡(luò)中建立一個(gè)專用的網(wǎng)絡(luò)環(huán)境,是一種端到端的連接,但需要花費(fèi)較長的時(shí)間建立連接。4)基本身份驗(yàn)證:使用明文(采用Base64編碼)直接傳送用戶名和密碼,任何人都可以查看其內(nèi)容,不太安全。5)SSL上的基本身份驗(yàn)證:這種方式在安全的SSL連接中傳送用戶名和密碼,杜絕了密碼被截獲和破解的危險(xiǎn),它是安全的。但不足在于使用SSL會(huì)降低性能。6)摘要式身份驗(yàn)證:增強(qiáng)了網(wǎng)絡(luò)發(fā)送用戶憑據(jù)的安全性。但是它依賴于HTTPI.1協(xié)議,并不是被所有的瀏覽器支持。7)集成Windows身份驗(yàn)證:這種方式是安全的。但它要求用戶和Web服務(wù)器都在同一個(gè)域中。8)客戶證書方式:這種方式使用SSL來傳送客戶證書,它需要每一個(gè)客戶都具有一個(gè)證書。由于使用SSL,所以會(huì)對(duì)性能造成影響。
綜觀上述基于基礎(chǔ)結(jié)構(gòu)、認(rèn)證和證書的安全技術(shù)都或多或少存在一些局限性,它們都依賴于操作系統(tǒng)和HTTP協(xié)議。SOAP是一種消息格式,在現(xiàn)實(shí)環(huán)境中可能要穿越多種不同的協(xié)議,為了保證消息只能被發(fā)送者和接收者閱讀,本文在結(jié)合WS-Security[4]規(guī)范基礎(chǔ)上,給出一種使用DES[5]和RSA[6]技術(shù)的Web服務(wù)安全策略。
SOAP規(guī)范允許在SOAP消息的頭消息之中傳輸SOAP消息的元數(shù)據(jù)。根據(jù)這一特性,結(jié)合WS-Security規(guī)范,給出本文基于加密技術(shù)的Web服務(wù)安全方法的原理。
具體原理是:在客戶應(yīng)用端隨機(jī)產(chǎn)生DES密鑰,在它與Web服務(wù)端之間傳遞的需加密的信息,用DES進(jìn)行加密和解密;在Web服務(wù)端隨機(jī)產(chǎn)生RSA密鑰對(duì),用公鑰來加密DES密碼,以便在Web服務(wù)端獲取客戶應(yīng)用端的DES密碼;通過定義包含Web服務(wù)端RSA公鑰、用RSA加密的客戶應(yīng)用端DES密碼和需要加密的信息的SOAP頭數(shù)據(jù)結(jié)構(gòu)(類),在Web服務(wù)端和客戶應(yīng)用端之間傳遞SAOP頭對(duì)象,實(shí)現(xiàn)信息安全傳遞過程的目的。
根據(jù)上述原理,本文給出了一種基于加密技術(shù)的Web服務(wù)安全模型,如圖1所示。
圖1 基于加密技術(shù)Web服務(wù)的安全模型
當(dāng)客戶應(yīng)用需使用Web服務(wù)時(shí),首先隨機(jī)產(chǎn)生DES密碼,其次,從Web服務(wù)端獲取SOAP頭對(duì)象(在每次獲取SOAP頭對(duì)象時(shí),Web服務(wù)端都會(huì)隨機(jī)產(chǎn)生一對(duì)RSA密鑰對(duì)),用SAOP頭對(duì)象中RSA公鑰加密DES密鑰,用DES密鑰加密需加密信息,并把這些加密信息存入SOAP頭對(duì)象中,再次,把SOAP頭對(duì)象傳遞到Web服務(wù)應(yīng)用端,用RSA私鑰解密SOAP中已加密DES密鑰,這樣,就可以在Web服務(wù)應(yīng)用端用DES密鑰解密客戶應(yīng)用傳遞加密的信息和加密需傳遞給客戶應(yīng)用的信息。
為了驗(yàn)證本文給出的安全策略,我們?cè)O(shè)計(jì)一個(gè)示例。即從客戶應(yīng)用端傳一個(gè)數(shù)據(jù),通過DES加密后傳遞到Web服務(wù)端,在Web服務(wù)端用DES解密后,然后,再用DES加密并傳遞到客戶應(yīng)用端,在客戶應(yīng)用端用DES解密后與原數(shù)據(jù)比較是否一致。在這個(gè)過程中,客戶應(yīng)用端與Web服務(wù)端之間傳遞的數(shù)據(jù)和DES密鑰是加密,且是一個(gè)來回一次密。我們用C#.net書寫代碼,用System.Security.Cryptography[5]創(chuàng)建DES和RSA密碼,關(guān)鍵代碼如下:
public class UserInfo: System.Web.Services.Protocols.SoapHeader
{public byte[] name; //加密信息
public string RSAPublicKey; //RSA公鑰public byte[] DESKey; //加密的DESKey向量public byte[] DESIV; //加密的DESIV向量}
web服務(wù)端負(fù)責(zé)隨機(jī)產(chǎn)生RSA密鑰,web服務(wù)“getUserInfo”,它的功能是解密DES密鑰、已加密數(shù)據(jù)和用DES加密要回傳給客戶端的數(shù)據(jù),關(guān)鍵代碼如下:
public UserInfo uinfo;
//產(chǎn)生RSA加密對(duì)象,也就隨機(jī)產(chǎn)生了RSA密鑰對(duì)
RSACryptoServiceProvider rsa;
uinfo.RSAPublicKey = rsa.ToXmlString(true);
[WebMethod] public string getUserInfo(UserInfo uinfo)
{…
RSACryptoServiceProvider rsa;
DESCryptoServiceProvider des;
//用XML字符串還原RDS解密對(duì)象
rsa.FromXmlString(uinfo.RSAPublicKey);
//用RSA私鑰解密頭對(duì)象中已加密DES的向量
byte[]_DESKey=rsa.Decrypt(uinfo.DESKey,false);
byte[]_DESIV=rsa.Decrypt(uinfo.DESKey,false);
//用解密的KEY和IV向量對(duì)當(dāng)前DES對(duì)象賦值
des.Key=_DESKey; des.IV=_DESIV;
//對(duì)加密信息進(jìn)行解密
ICryptoTransform ict=des.CreateDecryptor();
byte[] ret=ict.TransformFinalBlock();
demo.Service aa=new Service();
//獲取SOAP頭對(duì)象實(shí)例
demo.UserInfo uu=aa.getSOAPHeader();
//還原Web Services服務(wù)器端的RSA對(duì)象
RSACryptoServiceProvider rsa;
rsa.FromXmlString(uu.RSAPublicKey);
//定義DES加密對(duì)象,獲取DES密鑰
DESCryptoServiceProvider des;
des.GenerateKey();des.GenerateIV();
//用RSA加密DES密鑰
uu.DESKey=rsa.Encrypt(des.Key, false);
uu.DESIV=rsa.Encrypt(des.IV, false);
//用DES密鑰加密需傳輸?shù)臄?shù)據(jù)中
ICryptoTransform ict=des.CreateEncryptor();
uu.name=ict.TransformFinalBlock();
//調(diào)用Web服務(wù)并獲取返回值
aa.getUserInfo(uu);
//信息驗(yàn)證
…
我們?cè)谶@里只演示了傳遞一個(gè)需加密的數(shù)據(jù)。如果讀者要傳遞多個(gè)加密數(shù)據(jù),只需要再擴(kuò)充SOAP頭的數(shù)據(jù)結(jié)構(gòu),至于解密和加密代碼同上,受篇幅限制,不再贅述。
我們?cè)谄胀≒C機(jī),Windows XP Professional操作系統(tǒng),Visual Stdio2005開發(fā)環(huán)境,在IIS5.0服務(wù)器成功地運(yùn)行了上述案例,驗(yàn)證了本文給出的安全方案是可行和有效的。
本文給出的Web服務(wù)安全方案結(jié)合了WS—Security規(guī)范,兼容性好;在客戶應(yīng)用與Web服務(wù)之間傳遞數(shù)據(jù)時(shí),運(yùn)用了混合加密方式且一次一密,安全系數(shù)很高;同時(shí),該方案無需借用第三方組件,降低軟件的開發(fā)成本??梢哉f本文的方案是一個(gè)有效,可行,低成本的且容易實(shí)現(xiàn)的方案。
[1] Web Services[EB/OL].http://www.webservices.org/index.php/article/articleview 2010-11-12.
[2] 顧寧, 劉家茂,柴曉路.Web Services原理與研發(fā)實(shí)踐[M],北京: 機(jī)械工業(yè)出版社, 2006:155-175.
[3] 全立新.Web服務(wù)安全策略與技術(shù)探討[J], 廣州: 現(xiàn)代計(jì)算機(jī), 2010(9): 104-107.
[4] WS-Security[EB/OL]. http://www.w3.org/standards/xml/security 2010-11-21.
[5] Cryptography[EB/OL]. http://msdn.microsoft.com/library/system. security. cryptography.aspx 2010-11-21.