WebLogic服務(wù)器對Web安全驗證的技術(shù)支持(第4部分)
楊教授工作室 精心創(chuàng)作的優(yōu)秀程序員 職業(yè)提升必讀系列資料1.1 WebLogic 服務(wù)器對Web 安全驗證的技術(shù)支持(第4部分)1.1.1 與SSL 相關(guān)的應(yīng)用技術(shù)1、電子商務(wù)安全的六項中心內(nèi)容(1)
楊教授工作室 精心創(chuàng)作的優(yōu)秀程序員 職業(yè)提升必讀系列資料
1.1 WebLogic 服務(wù)器對Web 安全驗證的技術(shù)支持(第4部分)
1.1.1 與SSL 相關(guān)的應(yīng)用技術(shù)
1、電子商務(wù)安全的六項中心內(nèi)容
(1)商務(wù)數(shù)據(jù)的機(jī)密性或稱保密性
指信息在網(wǎng)絡(luò)上傳送或存儲的過程中不被他人竊取,不被泄露或披露給未經(jīng)授權(quán)的人或組織,或者經(jīng)過加密偽裝后,使未經(jīng)授權(quán)者無法了解其內(nèi)容。
(2)商務(wù)數(shù)據(jù)的完整性或稱正確性
保護(hù)數(shù)據(jù)不被未經(jīng)授權(quán)者修改,建立,嵌入,刪除,重復(fù)傳送或由于其他原因使原始數(shù)據(jù)被更改。
(3)商務(wù)對象的認(rèn)證性
指網(wǎng)絡(luò)兩端的使用者在溝通之前相互確認(rèn)對方的身份。
(4)商務(wù)服務(wù)的不可否認(rèn)性
指信息的發(fā)送方面不能否認(rèn)已發(fā)送的信息,接收方不能否認(rèn)已收到的信息,這是一種法津有效性要求。
(5)商務(wù)服務(wù)的不可拒絕性或稱可用性
保證授權(quán)用戶在正常訪問信息和資源時不被拒絕,即保證為用戶提供穩(wěn)定的服務(wù)。
(6)訪問的控制性
指在網(wǎng)絡(luò)上限制和控制通信鏈路對主機(jī)系統(tǒng)和應(yīng)用的訪問:用于保護(hù)計算機(jī)系統(tǒng)的資源(信息,計算和通信資源)不被未經(jīng)授權(quán)人或以未經(jīng)授權(quán)方式接入,使用,修改,發(fā)出指令或植入程序等。
2、當(dāng)前通用的解決方案——SSL 協(xié)議
(1)SSL 協(xié)議的產(chǎn)生
它是 Netscape 公司在 1994 年開發(fā)出來的,以允許客戶端 (典型的如瀏覽器) 和 HTTP 服務(wù)器之間能通過安全的連接來通信。它加密、來源驗證、數(shù)據(jù)完整性等支持,以保護(hù)在不安全的公眾網(wǎng)絡(luò)上交換的數(shù)據(jù)。
在整個網(wǎng)絡(luò)體系結(jié)構(gòu)中,它處于傳送層之上,應(yīng)用層之下,因此可以作為應(yīng)用層軟件的
1 楊教授工作室,版權(quán)所有,盜版必究, 1/8頁
,楊教授工作室 精心創(chuàng)作的優(yōu)秀程序員 職業(yè)提升必讀系列資料
底層網(wǎng)絡(luò)協(xié)議,實現(xiàn)其應(yīng)用(如HTTP, Telnet, FTP)的安全性。
(2)SSL 工作原理
SSL 協(xié)議使用不對稱加密技術(shù)實現(xiàn)會話雙方之間信息的安全傳遞。可以實現(xiàn)信息傳遞的保密性、完整性,并且會話雙方能鑒別對方身份。不同于常用的http 協(xié)議,我們在與網(wǎng)站建立SSL 安全連接時使用https 協(xié)議。
(3)SSL 和 TCP/IP 協(xié)議的層次
SSL 是名符其實的安全套接層。它的連接動作和 TCP 的連接類似,因此,我們可以想象 SSL 連接就是安全的 TCP 連接,因為在協(xié)議層次圖中 SSL 的位置正好在 TCP 之上而在應(yīng)用層之下。
(4)SSL 提供3 種基本安全服務(wù)
1) 信息私密:通過使用公開密鑰和對稱密鑰技術(shù)達(dá)到信息私密。
2) 信息完整性:SSL 利用機(jī)密共享和HASH 函數(shù)數(shù)組提供信息完整性服務(wù)。
3) 相互認(rèn)證:即客戶機(jī)和服務(wù)器相互驗證對方數(shù)字證書的過程。
因此,利用SSL 能夠滿足我們前面的信息傳輸?shù)陌踩枨蟆?/p>
(5)SSL 協(xié)議相關(guān)知識
SSL 由兩個共同工作的協(xié)議組成:"SSL 記錄協(xié)議" (SSL Record Protocol )和"SSL 握手協(xié)議" (SSL Handshake Protocol)。
1) SSL 記錄協(xié)議:建立在可靠的傳輸協(xié)議(如TCP )之上,為高層協(xié)議提供數(shù)據(jù)封裝、
壓縮、加密等基本功能的支持;
2) SSL 握手協(xié)議:建立在SSL 記錄協(xié)議之上,用于在實際的數(shù)據(jù)傳輸開始前,通信雙
方進(jìn)行身份認(rèn)證、協(xié)商加密算法、交換加密密鑰等。
3、SSL 握手協(xié)議
2 楊教授工作室,版權(quán)所有,盜版必究, 2/8頁
,楊教授工作室 精心創(chuàng)作的優(yōu)秀程序員 職業(yè)提升必讀系列資料
(1)SSL 握手協(xié)議包含兩個階段
● 第一階段是通信的初始化階段---用于建立私密性通信信道
在此階段,首先SSL 要求服務(wù)器向瀏覽器出示證書;然后瀏覽器中的SSL 軟件發(fā)給服務(wù)器一個隨機(jī)產(chǎn)生的傳輸密鑰,此密鑰由已驗證過的公鑰加密,隨機(jī)產(chǎn)生的傳輸密鑰是核心機(jī)密,只有客戶的瀏覽器和此公司的Web 服務(wù)器知道這個數(shù)字序列。
● 第二階段的主要任務(wù)是對客戶進(jìn)行認(rèn)證---用于客戶認(rèn)證
此時服務(wù)器已經(jīng)被認(rèn)證了。服務(wù)器方向客戶發(fā)出認(rèn)證請求消息??蛻羰盏椒?wù)器方的認(rèn)證請求消息后,發(fā)出自己的證書,并且監(jiān)聽對方回送的認(rèn)證結(jié)果。而當(dāng)服務(wù)器收到客戶的證書后,給客戶回送認(rèn)證成功消息,否則返回錯誤消息。到此為止,握手協(xié)議全部結(jié)束。
(2)SSL “握手”過程中的信息交換順序
下面的消息的意思如下:
1) ClientHello :用戶瀏覽器將其SSL 版本號、加密設(shè)置參數(shù)、與session 有關(guān)的數(shù)據(jù)以
及其它一些必要信息發(fā)送到服務(wù)器。
2) ServerHello :服務(wù)器將其SSL 版本號、加密設(shè)置參數(shù)、與session 有關(guān)的數(shù)據(jù)以及其
它一些必要信息發(fā)送給瀏覽器。
3) Certificate :同時發(fā)給瀏覽器的還有服務(wù)器的證書(換句話說,證書用于向客戶端確
認(rèn)服務(wù)器的身分)。
4) Certificate Request: 這個消息僅在服務(wù)器請求客戶端驗證它自身的時候發(fā)送(如果配
置服務(wù)器的SSL 需要驗證用戶身份,還要發(fā)出請求要求瀏覽器提供用戶證書)。多數(shù)電子商務(wù)應(yīng)用不需要客戶端對自身進(jìn)行。
5) Server Key Exchange:如果證書包含了服務(wù)器的公鑰不足以進(jìn)行密匙交換,則發(fā)送該
消息。
6) ServerHelloDone :這個消息通知客戶端,服務(wù)器已經(jīng)完成了交流過程的初始化。
7) Certificate :僅當(dāng)服務(wù)器請求客戶端對自己進(jìn)行驗證的時候發(fā)送。
8) Client Key Exchage :客戶端產(chǎn)生一個密匙與服務(wù)器共享。如果使用
Rivest-Shamir-Adelman (RSA) 加密算法,客戶端將使用服務(wù)器的公鑰將密匙加密之后再發(fā)送給服務(wù)器。服務(wù)器使用自己的私鑰或者密鑰對消息進(jìn)行解密以得到共享的密匙?,F(xiàn)在,客戶端和服務(wù)器共享著一個已經(jīng)安全分發(fā)的密匙。
9) Certificate Verify:如果服務(wù)器請求驗證客戶端,這個消息允許服務(wù)器完成驗證過程。
3 楊教授工作室,版權(quán)所有,盜版必究, 3/8頁
,楊教授工作室 精心創(chuàng)作的優(yōu)秀程序員 職業(yè)提升必讀系列資料
10) Change Cipher Spec:客戶端要求服務(wù)器使用加密模式。
11) Finished :客戶端告訴服務(wù)器它已經(jīng)準(zhǔn)備好安全通信了。
12) Change Cipher Spec:服務(wù)器要求客戶端使用加密模式。
13) Finished :服務(wù)器告訴客戶端它已經(jīng)準(zhǔn)備好安全通信了。這是 SSL “握手”結(jié)果的標(biāo)
志。
14) Encrypted Data :客戶端和服務(wù)器現(xiàn)在可以開發(fā)在安全通信通道上進(jìn)行加密信息的交
流了。
4、Java 安全套接擴(kuò)展 (Java Secure Socket Extension, JSSE)
(1)JSSE 介紹
1) Java 安全套接擴(kuò)展 (JSSE) 提供一個框架及一個 100 純 Java 實現(xiàn)的 SSL 和
TLS 協(xié)議(傳輸層加密 --Transport Layer Security)。它提供了數(shù)據(jù)加密、服務(wù)器驗證、消息完成性和可選的客戶端驗證等機(jī)制。
2) JSSE 的引人之外就是將復(fù)雜的、根本的加密算法抽象化了---JSSE 庫對我們隱藏了
在上面所提及的SSL 協(xié)議的這些內(nèi)部工作過程。我們只需象對待普通套接字一樣來從工廠創(chuàng)建出 Socket 。
3) 另外,由于它能將 SSL 無縫地結(jié)合在應(yīng)用當(dāng)中,使安全應(yīng)用的開發(fā)變得非常簡單-----
4 楊教授工作室,版權(quán)所有,盜版必究, 4/8頁
,楊教授工作室 精心創(chuàng)作的優(yōu)秀程序員 職業(yè)提升必讀系列資料
因為,它為基于 TCP/IP 的任何應(yīng)用協(xié)議,如 HTTP 、FTP 、Telnet 、或者 NTTP ,
在客戶端和服務(wù)器端之間建立安全的數(shù)據(jù)通道。
(2)JDK 中的JSSE 包介紹
由于JSSE 是 100 純 Java 實現(xiàn)的 SSL 框架,并且在JDK 中已經(jīng)內(nèi)帶地加以支持。我們利用這個包能夠開發(fā)出安全的網(wǎng)絡(luò)應(yīng)用;
JSSE API 提供了擴(kuò)充的網(wǎng)絡(luò)套接字類、信用和密匙管理,以及為簡化套接字創(chuàng)建而設(shè)計的套接字工廠框架,以此擴(kuò)充 java.security 和 java.net 兩個包。這些類都包含在 javax.net 和 javax.net.ssl 包中。
(3)JSSE 編程實現(xiàn)示例
首先從 SSLSocketFactory 獲取一個 SocketFactory對象,然后再從該工廠創(chuàng)建出Socket 。當(dāng)建立了安全連接后,只需寫入套接字或從中讀取,即可對數(shù)據(jù)進(jìn)行加密或解密-----與普通的Socket 編程實現(xiàn)相同。
下面的代碼示例顯示通過從端口 443(即 HTTPS 端口)讀取 某個站點(diǎn)的Web 頁內(nèi)容。 import java.io.*;
import java.net.*;
import javax.net.*;
import javax.net.ssl.*;
public class JSSEDemo {
static final int HTTPS_PORT = 443; public static void main(String args[]) { String hostname; if(args.length == 0) // 獲得主機(jī)名或使用 VeriSign { } else {
5 楊教授工作室,版權(quán)所有,盜版必究, 5/8頁 hostname = "www.verisign.com";
,楊教授工作室 精心創(chuàng)作的優(yōu)秀程序員 職業(yè)提升必讀系列資料
} hostname = args[0]; try { SocketFactory factory = SSLSocketFactory.getDefault(); // 獲得套接字工廠 Socket s = factory.createSocket(hostname, HTTPS_PORT); // 從工廠獲得套接字 }
6 楊教授工作室,版權(quán)所有,盜版必究, 6/8頁 } OutputStream os = s.getOutputStream(); // 發(fā)送請求 PrintWriter pw = new PrintWriter(os); String command = "GET / HTTP/1.0rnrn"; // 設(shè)置命令 pw.print(command); pw.flush(); InputStream is = s.getInputStream(); // 獲得響應(yīng) InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; while ((line = br.readLine()) != null) { } pw.close(); br.close(); s.close(); System.out.println(line); catch (IOException e) { } System.err.println("Error reading: " e);
,楊教授工作室 精心創(chuàng)作的優(yōu)秀程序員 職業(yè)提升必讀系列資料
}
5、在Java 平臺中使用SSL 協(xié)議的條件
(1)對服務(wù)器端或者客戶端的要求
要使用SSL 協(xié)議,服務(wù)器至少有一個私有密匙和一個用于驗證身份的證書。私有密匙在密匙交換算法中用到,證書將發(fā)送到客戶端,以通知服務(wù)器端的身份。
所應(yīng)該注意的是,如果SSL 服務(wù)器要驗證客戶端的身份,那么客戶端必須也有自己的密匙庫(包含私有密匙和證書,此時將為雙向身份驗證)。
(2)JSSE 中的信任庫
JSSE 中引入了信任庫(truststore )的概念,它是用來保存證書的數(shù)據(jù)庫??蛻舳嘶蛘叻?wù)器通過信任庫來驗證對方的身份。
(3)要求安裝有JSSE
在使用SSL 前,必須確保系統(tǒng)安裝了JSSE 。JDK1.4版本默認(rèn)以及安裝了JSSE 。如果沒有安裝,把下載安裝好的jar 文件拷貝到JAVA_HOME jrelibext目錄下。這樣,就安裝好了JSSE 的運(yùn)行環(huán)境。
6、傳輸安全技術(shù)
(1)含義
傳輸安全指一組安全技術(shù),用于確??蛻舳撕头?wù)器的真實性,以及在 Web 服務(wù)器及其客戶端之間傳遞的數(shù)據(jù)的完整性和保密性。
我們通過使用傳輸安全,從而可以通過 SSL 、用戶名/密碼身份驗證和客戶端數(shù)字證書來確保我們的 Web 資源的安全。
(2)優(yōu)缺點(diǎn)
傳輸安全的優(yōu)勢在于其普及性且比較容易實現(xiàn),但其缺點(diǎn)主要是-------只有數(shù)據(jù)在電纜上傳輸時才能得到保護(hù)。當(dāng)數(shù)據(jù)到達(dá)接收方后,傳輸安全機(jī)制將不再適用,因此,如果數(shù)據(jù)登錄到接收方的機(jī)器上,其保密性可能無法得到保障。
(3)采用的方法之一:單向 SSL
單向 SSL 具備兩個主要優(yōu)點(diǎn)。
第一,對 Web 服務(wù)器的標(biāo)識進(jìn)行身份驗證。
第二,通過加密客戶端與服務(wù)器之間的消息,可以確保通信的保密性。單向 SSL 中
7 楊教授工作室,版權(quán)所有,盜版必究, 7/8頁
,楊教授工作室 精心創(chuàng)作的優(yōu)秀程序員 職業(yè)提升必讀系列資料
的“單向”是指僅對服務(wù)器的標(biāo)識進(jìn)行身份驗證(只驗證服務(wù)器證書),而不對客戶端的標(biāo)識進(jìn)行身份驗證。如果要確保通信的保密性,但客戶端標(biāo)識是非重要因素,則應(yīng)使用單向 SSL 。
● 一般采用單向 SSL 與基本身份驗證相互配合的的方式來進(jìn)一步地增強(qiáng)安全性
通過要求提供用戶名和密碼,基本身份驗證可確保客戶端標(biāo)識的真實性?;旧矸蒡炞C應(yīng)始終與單向 SSL 配合使用,否則用戶名和密碼可能會被心懷惡意的第三方截取。要同時確??蛻舳藰?biāo)識和服務(wù)器標(biāo)識的真實性,應(yīng)使用單向 SSL 。
● 單向 SSL 應(yīng)用的場合
注意當(dāng) SSL 允許客戶端和服務(wù)器端相互驗證的時候,典型的作法是只有服務(wù)器端在 SSL 層上進(jìn)行驗證??蛻舳送ǔT趹?yīng)用層,通過 SSL 保護(hù)通道傳送的密碼來進(jìn)行驗證。這個模式常用于銀行、股份交易和其它的安全網(wǎng)絡(luò)應(yīng)用中。
(4)采用的方法之二:雙向 SSL
通過客戶端數(shù)字證書,雙向 SSL 將服務(wù)器身份驗證、數(shù)據(jù)加密和客戶端身份驗證組合在一起。
8 楊教授工作室,版權(quán)所有,盜版必究, 8/8頁