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