[摘 要] 安全性和可靠性是電子商務(wù)交易中的一個(gè)重要課題,文章在分析SSL協(xié)議的基礎(chǔ)上,介紹了支持SSL協(xié)議的Java安全套接字?jǐn)U展JSSE,并利用JSSE API的功能實(shí)現(xiàn)在服務(wù)器端和客戶端上建立電子商務(wù)網(wǎng)絡(luò)應(yīng)用程序及它們之間的安全通信。
[關(guān)鍵詞] SSL JSSE 電子商務(wù) 安全通信
隨著Internet的發(fā)展,電子商務(wù)得到了廣泛應(yīng)用。由于電子商務(wù)具有降低商務(wù)活動(dòng)成本、縮短交易時(shí)間、不受時(shí)空限制等優(yōu)點(diǎn),被越來(lái)越多的企業(yè)所認(rèn)可和應(yīng)用。然而,Internet上的安全威脅如來(lái)自“黑客”(hackers)的攻擊、計(jì)算機(jī)病毒(Virus)、拒絕服務(wù)攻擊(Denial of service Attack),以及網(wǎng)絡(luò)系統(tǒng)的脆弱性和人的因素等,使得網(wǎng)上電子交易的安全性成為人們考慮的首要問(wèn)題。普通HTTP、FTP等通信協(xié)議所發(fā)送的數(shù)據(jù)并不安全,它沒(méi)有提供數(shù)據(jù)加密和客戶端及服務(wù)器端的身份驗(yàn)證等功能,數(shù)據(jù)容易在網(wǎng)絡(luò)上被截取而造成商業(yè)機(jī)密泄露??梢?jiàn),如何在網(wǎng)上保證交易的公正性和安全性,保證交易雙方身份的真實(shí)性,保證傳遞信息的完整性以及交易的不可抵賴性,便成為了電子商務(wù)發(fā)展的一個(gè)關(guān)鍵問(wèn)題,也是電子商務(wù)中非常重要的一個(gè)研究?jī)?nèi)容,本文主要探討了如何利用支持SSL安全協(xié)議的JSSE API類包,實(shí)現(xiàn)電子商務(wù)網(wǎng)絡(luò)應(yīng)用程序的安全通信。
一、SSL和JSSE API概述
在電子商務(wù)網(wǎng)上交易安全性研究中,目前已提出很多使用性強(qiáng)的協(xié)議,如SSH、PKI、SET、SSL等。其中安全套接層協(xié)議(Secure Sockets Layer,SSL)是部署最為廣泛的安全協(xié)議之一,絕大多數(shù)商業(yè)瀏覽器和服務(wù)器都在其內(nèi)部使用SSL來(lái)支持安全的web交易。SSL采用對(duì)稱密碼技術(shù)和公開(kāi)密碼技術(shù)相結(jié)合,在SSL客戶機(jī)和服務(wù)器之間通過(guò)密碼算法和密鑰的協(xié)商,建立起一個(gè)安全通道。以后在安全通道中傳輸?shù)乃行畔⒍冀?jīng)過(guò)了加密處理,網(wǎng)絡(luò)中的非法竊聽(tīng)者所獲取的信息都將是無(wú)意義的密文信息。同時(shí),SSL利用密碼算法和hash函數(shù),通過(guò)對(duì)傳輸信息特征值的提取來(lái)保證信息的完整性,確保要傳輸?shù)男畔⑷康竭_(dá)目的地,可以避免服務(wù)器和客戶機(jī)之間的信息內(nèi)容受到破壞。最后,利用證書技術(shù)和可信的第三方CA(認(rèn)證授權(quán)機(jī)構(gòu)),可以讓客戶機(jī)和服務(wù)器相互識(shí)別對(duì)方的身份。為了驗(yàn)證證書持有者是其合法用戶(而不是冒名用戶),SSL要求證書持有者在握手時(shí)相互交換數(shù)字證書,通過(guò)驗(yàn)證來(lái)保證對(duì)方身份的合法性。
SSL協(xié)議的實(shí)現(xiàn)屬于Socket層,處于應(yīng)用層和傳輸層之間,由SSL記錄協(xié)議(SSL RECORD PROTOCOL)和SSL握手協(xié)議(SSL HAND-SHAKE PROTOCOL)組成,如圖所示:
在電子商務(wù)網(wǎng)絡(luò)程序的開(kāi)發(fā)中,由于Java的跨平臺(tái)特性和安全特性而得到了廣泛使用。同時(shí),鑒于網(wǎng)絡(luò)安全性的需求,Java也提供了許多支持網(wǎng)絡(luò)安全協(xié)議的API,如Java安全性原則、Java身份驗(yàn)證和授權(quán)服務(wù)(JAAS)、Java加密擴(kuò)展(JCE)和Java安全套接字?jǐn)U展 (JSSE)。其中JSSE是主要支持SSL與TLS(傳輸層協(xié)議)網(wǎng)絡(luò)通信安全的Java API軟件包,它提供數(shù)據(jù)加密、客戶端身份驗(yàn)證、服務(wù)器端身份驗(yàn)證和消息完整性等服務(wù),并支持DES、DSA Public Key等加密算法。
二、JSSE API在電子商務(wù)中的應(yīng)用
隨著Internet信息技術(shù)的高速發(fā)展和個(gè)人、企業(yè)上網(wǎng)的迅速普及,企業(yè)WWW網(wǎng)站在商業(yè)活動(dòng)中發(fā)揮著越來(lái)越大的作用,在信息時(shí)代,建立一個(gè)功能強(qiáng)大、界面美觀的電子商務(wù)網(wǎng)站,建立電子商務(wù)系統(tǒng)平臺(tái)等,對(duì)企業(yè)的發(fā)展是至關(guān)重要的?;贘SSE API的安全性,其技術(shù)可以應(yīng)用到B2C(Business-to-Consumer,企業(yè)對(duì)客戶)、B2B(Business-to-Business,企業(yè)對(duì)企業(yè))、SCM(Supply Chain Management,供應(yīng)鏈管理)、EAI(Enterprise Application Integration,企業(yè)應(yīng)用系統(tǒng)整合)、Portal(門戶網(wǎng)站)等電子商務(wù)類活動(dòng)中。比如B2C是企業(yè)構(gòu)建B/S模式的網(wǎng)頁(yè)型網(wǎng)站,是為客戶提供通過(guò)瀏覽器進(jìn)行安全產(chǎn)品查詢、網(wǎng)絡(luò)訂單、客戶數(shù)據(jù)維護(hù)或網(wǎng)絡(luò)付款等功能。尤其是利用JSSE API來(lái)開(kāi)發(fā)支持SSL和TLS協(xié)議的HTTPS Secure Socket Web服務(wù)器。以下內(nèi)容實(shí)現(xiàn)了電子商務(wù)中利用JSSE API包的功能開(kāi)發(fā)網(wǎng)絡(luò)程序的簡(jiǎn)要過(guò)程。
1.構(gòu)建服務(wù)器端的Secure Socket
服務(wù)器端的Secure Socket構(gòu)建步驟為:
(1)利用類包javax.net.ssl.SSLServerSocketFactory的方法public abstract ServerSocket createServerSocket(int port,int backlog,InetAddress IpAddress) throws IOException建立服務(wù)器端Secure Socket和SSLServerSocket,并以此偵聽(tīng)客戶端的連接請(qǐng)求。其中參數(shù)port為端口號(hào),一般SSL通信端口號(hào)HTTPS的為443;參數(shù)backlog表示SSLServerSocket客戶端連接數(shù),默認(rèn)最大為50;參數(shù)IpAddress表示SSLServerSocket在建立時(shí),會(huì)以本機(jī)的IP地址作為服務(wù)器端Secure Socket所需使用的IP地址。
(2)當(dāng)服務(wù)器端偵聽(tīng)到來(lái)自客戶端的連接請(qǐng)求時(shí),則接收此請(qǐng)求并建立客戶端的Secure Socket。即使用SSLServerSocket的accept方法接收客戶端的連接請(qǐng)求,建立代表客戶端的SSLSocket對(duì)象。然后通過(guò)getInpuStream方法和getOutputStream方法建立服務(wù)器端與客戶端之間的輸入/輸出數(shù)據(jù)流通道,在此基礎(chǔ)上可以利用Java輸入/輸出包中的數(shù)據(jù)流類的一般方法,用read方法完成讀取從客戶端發(fā)送來(lái)的信息或用write方法發(fā)送數(shù)據(jù)至客戶端。
(3)當(dāng)服務(wù)器端程序執(zhí)行結(jié)束或客戶端結(jié)束鏈接時(shí),服務(wù)器程序調(diào)用SSLServerSocket的close方法關(guān)閉服務(wù)器端或客戶端鏈接,以便釋放資源。
2.構(gòu)建客戶端的Secure Socket
客戶端的Secure Socket構(gòu)建步驟為:
(1)利用類包javax.net.ssl.SSLSocketFactory的方法public abstract Socket createSocket(InetAddress[String] host, int port, [InetAddress clientAddress],[int clientPort]) throws IOException建立客戶端Secure Socket和SSLSocket。其中參數(shù)host表示可設(shè)置服務(wù)器端的IP地址或主機(jī)名稱。
(2)客戶端與服務(wù)器端建立連接后,客戶端向服務(wù)器端發(fā)送請(qǐng)求同時(shí)也響應(yīng)服務(wù)器端發(fā)回的處理結(jié)果??蛻舳薙ecure Socket和SSLSocket對(duì)象利用方法getInpuStream和getOutputStream建立服務(wù)器端與客戶端之間的輸入/輸出數(shù)據(jù)流通道,并可利用read方法和write方法和服務(wù)器端進(jìn)行數(shù)據(jù)交流。
(3)當(dāng)客戶端結(jié)束與服務(wù)器端的鏈接時(shí),調(diào)用SSLSocket的close方法關(guān)閉鏈接,釋放資源。
3.測(cè)試JSSE API開(kāi)發(fā)的應(yīng)用程序
由JSSE API開(kāi)發(fā)的支持SSL的Secure Socket網(wǎng)絡(luò)應(yīng)用程序,在執(zhí)行前首先要設(shè)置其類路徑CLASSPATH和Java安全性原則的Security Provider。而且在Java中測(cè)試時(shí),對(duì)于RSA公鑰的獲取可暫時(shí)利用JDK提供的keytool,在命令方式下產(chǎn)生測(cè)試用的keystore文件,形式為:c:\\>keytool –genkey –v –keyalg rsa –keystore keystore。
三、結(jié)論
本文分析了安全套接層協(xié)議SSL和對(duì)支持此協(xié)議的Java安全套接子擴(kuò)展JSSE的功能,在此基礎(chǔ)上,結(jié)合目前電子商務(wù)網(wǎng)絡(luò)應(yīng)用系統(tǒng)對(duì)安全性和可靠性的要求,用JSSE API分別實(shí)現(xiàn)了服務(wù)器端和客戶端的搭建及安全通信過(guò)程。保證客戶端認(rèn)證、數(shù)據(jù)流加密,以及對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)限制等安全功能,從而有效地防范和抵御了連接中的攻擊出現(xiàn)。
參考文獻(xiàn):
[1]陳 墾 沈 岳:JSSE在電子商務(wù)中的應(yīng)用[J].長(zhǎng)沙:湖南農(nóng)業(yè)大學(xué)學(xué)報(bào)(自然科學(xué)版),2005.31(5)
[2]Sun Microsystems.Java Secure Socket Extension(JSSE)Reference Guide[EB/OL].http://java.sun.com/j2se/1.5.0/docs/guide/security/jsse/JSSERef Guide. 2005
[3]Harvey M Deitel,Paul J Deitel,Sean E Santry.高級(jí)Java 2大學(xué)教程(英文版)[M].北京:電子工業(yè)出版社,2004
[4]林 琪 盧 昱:使用Java安全Socket擴(kuò)展包實(shí)現(xiàn)SSL[J].北京:裝備指揮技術(shù)學(xué)院學(xué)報(bào),2002.13(3)
[5]朱良鋒 李 健 劉立輝 莊俊璽:JSSE訪問(wèn)帶有未驗(yàn)證證書的HTTPS[J].北京:計(jì)算機(jī)與信息技術(shù),2005
[6]肖文凱 孫麗君 阮永良:基于JSSE的JDBC安全連接的研究與實(shí)現(xiàn)[J].北京:計(jì)算機(jī)應(yīng)用研究,2004(2)
[7]黃嘉輝:Java網(wǎng)絡(luò)程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2002