文松,王敏,程虹
(湖北文理學(xué)院計(jì)算機(jī)工程學(xué)院,襄陽441053)
對(duì)于企業(yè)用戶來說,使用自有電子郵件系統(tǒng)有助于提高企業(yè)信息安全水平,同時(shí)也更方便用于數(shù)據(jù)分析和對(duì)外展示良好的企業(yè)形象。James 是Apache 軟件基金會(huì)發(fā)布的開源軟件[1],提供了對(duì)基本郵件功能的支持,如POP3 協(xié)議、SMTP 協(xié)議、IMAP 協(xié)議、文件和數(shù)據(jù)庫訪問等功能[2],這種設(shè)計(jì)允許開發(fā)者能夠快速開發(fā)出功能全面的郵件程序[3],可用于作為電子郵件系統(tǒng)的郵件服務(wù)器。但James 只有郵件系統(tǒng)功能,用戶只能通過telnet 才能使用,顯然不能滿足企業(yè)需要。更重要的是,James 只實(shí)現(xiàn)了標(biāo)準(zhǔn)的郵件收發(fā)功能,郵件是明文保存,如果有黑客訪問到了郵件數(shù)據(jù),則企業(yè)機(jī)密面臨暴露的風(fēng)險(xiǎn)。為此,基于James 設(shè)計(jì)并實(shí)現(xiàn)了帶Web系統(tǒng)的加密電子郵件系統(tǒng)。
在文獻(xiàn)[4]中,提出了一種能夠應(yīng)用于互聯(lián)網(wǎng)的企業(yè)電子郵件系統(tǒng)。該系統(tǒng)實(shí)現(xiàn)了一個(gè)子系統(tǒng),并且集成在企業(yè)原有信息化系統(tǒng)中,作為一個(gè)電子郵件的組件。文獻(xiàn)[5]則采用James 郵件服務(wù)器直接部署郵件,還把常用的MySQL 數(shù)據(jù)庫替換成了Oracle 數(shù)據(jù)庫,以滿足更高性能的要求。然而這些系統(tǒng)并沒有考慮郵件加密問題。攻擊者只要對(duì)James 有一定的了解,就可以將郵件攔截下來,經(jīng)過簡(jiǎn)單的反編破解,就能獲取郵件的原文信息。針對(duì)這些問題,基于James 的安全電子郵件系統(tǒng)的主要功能包括:
(1)電子郵件服務(wù)器,支持POP3 協(xié)議、SMTP 協(xié)議、IMAP 協(xié)議;
(2)電子郵件服務(wù)器支持對(duì)數(shù)據(jù)庫和文件的訪問,用以訪問用戶和郵件;
(3)系統(tǒng)采用B/S 結(jié)構(gòu),使用瀏覽器作為郵件收發(fā)的客戶端;
(4)系統(tǒng)能夠?qū)﹄娮余]件自動(dòng)加密,黑客獲取了電子郵件之后,無法解密。
電子郵件系統(tǒng)主要包含網(wǎng)頁前端用戶操作請(qǐng)求以及后臺(tái)對(duì)用戶請(qǐng)求作出相應(yīng)的請(qǐng)求響應(yīng)服務(wù)二部分構(gòu)成。功能模塊主要分為:用戶注冊(cè)模塊、用戶登錄模塊、郵箱主界面模塊以及用戶注銷模塊四個(gè)大部分,其中用戶郵箱主界面包含用戶的所有業(yè)務(wù)邏輯流程項(xiàng)目。用戶注冊(cè)模塊包括用戶注冊(cè)功能;用戶登錄模塊包括用戶登錄功能;郵箱主界面模塊包括用戶信息、寫郵件、收件箱、草稿箱、發(fā)件箱、已刪除等功能;用戶注銷模塊主要實(shí)現(xiàn)退出郵件系統(tǒng),并清空所有用戶瀏覽信息,已標(biāo)記為刪除的郵件此時(shí)會(huì)從服務(wù)器刪除,無法恢復(fù);后臺(tái)服務(wù)主要是與瀏覽器的用戶請(qǐng)求進(jìn)行交互,處理用戶請(qǐng)求的相關(guān)業(yè)務(wù),并將處理的結(jié)果返回給用戶。系統(tǒng)主要功能模塊如圖1 所示。
圖1 系統(tǒng)主要功能模塊圖
由于James 支持MySQL 數(shù)據(jù)庫,可以在MySQL 中保存用戶、郵件等數(shù)據(jù),因此需要在MySQL 中創(chuàng)建相應(yīng)的表。但作為整個(gè)郵件系統(tǒng)而言,不應(yīng)該允許郵件使用者直接操作這些表,而且有些郵件系統(tǒng)用戶不一定會(huì)是郵件使用者,例如:系統(tǒng)管理員不應(yīng)該把自己的管理賬號(hào)直接作為郵件賬號(hào)。因此,需要建立郵件系統(tǒng)的用戶表,該表與James 所用的用戶表應(yīng)該區(qū)分開。根據(jù)這些要求,設(shè)計(jì)以下用表。
(1)郵箱用戶信息表(users)
此表為James 郵件服務(wù)器使用的表,其中字段包括:username:為用戶注冊(cè)的郵箱賬號(hào)用戶名(不包括郵箱后綴,即郵件域名);pwdHash:為用戶的密碼,此密碼為James 郵件服務(wù)器自動(dòng)加密后的;pwdAlgorithm:加密算法;useForwarding:是否啟用郵件轉(zhuǎn)發(fā);forwardDestination:郵件轉(zhuǎn)發(fā)目的地;useAlias:為是否啟用郵箱別名;alias:郵箱用戶別名。
(2)用戶基本信息表(user)
此表為用戶的基本信息表,用以注冊(cè)時(shí)填寫注冊(cè)信息,其中主要字段是username:為郵箱用戶的賬號(hào)名,既是本表的主鍵,也是users(郵箱用戶信息表)的外鍵,另外還有一些用戶個(gè)人信息。
(3)郵件詳情表(inbox)
此表也是James 郵件服務(wù)器使用的數(shù)據(jù)表,其中字段包括:message_name:為一封郵件的消息名標(biāo)識(shí),是服務(wù)器上的一個(gè)唯一標(biāo)識(shí);repository_name:源名稱,即消息來源的名稱;message_state:消息狀態(tài),即消息所處于的權(quán)限狀態(tài);error_message:錯(cuò)誤消息,在消息發(fā)送出錯(cuò)時(shí),存儲(chǔ)錯(cuò)誤信息;sender:消息發(fā)送人;recipients:消息接受人;remote_host:遠(yuǎn)程主機(jī),即郵件服務(wù)器的域名;remote_addr:遠(yuǎn)程地址,即郵件服務(wù)器的IP 地址;message_body:消息體,即整條消息的正文和附件等等主體內(nèi)容;message_attributes:消息的屬性,消息的各項(xiàng)屬性信息即存在這項(xiàng)里面;last_updated:消息的上次更新時(shí)間,在每次對(duì)郵件信息進(jìn)行修改之后,都會(huì)更新為當(dāng)前時(shí)間。
(4)郵件標(biāo)志表(mail_flag)
此表為郵件標(biāo)志表,與inbox 一起關(guān)聯(lián)查詢區(qū)分郵件中的草稿郵件、刪除郵件、已發(fā)送、已接收郵件等等。最主要的字段是message_name,為此表主鍵,也是inbox 表的外鍵,通過此鍵值相等來進(jìn)行關(guān)聯(lián)查詢,獲取相應(yīng)的查詢結(jié)果。
(5)郵件信息表(mail)
此表為后臺(tái)郵件處理的信息表,從前端接收郵件信息然后經(jīng)過后臺(tái)加密和其他的一系列處理轉(zhuǎn)化成James 郵件服務(wù)器能夠發(fā)送的郵件,或是從James 郵件服務(wù)器中查找出來郵件,然后經(jīng)過解碼得到郵件詳情存儲(chǔ)在此表中,在傳輸?shù)角芭_(tái)顯示給用戶查看。
(6)密鑰表(rsakey)
此表為算法所生成密鑰,用戶在注冊(cè)時(shí),根據(jù)用戶的用戶名自動(dòng)生成相應(yīng)的公私鑰,并存入此表。
根據(jù)系統(tǒng)中的各種業(yè)務(wù)邏輯處理,將業(yè)務(wù)層分為兩大類,一類處理用戶的基本信息,即登錄、注冊(cè)、更新個(gè)人信息等,另一大類為對(duì)用戶郵件的處理,處理郵件的收發(fā)等等各項(xiàng)復(fù)雜的操作。根據(jù)這一思維邏輯,將各項(xiàng)數(shù)據(jù)庫操作類進(jìn)行了分類整理,更加有利于代碼的分塊和測(cè)試,降低了代碼的耦合,加強(qiáng)了程序的功能模塊化。各操作接口包括:①郵箱用戶信息接口,用于操作James 郵件用戶;②系統(tǒng)用戶基本信息接口,用于操作郵件系統(tǒng)的使用者;③郵件詳情接口,用于獲取郵件信息;④郵件標(biāo)志接口,用于操作郵件標(biāo)志;⑤郵件信息接口,用于處理郵件內(nèi)容;⑥郵件復(fù)雜處理接口,如郵件收條、草稿等。
郵件加密解密過程如圖2 所示,用戶將郵件編輯完成,點(diǎn)擊發(fā)送按鈕后,后臺(tái)獲取郵件信息,使用加密算法進(jìn)行加密,然后將加密形成的密文存到郵件對(duì)象中并發(fā)送出去;解密則反過來,將密文使用加密過程中對(duì)應(yīng)的解密算法進(jìn)行解密,并將明文存入郵件,在添加到郵件集合傳到前臺(tái)顯示給用戶,這樣只有在發(fā)送給用戶瀏覽器之前才解密,攻擊者即使攻擊了郵件數(shù)據(jù)庫,獲取了郵件內(nèi)容,依然無法正常查看郵件。系統(tǒng)提供RSA 和ECC 兩種算法對(duì)郵件加密,也可以擴(kuò)展為其他密碼算法。
圖2 郵件加密及解密過程圖
在系統(tǒng)啟動(dòng)之初,由管理員選擇一種加密算法,系統(tǒng)啟動(dòng)成功后,系統(tǒng)會(huì)自動(dòng)加載該配置來初始化系統(tǒng)。具體算法流程如圖3 所示。
圖3 郵件加密算法流程圖
用戶在注冊(cè)時(shí),系統(tǒng)自動(dòng)根據(jù)用戶的口令產(chǎn)生大數(shù)種子,由此大數(shù)種子來產(chǎn)生用戶的公私鑰,將其中的公鑰保存在用戶密鑰信息表中,并將其發(fā)布出去,讓所有此系統(tǒng)的用戶知道,私鑰由此用戶私自保有,不為人知。
用戶將郵件編輯完成后,提交到后臺(tái),然后通過業(yè)務(wù)層中的sendMail 方法獲取前端傳過來的郵件對(duì)象,并將除正文以外的信息存在郵件會(huì)話中,然后從數(shù)據(jù)庫中取出用戶的公私鑰(用戶的公私鑰在用戶注冊(cè)的時(shí)候就已經(jīng)自動(dòng)生成),通過公鑰將用戶的郵件正文加密,再將其添加到郵件會(huì)話中,然后將郵件發(fā)送。
接收郵件時(shí),recipientMail 方法首先獲取James 郵件服務(wù)器中的“inbox”,從“inbox”中迭代出全部郵件,然后逐一對(duì)郵件正文進(jìn)行解密。
高效安全的電子郵件系統(tǒng)對(duì)于企業(yè)的業(yè)務(wù)開展有很重要的支持作用。為了滿足中小企業(yè)對(duì)于電子郵件系統(tǒng)的多種需求(配置簡(jiǎn)單、價(jià)格低廉、安全穩(wěn)定),基于James 的B/S 結(jié)構(gòu)安全電子郵件系統(tǒng)非常適合中小企業(yè)使用。
通過為James 設(shè)計(jì)相應(yīng)的Web 系統(tǒng),使得對(duì)于James 的命令行操作轉(zhuǎn)變?yōu)樵跒g覽器上的圖形化操作,非常簡(jiǎn)單易用。系統(tǒng)采用B/S 設(shè)計(jì)模式,Server 端主要是負(fù)責(zé)攔截用戶的請(qǐng)求,并對(duì)用戶請(qǐng)求進(jìn)行解析,作出相應(yīng)的業(yè)務(wù)處理和將處理的結(jié)果返回給瀏覽器。瀏覽器端主要是向Server 端發(fā)送請(qǐng)求和顯示Server 響應(yīng)的數(shù)據(jù)。瀏覽器端和服務(wù)器端之間交互的數(shù)據(jù)主要采用的是表單,可以一次性的將大量數(shù)據(jù)封裝傳輸?shù)椒?wù)器端,降低被攔截的風(fēng)險(xiǎn)。
在安全保密方面,使用了密碼算法對(duì)郵件進(jìn)行了加密保護(hù),使得非法用戶即使繞開Web 端入侵了服務(wù)器,獲取了服務(wù)器上的郵件,也不能正常閱讀,保護(hù)了企業(yè)秘密不致泄露,對(duì)于提高企業(yè)信息安全水平有很好的幫助。