SSL 通信原理及Tomcat SSL 雙向配置
SSL 通信原理及Tomcat SSL 雙向配置目錄1 參考資料 ...................................................................
SSL 通信原理及Tomcat SSL 雙向配置
目錄
1 參考資料 .................................................................................................................................. 1 2 SSL(Server Socket Layer)簡介 ................................................................................................... 2
2.1 工作原理 ....................................................................................................................... 2
2.2 SSL 的具體流程圖: .................................................................................................... 4
2.3 SSL 通訊示意圖 ............................................................................................................ 5
2.4 SSL 通訊說明 ................................................................................................................ 5
3 keytool 安全證書學習 ............................................................................................................. 6
3.1 驗證是否已創(chuàng)建過同名的證書 ................................................................................... 6
3.2 刪除已創(chuàng)建的證書 ....................................................................................................... 6
3.3 創(chuàng)建證書 ....................................................................................................................... 6
3.4 常出現(xiàn)的異常: ........................................................................................................... 7
3.4.1 Keytool 是一個Java 數(shù)據(jù)證書的管理工具。 ................................................. 7
4 為tomcat6 批量生成安全證書 ............................................................................................... 8
4.1.1 第一步:為服務器生成證書 ........................................................................... 8
4.1.2 第二步:為客戶端生成證書 ........................................................................... 9
4.1.3 第三步:讓服務器信任客戶端證書 ............................................................... 9
4.1.4 第四步:配置Tomcat 服務器 ......................................................................... 9
4.1.5 第五步:導入客戶端證書 ............................................................................. 10
,4.1.6 第六步: 導出服務器證書給客戶端 .............................................................. 10
4.1.7 第七步:將導入server.cer ,為客戶端 創(chuàng)建定制密鑰庫. ............................ 11
4.1.8 第八步:創(chuàng)建Java 客戶端訪問: ...................................................................... 11
4.1.9 測試訪問: ........................................................................................................ 12
4.1.10 SSL 證書錯誤信息 .......................................................................................... 12
5 說明: ...................................................................................................................................... 13
6 不同格式證書導入keystore 方法 ......................................................................................... 13
6.1 Java KeyStore 的類型 .................................................................................................. 14
6.2 證書導入 ..................................................................................................................... 14
6.2.1 Der/Cer 證書導入: ....................................................................................... 14
6.2.2 P12 格式證書導入: ...................................................................................... 15
6.3 P7B 格式證書導入: ................................................................................................. 16
6.4 總結:............................................................................................................................ 16
1 參考資料
本文部分內容來源于網(wǎng)絡,目的是介紹某些工具及技術的使用與原理。
其中Tomcat 的配置測試及Webservcie 客戶端的調用。經(jīng)過實戰(zhàn)測試,
客戶端調用Webservice 采用Xfire 框架。僅提供了代碼片段。
,2 SSL(Server Socket Layer)簡介
2.1 工作原理
1、SSL 協(xié)議使用不對稱加密技術實現(xiàn)會話雙方之間信息的安全傳遞??梢詫崿F(xiàn)信息傳 遞的保密性、完整性,并且會話雙方能鑒別對方身份。不同于常用的http 協(xié)議,我們在與 網(wǎng)站建立SSL 安全連接時使用https 協(xié)議,即采用https://ip:port/的方式來訪問。 當我們與一個網(wǎng)站建立https 連接時,我們的瀏覽器與Web Server 之間要經(jīng)過一個握手 的過程來完成身份鑒定與密鑰交換,從而建立安全連接。具體過程如下:
用戶瀏覽器將其SSL 版本號、加密設置參數(shù)、與session 有關的數(shù)據(jù)以及其它一些必要 信息發(fā)送到服務器。
服務器將其SSL 版本號、加密設置參數(shù)、與session 有關的數(shù)據(jù)以及其它一些必要信息 發(fā)送給瀏覽器,同時發(fā)給瀏覽器的還有服務器的證書。如果配置服務器的SSL 需要驗證用戶
身份,還要發(fā)出請求要求瀏覽器提供用戶證書。
客戶端檢查服務器證書,如果檢查失敗,提示不能建立SSL 連接。如果成功,那么繼續(xù)。 客戶端瀏覽器為本次會話生成pre ‐master secret,并將其用服務器公鑰加密后發(fā)送給服 務器。
如果服務器要求鑒別客戶身份,客戶端還要再對另外一些數(shù)據(jù)簽名后并將其與客戶端證 書一起發(fā)送給服務器。
如果服務器要求鑒別客戶身份,則檢查簽署客戶證書的CA 是否可信。如果不在信任列 表中,結束本次會話。如果檢查通過,服務器用自己的私鑰解密收到的pre ‐master secret,
,并用它通過某些算法生成本次會話的master secret。
客戶端與服務器均使用此master secret 生成本次會話的會話密鑰(對稱密鑰) 。在雙方SSL 握手結束后傳遞任何消息均使用此會話密鑰。這樣做的主要原因是對稱加密比非對稱加密的 運算量低一個數(shù)量級以上,能夠顯著提高雙方會話時的運算速度。
客戶端通知服務器此后發(fā)送的消息都使用這個會話密鑰進行加密。并通知服務器客戶端 已經(jīng)完成本次SSL 握手。
服務器通知客戶端此后發(fā)送的消息都使用這個會話密鑰進行加密。并通知客戶端服務器 已經(jīng)完成本次SSL 握手。
本次握手過程結束,會話已經(jīng)建立。雙方使用同一個會話密鑰分別對發(fā)送以及接受的信 息進行加、解密。
2、SSL(Secure Socket Layer)是一種通信交互協(xié)議,由Netscape 公司在1994 年制定,主
要目的就是確保在web 服務器和瀏覽器之間數(shù)據(jù)傳輸安全。SSL 協(xié)議層是在TCP/IP 層和應
用層之間。當前TLS(Transport Layer Security)正在逐漸替代SSL(最新版本v3) 。 SSL 協(xié)議分成以下幾部分:
,Record Protocal 是SSL 的基礎層,SSL 所有的上層操作都是基于這個層次,這層主要負責消
息內容的分段,壓縮,加密和數(shù)字摘要等操作。
Handshake Protocal 故名思義就是握手協(xié)議,也是在正式應用數(shù)據(jù)傳輸前雙方交換加密 設置以及認證的流程規(guī)范協(xié)議。
Change Cipher Spec Protocol 是基于record 協(xié)議層通知遠端服務器修改record 協(xié)議層中
安全設置的協(xié)議。
Alert Protocol 是基于record 協(xié)議發(fā)送警告到遠端服務器的協(xié)議。
2.2 SSL 的具體流程圖:
,SSL
的流程也體現(xiàn)了對于對稱性密鑰和非對稱性密鑰的使用,由于對稱性密鑰加密比非對稱
性密鑰加密要快1000 倍,那么對稱性密鑰被用來做對內容的加密,而非對稱性密鑰用來
,做
傳遞對稱性密鑰的加密手段。
服務端所需要具備的是一個擁有服務端的標示,公鑰私鑰對的證書。在握手的流程中, 服務端將帶有公鑰的證書抽取出來發(fā)送給客戶端,客戶端就首先可以判斷證書頒發(fā)者是否屬 于本機受信的CA ,如果不是,就會類似于IE 跳出提示,如果通過了這部分CA 認證,雙方
就可以通過非對稱性加密算法來交換客戶端生成的臨時對稱密碼,進行安全加密信息交互。
2.3 SSL 通訊示意圖
,2.4 SSL 通訊說明
在該部分,將上圖所示的示意圖進行說明。為了說明的方便,在本文中稱客戶端為B ,服務 器端為S 。
STEP 1: B——〉S (發(fā)起對話,協(xié)商傳送加密算法)
你好,S !我想和你進行安全對話,我的對稱加密算法有DES,RC5,我的密鑰交換算法有 RSA 和DH ,摘要算法有MD5 和SHA 。
STEP2: S——〉B (發(fā)送服務器數(shù)字證書)
你好,B !那我們就使用DES -RSA -SHA 這對組合進行通訊,為了證明我確實是S ,現(xiàn)在 發(fā)送我的數(shù)字證書給你,你可以驗證我的身份。
STEP 3: B——〉S (傳送本次對話的密鑰)
(檢查S 的數(shù)字證書是否正確,通過CA 機構頒發(fā)的證書驗證了S 證書的真實有效性后。 生成了利用S 的公鑰加密的本次對話的密鑰發(fā)送給S )
S, 我已經(jīng)確認了你的身份,現(xiàn)在將我們本次通訊中使用的對稱加密算法的密鑰發(fā)送給 你。
STEP4: S——〉B (獲取密鑰)
(S 用自己的私鑰解密獲取本次通訊的密鑰)。
B, 我已經(jīng)獲取了密鑰。我們可以開始通信了。
STEP5: S<——>B(進行通訊)
說明:一般情況下,當B 是保密信息的傳遞者時,B 不需要數(shù)字證書驗證自己身份的真 實性,如電子銀行的應用,客戶需要將自己的賬號和密碼發(fā)送給銀行,因此銀行的服務器需 要安裝數(shù)字證書來表明自己身份的有效性。在某些B2B 應用,服務器端也需要對客戶端的
,身份進行驗證,這時客戶端也需要安裝數(shù)字證書以保證通訊時服務器可以辨別出客戶端的身 份,驗證過程類似于服務器身份的驗證過程。
此外需要說明的是,在一些電子商務的應用中,可能還會使用到電子簽名,或者為了信 息交換的更加安全,會增加電子簽名和消息校驗碼(MAC )。
為了便于了解SSL ,下面在簡要介紹一下信息加密相關知識。使用密鑰類型加密信息的加密 算法可以分為以下幾類:HASH 編碼、對稱加密和非對稱加密三類。
HASH 編碼是使用HASH 算法從任意長度的消息中計算HASH 值的一個過程,HASH 值可
以說是消息的指紋,因為對于任何不同的消息,幾乎總有不同的HASH 值。因此在SSL 通訊
過程中,可以對消息的HASH 值進行加密,確保傳遞的消息在傳輸過程中沒有被修改。 非對稱加密或稱之為公鑰加密使用數(shù)學上相關的兩個數(shù)值來對信息進行編碼(加密), 其中一個數(shù)字稱為公鑰,另一個稱為私鑰。公鑰加密的信息可以用私鑰解密,私鑰加密的信 息可以用公鑰解密。由于公鑰可以大面積發(fā)放,因此公鑰加密在SSL 加密通信中應用于對密
鑰的加密或者進行數(shù)字簽名。
對稱加密和非對稱加密相比的區(qū)別在于對稱加密中,加密信息和解密信息使用同樣的密 鑰,因此該密鑰無法公開。但是其具有加密、解密快速的特點。
在SSL 通訊中,首先采用非對稱加密交換信息,使得服務器獲得瀏覽器端提供的對稱加 密的密鑰,然后利用該密鑰進行通訊過程中信息的加密和解密。為了保證消息在傳遞過程中 沒有被篡改,可以加密HASH 編碼來確保信息的完整性。
,3 keytool 安全證書學習
3.1 驗證是否已創(chuàng)建過同名的證書
keytool -list -v -alias tomcat -keystore "JAVA_HOME/JRE/LIB/SECURITY/CACERTS" -storepass changeit
3.2 刪除已創(chuàng)建的證書
keytool -delete -alias tomcat -keystore
"JAVA_HOME/JRE/LIB/SECURITY/CACERTS" -storepass changeit
3.3 創(chuàng)建證書
1. 服務器中生成證書:(注:生成證書時,CN 要和服務器的域名相同,如果在本地測試,則使用localhost)
keytool -genkey -alias tomcat -keyalg RSA -keystore d:mykeystore -dname
"CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass changeit -
storepass changeit
2. 導出證書,由客戶端安裝: