徐進
摘要:該文提出了遠(yuǎn)程服務(wù)的數(shù)據(jù)交互應(yīng)用中面對的主要問題是安全性和通用性,再深入分析的基礎(chǔ)上提煉了一種解決這類問題的通用模型,再結(jié)合現(xiàn)有的技術(shù)條件,如采用密碼簽名技術(shù)解決安全性問題,通過配置、反射技術(shù)實現(xiàn)一個解釋引擎適應(yīng)不同業(yè)務(wù),解決通用性問題,然后實現(xiàn)了這個模型,即通用數(shù)據(jù)交互平臺,最后展現(xiàn)了數(shù)據(jù)交互平臺在多個應(yīng)用系統(tǒng)中和遠(yuǎn)程系統(tǒng)交互情況。
關(guān)鍵詞:簽名;安全;反射;httpclient;通用性
中圖分類號:TP302.1 文獻標(biāo)識碼:A 文章編號:1009-3044(2016)17-0037-04
Abstract:In this paper, the application of remote service interactive data in the face of the main problems is the safety and versatility, further in-depth analysis based on refined a general model to solve this kind of problem, combined with the existing technology, such as the use of cryptographic signature technology to solve the security problem, through the realization of an interpretation engine configuration, reflection technology adapt to different business, solve common problems, and then the model is realized, namely the general data exchange platform, finally show the data exchange platform in many application systems and remote system interaction.
Key words:Signature; security; reflection; httpclient; generality
1背景
隨著互聯(lián)網(wǎng)的發(fā)展,互聯(lián)網(wǎng)應(yīng)用系統(tǒng)越來越多,這些系統(tǒng)不光在一個企業(yè)內(nèi)部交互,其中的很多應(yīng)用需要在不同企業(yè)之間交互,例如電子商務(wù)網(wǎng)站依賴電子支付公司在線支付時,就是電子商務(wù)系統(tǒng)發(fā)送請求給異地的電子支付系統(tǒng),由其完成支付并反饋支付狀態(tài),在這個過程中電子支付系統(tǒng)提供遠(yuǎn)程Web服務(wù)[1]。遠(yuǎn)程Web服務(wù)改變了傳統(tǒng)業(yè)務(wù)模式,產(chǎn)生了巨大的應(yīng)用價值,但是遠(yuǎn)程Web服務(wù)使用互聯(lián)網(wǎng)作為通信鏈路,首先要考慮其安全風(fēng)險,在Web服務(wù)中安全風(fēng)險是多方面的,包括身份與認(rèn)證以及訪問控制等等,但Web服務(wù)中交互的數(shù)據(jù)安全需要特別關(guān)注,另外數(shù)據(jù)傳輸和數(shù)據(jù)校驗也是數(shù)據(jù)交互的主要任務(wù),同時做好這三個方面工作才能保證遠(yuǎn)程交換的數(shù)據(jù)安全正確的傳輸。
文獻[2] 提出了一種基于XML安全技術(shù)的Web服務(wù)安全通信機制,通過安全會話實現(xiàn)了高效的安全通信。文獻[3]對Web服務(wù)安全的多個方面進行了全面的闡述,例如數(shù)據(jù)安全、安全策略、攻擊與防御、訪問控制等等。文獻[4]在消息級安全的規(guī)范基礎(chǔ)上,設(shè)計了一消息安全模型。
文獻[5-6]對使用Web Service技術(shù)做數(shù)據(jù)傳輸做了詳細(xì)介紹,文獻[7]對傳輸?shù)臄?shù)據(jù)格式Json做了介紹,并且對其性能進行深入分析。文獻[8]對使用XML技術(shù)實現(xiàn)可配置組合式數(shù)據(jù)校驗做了詳細(xì)的介紹。本文首先分析了遠(yuǎn)程Web服務(wù)中,數(shù)據(jù)交互中面對的問題,并提出一種解決該問題的模型,然后實現(xiàn)該模型,最后展示了該模型被使用在不同業(yè)務(wù)場景的效果。
2數(shù)據(jù)處理模型分析和架構(gòu)
2.1分析與架構(gòu)
遠(yuǎn)程Web服務(wù)數(shù)據(jù)交互是指:請服務(wù)求方和服務(wù)方提供方通過互聯(lián)網(wǎng)進行數(shù)據(jù)交互,請求方發(fā)起數(shù)據(jù)交互請求,服務(wù)方收到請求并返回響應(yīng)給請求方。具體過程見圖1。從遠(yuǎn)程服務(wù)分析,該過程包括:數(shù)據(jù)打包和解包、數(shù)據(jù)簽名和驗簽、數(shù)據(jù)傳輸以及數(shù)據(jù)驗證,在實際應(yīng)用中每個遠(yuǎn)程服務(wù)接口都是上述服務(wù)過程,但是每個接口的數(shù)據(jù)項不同,數(shù)據(jù)打包解包內(nèi)容不同,數(shù)據(jù)項驗證規(guī)則不同。為了實現(xiàn)數(shù)據(jù)交互的通用模型,需要對變化點進行設(shè)計,通過特定技術(shù)支持變化,例如工作流引擎可以支持不同流程執(zhí)行,規(guī)則引擎可以解釋不同規(guī)則,本文面對上面的變化點采用配置思路和反射實現(xiàn)技術(shù),讓一個模型滿足不同應(yīng)用。給出其架構(gòu)模型見圖2。 2.2通用數(shù)據(jù)交互模型 通用數(shù)據(jù)交互模型是指:把數(shù)據(jù)交互從業(yè)務(wù)過程中分離出來,成為一個獨立的服務(wù)單元,實現(xiàn)數(shù)據(jù)交互的所有功能,通過配置和反射技術(shù)提供通用功能。通用數(shù)據(jù)交互模型設(shè)計首先要滿足通用性,而業(yè)務(wù)千變?nèi)f化,業(yè)務(wù)接口數(shù)據(jù)項也豐富多變,這些要求和通用性是一對矛盾。為了在不犧牲通用性的前提下解決這對矛盾,借助軟件產(chǎn)品線[9]思想,分析其變化點,即找到哪些在不同的業(yè)務(wù)和技術(shù)環(huán)境下可能變化的,哪些在不同的業(yè)務(wù)和技術(shù)環(huán)境下是不變的。針對變化點分析其變化特性,采用相應(yīng)的技術(shù)支持變化,例如可以通過配置、反射、設(shè)計模式、引擎等技術(shù)支持變化。在通用數(shù)據(jù)交互模型中,數(shù)據(jù)簽名驗簽以及數(shù)據(jù)傳輸是不隨業(yè)務(wù)變化而變化,但會能隨著技術(shù)變化;數(shù)據(jù)打包和數(shù)據(jù)驗證會隨著業(yè)務(wù)接口變化而不同。針對這些變化通過引擎技術(shù)和反射技術(shù)可以屏蔽通用數(shù)據(jù)交互模型對業(yè)務(wù)的感知。根據(jù)上述分析可以構(gòu)建出一個通用架構(gòu)模型見圖3。
3數(shù)據(jù)交互平臺設(shè)計和實現(xiàn)
根據(jù)提出通用數(shù)據(jù)交互模型,可以實現(xiàn)一個通用功能的平臺,該平臺可以應(yīng)用在遠(yuǎn)程數(shù)據(jù)交互場景中,該平臺設(shè)計實現(xiàn)主要包括:報文設(shè)計、安全設(shè)計、傳輸設(shè)計、數(shù)據(jù)處理設(shè)計。
3.1 報文設(shè)計
數(shù)據(jù)交互模型設(shè)計目標(biāo)是通過一套通用框架處理不同應(yīng)用和不同接口,每個接口數(shù)據(jù)內(nèi)容不盡相同,設(shè)計每個接口報文時需要考慮通用性和易用性,把報文組成設(shè)計成報文頭和報文體,報文頭是報文公共特性,報文頭有兩種即請求報文頭和應(yīng)答報文頭。報文頭見表1,交易代碼標(biāo)識唯一的接口,渠道代碼,標(biāo)識這個接口和哪個商戶進行交易,版本號,用戶升級報文時,新老報文兼容性問題,簽名信息用于存儲簽名數(shù)據(jù)。
3.2簽名與驗簽設(shè)計
在遠(yuǎn)程數(shù)據(jù)交互中需要確保通信雙方的數(shù)據(jù)完整性[10],即保證傳輸過程中數(shù)據(jù)沒有被修改,還要確保不可抵賴性[10]即信息是由簽名者發(fā)送,使用數(shù)字簽名機制可以保護數(shù)據(jù)不被修改。
不同的Hash結(jié)果以、相同的數(shù)據(jù)得到相同的Hash結(jié)果以及Hash運算時不可逆,Hash簽名可以保證數(shù)據(jù)完整性;DES簽名是對稱加密技術(shù),該算法要求數(shù)據(jù)接收方和發(fā)送方都持有相同的密鑰,這個技術(shù)有個缺點是密碼管理不方便以及密鑰丟失問題。RSA算法是非對稱算,加密的一方持有私鑰,解密一方是公鑰,公鑰是公開的,這種方法可以做到數(shù)據(jù)完整性和不可抵賴性,完全滿足數(shù)據(jù)交互對安全的要求。
本模型中數(shù)字簽名采用RSA算法,明文、簽名密鑰、驗證密鑰組成簽名要素,簽名密鑰是私鑰,而驗證密鑰是公開的。簽名步驟:①對報文用簽名密鑰進行簽名運算得到運算結(jié)果②把運算結(jié)果放入報文頭的簽名信息字段③接收方收到數(shù)據(jù)報文,然后對剔除簽名信息的報文進行驗簽。在文獻[12]介紹了RSA簽名算法,本文中采用SHA1WithRSA算法實現(xiàn)。簽名過程實現(xiàn)代碼如下:
3.3配置設(shè)計
配置的業(yè)務(wù)分析,為了用一套程序動態(tài)實現(xiàn)不同業(yè)務(wù)數(shù)據(jù)封包、解包和驗證,需要把業(yè)務(wù)字段信息和接口字段獨立開,另外需要動態(tài)獲取業(yè)務(wù)字段、接口字段屬性和值,還要能動態(tài)獲得接口字段的驗證規(guī)則,對字段屬性定義及驗證規(guī)則定義則是配置設(shè)計的內(nèi)容。封包過程是指,當(dāng)數(shù)據(jù)交互模型收到業(yè)務(wù)請求數(shù)據(jù),根據(jù)請求者系統(tǒng)編號和業(yè)務(wù)代碼編號,從配置庫中獲取對應(yīng)的反序列化類,然后用這個類反序列化成對象,再從配置中查找對應(yīng)的通信接口類,然后實例化通信接口類,再從配置中獲取業(yè)務(wù)對象屬性和通信接口對象屬性的映射關(guān)系,根據(jù)映射關(guān)系把業(yè)務(wù)對象數(shù)據(jù)轉(zhuǎn)入通信接口對象,最后從配置中獲取驗證規(guī)則,對通信接口對象各屬性值進行驗證。從上面的分析實體包括:業(yè)務(wù)對象、通信接口對象和驗證規(guī)則對象,業(yè)務(wù)對象屬性和通信接口對象屬性有映射關(guān)系,他們關(guān)系是多對多關(guān)系,實體關(guān)系[13]見圖4.
3.4反射設(shè)計
反射機制[14]是在運行中獲得類的屬性和方法,通過類的屬性方法執(zhí)行對應(yīng)對象的方法或者獲得對應(yīng)對象屬性的值,其作用可以提高程序的自適應(yīng)能力,提升軟件的靈活性,通過反射可以在運行時根據(jù)配置創(chuàng)建對象,也可以根據(jù)配置在運行時通過對象屬性名獲取對象屬性值,在數(shù)據(jù)打包過程中是這樣使用反射的,在數(shù)據(jù)驗證中也用到反射機制。
3.5通信設(shè)計
1) 數(shù)據(jù)傳輸格式
JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。JSON 語法是 JavaScript 對象表示語法的子集。規(guī)則包括:數(shù)據(jù)在鍵值對中、數(shù)據(jù)由逗號分隔、花括號保存對象、方括號保存數(shù)組。JSON有兩種結(jié)構(gòu):對象和數(shù)組,對象在js中表示為{key:value,key:value,...}的鍵值對的結(jié)構(gòu),數(shù)組在JSON中表示為[{"aaa","bbb"},{"ccc","ddd"}]。
JSON數(shù)據(jù)解析多個組件,但是fastjson效率高對中文字符支持好,在POM.xml文件中加入如下內(nèi)容引入fastjson。
2) 通信協(xié)議
HTTP協(xié)議(超文本傳輸協(xié)議)以明文方式傳輸數(shù)據(jù),因此不適合傳輸敏感信息。HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標(biāo)的HTTP通道。HTTPS的安全基礎(chǔ)是SSL層,SSL(Secure Sockets Layer 安全套接層)是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議。數(shù)據(jù)交換模型中采用HTTPS保證通信敏感數(shù)據(jù)不被泄密
通信框架HttpClient 是 Apache Jakarta Common 下的子項目,實現(xiàn)了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)并且支持支持 HTTPS 協(xié)議。使用中需要注意編碼符和超時時間,調(diào)用過程如圖。
3.6類設(shè)計
通用數(shù)據(jù)交互平臺通用性設(shè)計是類設(shè)計首要解決的問題,通過設(shè)計分離變化點和不變點,從而再設(shè)計出對變化點的支持。從設(shè)計模式[15]可以得到很多經(jīng)驗,例如針對接口編程,使用繼承和組合等等。結(jié)合實際,一次請求包括打包解包數(shù)據(jù)、數(shù)據(jù)驗證、簽名驗簽、傳輸、接收返回,這個過程不會變,不論在不同業(yè)務(wù)和不同接口中都是一樣,所以把這個過程封裝到一個類的公共方法中,針對數(shù)據(jù)打包和驗證根據(jù)不同業(yè)務(wù)而變化,采用引擎類實現(xiàn)。ExchangeCenter類exchage()方法實現(xiàn)總體交互,DataFactory類定義數(shù)據(jù)打包解包和驗證的接口,Transmission類實現(xiàn)數(shù)據(jù)傳輸,TransSign實現(xiàn)簽名和驗簽。
4模型應(yīng)用
5結(jié)束語
數(shù)據(jù)交互模型應(yīng)用在多個和外部外部交互的系統(tǒng)中,通過配置即可實現(xiàn)功能,一個平臺為多個系統(tǒng)服務(wù),縮短了系統(tǒng)開發(fā)周期,增強了系統(tǒng)可維護性,通過數(shù)據(jù)簽名機制保證了數(shù)據(jù)安全性,為應(yīng)用保駕護航,最后在實際應(yīng)用中產(chǎn)生很大經(jīng)濟價值。
參考文獻:
[1] 岳昆,王曉玲,周傲英. Web服務(wù)核心支撐技術(shù):研究綜述[J]. 軟件學(xué)報, 2004,15(3):428-442.
[2] 陳荻玲,懷進鵬. 一種Web服務(wù)安全通信機制的研究與實現(xiàn)[J]. 計算機研究與發(fā)展, 2004,41(4):679-688.
[3] 賀正求,吳禮發(fā),洪征, 等. Web服務(wù)安全問題研究[J]. 計算機科學(xué),2010,37(8):32-39.
[4] 湯衛(wèi)東,周永權(quán).Web服務(wù)消息級安全模型的設(shè)計及評價[J]. 計算機工程與設(shè)計, 2006,27(10):1873-1875.
[5] 王慧. 移動校園系統(tǒng)數(shù)據(jù)傳輸關(guān)鍵技術(shù)研究與實現(xiàn)[D]. 青島: 中國海洋大學(xué), 2014.
[6] 李良. 基于WebServices異構(gòu)系[D]. 重慶: 重慶大學(xué), 2008.
[7] 高靜,段會川.JSON數(shù)據(jù)傳輸效率研究[J]. 計算機工程與設(shè)計, 2011,32(7):2267-2270.
[8] 林霞,申端明, 時迎, 等.可配置組合式數(shù)據(jù)校驗方法[J]. 計算機系統(tǒng)應(yīng)用 2015,24(15):161-165.
[9] Colin Atkinson. 基于構(gòu)件的產(chǎn)品線工程UML方法[M]. 顧劍,鐘鳴,束堯,等, 譯. 北京: 機械出版社,中信出版社, 2005: 22-52.
[10] Christopher Steel, Ramesh Nagappan, Ray Lai. 安全模式[M]. 陳秋萍,羅鄧,袁國忠, 等, 譯.北京: 機械工業(yè)出版社, 2006: 165-166.
[11] 李克洪,王大玲,董曉梅.實用密碼學(xué)與計算機數(shù)據(jù)安全[M].沈陽: 東北大學(xué)出版社, 2001: 24-30.
[12] 李麗新,袁燁. 網(wǎng)絡(luò)安全通訊中的數(shù)字簽名[J]. 現(xiàn)代情報, 2007(8):53-56.
[13] Stephens R K,Plew R R. 數(shù)據(jù)庫設(shè)計[M]. 何玉潔,武欣,鄧一凡, 等, 譯.北京:機械工業(yè)出版社, 2001: 103-112.
[14] 孫巍,徐學(xué)東,徐學(xué)軍.Java反射機制在可重構(gòu)Web框架中的應(yīng)用[J]. 計算機工程與應(yīng)用, 2005 (36):92-94.
[15](美)Erich Gamma Richand Helm Ralph Johnson etc, 著,李英軍,馬曉星,蔡敏, 等, 譯.設(shè)計模式[M]. 北京: 機械工業(yè)出版社, 2000: 10-15.