java中關於SSL/TSL的介紹和如何實現SSL Socket雙向認證

1、        SSL概述算法

SSL協議採用數字證書及數字簽名進行雙端實體認證,用非對稱加密算法進行密鑰協商,用對稱加密算法將數據加密後進行傳輸以保證數據的保密性,而且經過計算數字摘要來驗證數據在傳輸過程當中是否被篡改和僞造,從而爲敏感數據的傳輸提供了一種安全保障手段。瀏覽器

SSL協議提供的服務主要有:安全

1)認證用戶和服務器,確保數據發送到正確的客戶機和服務器服務器

認證用戶和服務器的合法性,使它們可以確信數據將被髮送到正確的客戶機和服務器上。客戶機和服務器都有各自的識別號,這些識別號由公開密鑰進行編號,爲驗證用戶是否合法,SSL協議要求在握手交換數據時進行數字認證,以此確保用戶的合法性。網絡

2)加密數據以防止數據中途被竊取函數

SSL協議所採用的加密技術既有對稱密鑰技術,也有公開密鑰技術。在客戶機和服務器進行數據交換前,交換SSL初始握手信息,在SSL握手信息中採用了各類加密技術對其進行加密,以保證其機密性和數據的完整性,而且用數字證書進行鑑別,這樣就能夠防止非法用戶進行破譯。編碼

3)維護數據的完整性,確保數據在傳輸過程當中不被改變加密

SSL協議採用Hash函數和機密共享的方法提供信息的完整性服務,創建客戶機和服務器之間的安全通道,使全部通過SSL協議處理的業務在傳輸過程當中能所有完整準確無誤的到達目的地。spa

 

SSL體系結構:命令行

SSL協議位於TCP/IP協議模型的網絡層和應用層之間,使用TCP來提供一種可靠的端到端的安全服務,它是客戶/服務器應用之間的通訊不被攻擊竊聽,而且始終對服務器進行認證,還能夠選擇對客戶進行認證。SSL體系結構如圖1所示。

SSL Socket雙向認證的實現 - day day up - My Blog

SSL通信中,首先採用非對稱加密交換信息,使得服務器得到瀏覽器端提供的對稱加密的密鑰,而後利用該密鑰進行通信過程當中信息的加密和解密。爲了保證消息在傳遞過程當中沒有被篡改,能夠加密HASH編碼來確保信息的完整性。SSL通信過程,如圖2所示。

SSL Socket雙向認證的實現 - day day up - My Blog

通常狀況下,當客戶端是保密信息的傳遞者時,客戶端不須要數字證書驗證本身身份的真實性,如電子銀行的應用,客戶須要將本身的帳號和密碼發送給銀行,所以銀行的服務器須要安裝數字證書來代表本身身份的有效性。在某些應用中,服務器端也須要對客戶端的身份進行驗證,這時客戶端也須要安裝數字證書以保證通信時服務器能夠辨別出客戶端的身份,驗證過程相似於服務器身份的驗證過程。

 

3、SSL Socket雙向認證的實現

SSL Socket通訊是對Socket通訊的拓展。在Socket通訊的基礎上添加了一層安全性保護,提供了更高的安全性,包括身份驗證、數據加密以及完整性驗證。

SSL Socket雙向認證明現技術: JSSE(Java Security Socket Extension),它實現了SSL和TSL(傳輸層安全)協議。在JSSE中包含了數據加密,服務器驗證,消息完整性和客戶端驗證等技術。經過使用JSSE,能夠在客戶機和服務器之間經過TCP/IP協議安全地傳輸數據。爲了實現消息認證:

服務器端須要:

   一、KeyStore: 其中保存服務器端的私鑰

   二、Trust KeyStore: 其中保存客戶端的受權證書

客戶端須要:

    一、KeyStore:其中保存客戶端的私鑰

    二、Trust KeyStore:其中保存服務端的受權證書

 

密鑰和受權證書的生成方法:

使用Java自帶的keytool命令,在命令行生成。

一、生成服務器端私鑰kserver.keystore文件

  keytool -genkey -alias serverkey -validity 1 -keystore kserver.keystore

二、根據私鑰,導出服務器端安全證書

keytool -export -alias serverkey -keystore kserver.keystore -file server.crt  

三、將服務器端證書,導入到客戶端的Trust KeyStore中

keytool -import -alias serverkey -file server.crt -keystore tclient.keystore

四、生成客戶端私鑰kclient.keystore文件

  keytool -genkey -alias clientkey -validity 1  -keystore kclient.keystore

五、根據私鑰,導出客戶端安全證書

keytool -export -alias clientkey -keystore kclient.keystore -file client.crt

六、將客戶端證書,導入到服務器端的Trust KeyStore中

keytool -import -alias clientkey -file client.crt -keystore tserver.keystore

      

生成的文件分紅兩組,服務器端保存:kserver.keystore tserver.keystore 客戶端保存:kclient.keystore  tclient.kyestore(一般狀況下,咱們也能夠將對方的證書導入本身存放私匙的keystore中)。

 身份驗證的原理

客戶端採用本身的私鑰進行數據加密,發送給服務端,服務器端採用客戶端的公匙(client.crt證書中存在)對數據解密,若是解密成功,證實消息來自可信的客戶端,進行邏輯處理;

同理,服務器端採用kserver.keystore中的私鑰進行數據加密,發送給客戶端,客戶端採用tclient.keystore中的server.crt證書對數據解密,若是解密成功,證實消息來自可信的服務器端,進行邏輯處理。若是解密失敗,那麼證實消息來源錯誤。不進行邏輯處理。

 

SSL Socket雙向認證的安全性:

1)能夠確保數據傳送到正確的服務器端和客戶端。

2)能夠防止消息傳遞過程當中被竊取。

3)防止消息在傳遞過程當中被修改.。

 

在系統運行中可能出現如下狀況:

(1)   服務器端、客戶端都持有正確的密鑰和安全證書,此時服務器端和客戶端能夠進行正常通訊。

(2)   客戶端的密鑰和安全證書不正確,此時服務器端和客戶端不能夠進行正常通訊。

(3)   客戶端未持有密鑰和安全證書,此時服務器端和客戶端也不能夠進行正常通訊。

相關文章
相關標籤/搜索