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