摘要:論述了工作流引擎在企業(yè)資源規(guī)劃(ERP)系統(tǒng)中的主要功能后,為了能解決工作流運(yùn)行過程中可能遇到的網(wǎng)絡(luò)安全#65380;法律效力等問題,提出了結(jié)合數(shù)字證書與數(shù)字簽名技術(shù)的B/S解決方案,并結(jié)合Java授權(quán)與認(rèn)證服務(wù)(Java Authentication and Authorization Service,JAAS)保證了工作流引擎更加安全可靠地運(yùn)行#65377;
關(guān)鍵詞:工作流引擎; 數(shù)字證書; 數(shù)字簽名; 信息安全; 企業(yè)資源規(guī)劃
中圖分類號:TP309.2文獻(xiàn)標(biāo)志碼:A
文章編號:10013695(2007)04013003
0引言
工作流引擎在現(xiàn)代企業(yè)運(yùn)作與ERP中起著重要的作用#65377;1993年工作流管理聯(lián)盟(WfMC)成立并將工作流定義為:工作流是一類能夠完全或者部分自動執(zhí)行的經(jīng)營過程;它根據(jù)一系列過程規(guī)則#65380;文檔#65380;信息或任務(wù)能夠在不同的執(zhí)行者之間進(jìn)行傳遞與執(zhí)行#65377;對企業(yè)而言則可簡單概括為各種業(yè)務(wù)實(shí)施的程序流程#65377;具體體現(xiàn)為企業(yè)的各種報表#65380;單據(jù)等有效文件從制作#65380;填寫數(shù)據(jù)#65380;審核#65380;審批至最后生效的全過程#65377;工作流中的不同活動稱為流程節(jié)點(diǎn),如制單#65380;審批等#65377;
工作流引擎是ERP系統(tǒng)中業(yè)務(wù)流程正常運(yùn)轉(zhuǎn)的內(nèi)核,是一套保障業(yè)務(wù)數(shù)據(jù)完整無誤地在不同執(zhí)行者之間傳遞和執(zhí)行的機(jī)制#65377;其主要功能可概括為:工作流程的定義#65380;解釋和維護(hù),流程節(jié)點(diǎn)的定義及維護(hù),對每一個節(jié)點(diǎn)數(shù)據(jù)進(jìn)行維護(hù),進(jìn)一步對流程的運(yùn)行狀況進(jìn)行全局掌控和管理,包括流轉(zhuǎn)#65380;回退#65380;撤銷及凍結(jié)等#65377;
將企業(yè)中普遍使用的物資出庫單據(jù)經(jīng)工作流引擎驅(qū)動#65377;其流轉(zhuǎn)過程如圖1所示#65377;
在傳統(tǒng)生產(chǎn)過程中,流程的每一步都經(jīng)過相關(guān)負(fù)責(zé)人在紙質(zhì)單據(jù)上的親筆簽名或蓋章,簽名者會確保單據(jù)數(shù)據(jù)的正確性#65380;有效性并對之負(fù)責(zé),具有法律效力#65377;
建立基于網(wǎng)絡(luò)與B/S多層結(jié)構(gòu)的ERP信息系統(tǒng)是對傳統(tǒng)工作流的挑戰(zhàn)#65377;隨著信息與網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,企業(yè)建立Intranet并與Internet互連,使得企業(yè)內(nèi)部各子公司#65380;部門之間,企業(yè)與企業(yè)之間的業(yè)務(wù)聯(lián)系與需求擴(kuò)張更加快捷,大大提高了生產(chǎn)效率#65377;
為提高市場競爭力,越來越多的企業(yè)應(yīng)用PC與網(wǎng)絡(luò)技術(shù)實(shí)現(xiàn)了無紙化與網(wǎng)絡(luò)辦公#65377;工作流引擎技術(shù)已成為網(wǎng)絡(luò)化辦公的平臺與保障#65377;然而,網(wǎng)絡(luò)辦公中數(shù)據(jù)的安全#65380;完整性與流程節(jié)點(diǎn)簽名的法律效力等問題突現(xiàn)而出,開發(fā)實(shí)用和穩(wěn)固的ERP系統(tǒng)勢必確保工作流引擎中的單據(jù)同樣具有法律效力#65377;
1工作流引擎技術(shù)的安全問題
網(wǎng)絡(luò)中流轉(zhuǎn)的單據(jù)要具有法律效力,等同于兩個條件的成立:①單據(jù)數(shù)據(jù)在流程各節(jié)點(diǎn)的正確性與有效性;②簽名人對其簽名行為的不可抵賴性與不可替代性#65377;
11單據(jù)數(shù)據(jù)的正確性與有效性
從庫存提取物資時,物資的名稱#65380;規(guī)格型號#65380;數(shù)量#65380;單價#65380;金額及時間等數(shù)據(jù)形成了物資出庫單據(jù)#65377;ERP系統(tǒng)必須保證單據(jù)中的數(shù)據(jù)在工作流各節(jié)點(diǎn)處一致,簽名者對其看到的數(shù)據(jù)正確性與有效性確認(rèn)后,方可簽名#65377;由于軟/硬件設(shè)施或網(wǎng)絡(luò)故障甚至人為的惡意竄改均會導(dǎo)致數(shù)據(jù)失真,錯誤的數(shù)據(jù)將給企業(yè)帶來災(zāi)難性的損失#65377;然而,上述現(xiàn)象又往往無法避免,那么企業(yè)的ERP系統(tǒng)就必須具有判斷出數(shù)據(jù)竄改#65380;中止流程流轉(zhuǎn)并恢復(fù)原有正確數(shù)據(jù)的能力#65377;
1.2簽名人對其簽名行為的不可抵賴性與不可替代性
工作流節(jié)點(diǎn)代表一項業(yè)務(wù)活動,各節(jié)點(diǎn)經(jīng)辦人的簽名應(yīng)具有不可抵賴性和不可替代性#65377;查看流程流轉(zhuǎn)的過程首先由領(lǐng)料人填寫單據(jù)數(shù)據(jù)并簽名;接著單據(jù)流轉(zhuǎn)到審核節(jié)點(diǎn),審核人確認(rèn)單據(jù)數(shù)據(jù)正確有效后簽名,應(yīng)該卻也只能對他當(dāng)前看到的數(shù)據(jù)負(fù)責(zé)#65377;這是由于單據(jù)在網(wǎng)絡(luò)中從制單節(jié)點(diǎn)流轉(zhuǎn)到審核節(jié)點(diǎn)時,其數(shù)據(jù)可能已部分丟失或在數(shù)據(jù)庫層面被人為竄改;甚至簽名人抵賴其簽名行為#65377;那么,數(shù)據(jù)前后不一致又該追究誰的責(zé)任?網(wǎng)絡(luò)上經(jīng)辦人的簽名怎樣才能不可抵賴,同時又不可替代?
2解決方案
將數(shù)字證書與數(shù)字簽名技術(shù)與工作流引擎結(jié)合,能夠很好地解決上述問題#65377;為方便闡述,下面將使用A代表數(shù)據(jù)(報文)發(fā)送方,B代表接收方,CA(Certificate Authority)代表證書頒發(fā)機(jī)構(gòu)#65377;
2.1消息摘要
給定字符串的消息摘要被定義為唯一能與之對應(yīng)的值,即該給定字符串(數(shù)據(jù)或報文)與其消息摘要之間是一對一的關(guān)系#65377;能夠?qū)崿F(xiàn)這一功能的算法稱為消息摘要算法#65377;目前在Internet上廣泛使用的有MD5與SHA1#65377;它們是單向的Hash加密函數(shù),任意長度的報文均求得固定長度的消息摘要,如MD5算法產(chǎn)生16個字節(jié)(128位)的摘要,SHA1算法產(chǎn)生20個字節(jié)(160位)的摘要#65377;
正是由于摘要算法的不可逆性以及報文與其摘要的唯一對應(yīng)關(guān)系,它可以被利用來保證數(shù)據(jù)在網(wǎng)絡(luò)傳輸過程中的完整性#65377;實(shí)現(xiàn)過程為:A在傳送報文之前先求出其消息摘要a,并將它與報文一同傳送;B收到報文后求出消息摘要b,對比前后兩次摘要即可判斷出數(shù)據(jù)是否完整無誤#65377;
但是,這樣直接傳輸報文和消息摘要存在極大的安全隱患——數(shù)據(jù)可能在傳輸過程中被攔截并傳給B另一套匹配的數(shù)據(jù)與摘要#65377;嚴(yán)格說來對比消息摘要只能保證數(shù)據(jù)的完整性,而無法保證數(shù)據(jù)的真實(shí)性,即數(shù)據(jù)是否來自于A#65377;數(shù)字簽名技術(shù)可以解決這個問題#65377;
2.2數(shù)字簽名
數(shù)字簽名是一種加密技術(shù)#65377;Internet上廣泛使用RSA非對稱加密算法并結(jié)合消息摘要來實(shí)現(xiàn)數(shù)字簽名#65377;此算法產(chǎn)生一對配對的密鑰,由于公鑰和私鑰的數(shù)學(xué)邏輯,使用其中一個密鑰加密數(shù)據(jù)只能用另一個解開#65377;私鑰由A自己保管,其配對的公鑰則由接收方保管#65377;A用私鑰加密消息摘要后傳給B,B只有用A的公鑰才能解開密文,也就確定消息必然來自于A#65377;這樣既保證了數(shù)據(jù)的完整又讓A的簽名不可抵賴#65380;不可替代#65377;
然而,僅僅是運(yùn)用數(shù)字簽名技術(shù)仍然有安全漏洞#65377;如果A將其公鑰通過網(wǎng)絡(luò)傳給B,中途被第三方C截獲,C用其私鑰把報文摘要加密并連同C的公鑰傳給B,將導(dǎo)致B誤認(rèn)為得到的是A的公鑰和數(shù)據(jù),由于解密過程無誤而掉入陷阱#65377;數(shù)字證書將解決這一問題#65377;
2.3數(shù)字證書
數(shù)字證書是用戶在網(wǎng)絡(luò)中的身份象征#65377;A的個人證書是證書頒發(fā)機(jī)構(gòu)對其密鑰#65380;個人信息及CA機(jī)構(gòu)信息用CA的私鑰加密后得到的文件,A身份的真實(shí)性由CA擔(dān)保#65377;B用CA公開的根證書(其中包括CA的公鑰)來校驗A的個人證書,從中獲取并核對A的信息,從而確定數(shù)據(jù)發(fā)送方的身份#65377;最后,再用A的個人證書中的公鑰對密文解密,進(jìn)一步校驗數(shù)據(jù)的完整性#65377;
至此,建立數(shù)據(jù)在工作流中安全流轉(zhuǎn)的過程如圖2所示#65377;
(1)發(fā)送方A向CA機(jī)構(gòu)遞交證書申請,獲得個人證書;
(2)A將報文用MD5或SHA1算法求得消息摘要a;
(3)A用其個人證書中的私鑰對消息摘要進(jìn)行數(shù)字簽名,得到簽名密文;
(4)A將報文#65380;密文(數(shù)字簽名)通過網(wǎng)絡(luò)傳輸?shù)浇邮辗紹;
(5)B通過CA根證書校驗A個人證書的身份合法性與時間有效性,合法則進(jìn)一步校驗數(shù)據(jù);
(6)B求出報文的消息摘要b;
(7)B用A的證書中的公鑰對密文解密,得到消息摘要a;
(8)比較消息摘要a和消息摘要b來確定報文數(shù)據(jù)的完整性;
(9)數(shù)據(jù)真實(shí)且完整,即得到可靠數(shù)據(jù)#65377;
3具體實(shí)施
首先使用Java開發(fā)了B/S的ERP信息管理系統(tǒng)#65377;其核心包含角色與授權(quán)控制#65380;單據(jù)制作與工作流引擎,再結(jié)合AIAK控件#65380;Microsoft的Crypto API及CAPICOM控件,融入數(shù)字證書及簽名技術(shù)#65377;所有校驗工作均在服務(wù)器端實(shí)現(xiàn),使系統(tǒng)能及時準(zhǔn)確地檢測到客戶端和數(shù)據(jù)庫端的數(shù)據(jù)變化#65377;
從領(lǐng)料人填寫出庫單到單據(jù)生效并領(lǐng)走物資,其規(guī)格#65380;單位#65380;數(shù)量及金額等數(shù)據(jù)至關(guān)重要,必須通過系統(tǒng)的安全控制來杜絕循私舞弊的行為#65377;用數(shù)字證書及數(shù)字簽名技術(shù)跟蹤工作流的每一個節(jié)點(diǎn)#65377;如有數(shù)據(jù)竄改的情況發(fā)生,就可以及時準(zhǔn)確地查出弄虛作假者,依法處理#65377;同時,工作流引擎提供回退功能,確保當(dāng)出現(xiàn)錯誤數(shù)據(jù)時立即進(jìn)行事務(wù)回滾,并將流程節(jié)點(diǎn)回退到有效狀況,準(zhǔn)備新的流轉(zhuǎn)#65377;
實(shí)現(xiàn)的關(guān)鍵步驟及代碼如下:
(1)提取單據(jù)中的有效數(shù)據(jù)并求出其消息摘要a#65377;
①在JSP頁面中加載MS的CAPICOM控件