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