SSL 通信原理及Tomcat SSL 雙向配置
SSL 通信原理及Tomcat SSL 雙向配置目錄1 參考資料 ...................................................................
SSL 通信原理及Tomcat SSL 雙向配置
目錄
1 參考資料 .................................................................................................................................. 1 2 SSL(Server Socket Layer)簡(jiǎn)介 ................................................................................................... 2
2.1 工作原理 ....................................................................................................................... 2
2.2 SSL 的具體流程圖: .................................................................................................... 4
2.3 SSL 通訊示意圖 ............................................................................................................ 5
2.4 SSL 通訊說(shuō)明 ................................................................................................................ 5
3 keytool 安全證書(shū)學(xué)習(xí) ............................................................................................................. 6
3.1 驗(yàn)證是否已創(chuàng)建過(guò)同名的證書(shū) ................................................................................... 6
3.2 刪除已創(chuàng)建的證書(shū) ....................................................................................................... 6
3.3 創(chuàng)建證書(shū) ....................................................................................................................... 6
3.4 常出現(xiàn)的異常: ........................................................................................................... 7
3.4.1 Keytool 是一個(gè)Java 數(shù)據(jù)證書(shū)的管理工具。 ................................................. 7
4 為tomcat6 批量生成安全證書(shū) ............................................................................................... 8
4.1.1 第一步:為服務(wù)器生成證書(shū) ........................................................................... 8
4.1.2 第二步:為客戶端生成證書(shū) ........................................................................... 9
4.1.3 第三步:讓服務(wù)器信任客戶端證書(shū) ............................................................... 9
4.1.4 第四步:配置Tomcat 服務(wù)器 ......................................................................... 9
4.1.5 第五步:導(dǎo)入客戶端證書(shū) ............................................................................. 10
,4.1.6 第六步: 導(dǎo)出服務(wù)器證書(shū)給客戶端 .............................................................. 10
4.1.7 第七步:將導(dǎo)入server.cer ,為客戶端 創(chuàng)建定制密鑰庫(kù). ............................ 11
4.1.8 第八步:創(chuàng)建Java 客戶端訪問(wèn): ...................................................................... 11
4.1.9 測(cè)試訪問(wèn): ........................................................................................................ 12
4.1.10 SSL 證書(shū)錯(cuò)誤信息 .......................................................................................... 12
5 說(shuō)明: ...................................................................................................................................... 13
6 不同格式證書(shū)導(dǎo)入keystore 方法 ......................................................................................... 13
6.1 Java KeyStore 的類(lèi)型 .................................................................................................. 14
6.2 證書(shū)導(dǎo)入 ..................................................................................................................... 14
6.2.1 Der/Cer 證書(shū)導(dǎo)入: ....................................................................................... 14
6.2.2 P12 格式證書(shū)導(dǎo)入: ...................................................................................... 15
6.3 P7B 格式證書(shū)導(dǎo)入: ................................................................................................. 16
6.4 總結(jié):............................................................................................................................ 16
1 參考資料
本文部分內(nèi)容來(lái)源于網(wǎng)絡(luò),目的是介紹某些工具及技術(shù)的使用與原理。
其中Tomcat 的配置測(cè)試及Webservcie 客戶端的調(diào)用。經(jīng)過(guò)實(shí)戰(zhàn)測(cè)試,
客戶端調(diào)用Webservice 采用Xfire 框架。僅提供了代碼片段。
,2 SSL(Server Socket Layer)簡(jiǎn)介
2.1 工作原理
1、SSL 協(xié)議使用不對(duì)稱加密技術(shù)實(shí)現(xiàn)會(huì)話雙方之間信息的安全傳遞??梢詫?shí)現(xiàn)信息傳 遞的保密性、完整性,并且會(huì)話雙方能鑒別對(duì)方身份。不同于常用的http 協(xié)議,我們?cè)谂c 網(wǎng)站建立SSL 安全連接時(shí)使用https 協(xié)議,即采用https://ip:port/的方式來(lái)訪問(wèn)。 當(dāng)我們與一個(gè)網(wǎng)站建立https 連接時(shí),我們的瀏覽器與Web Server 之間要經(jīng)過(guò)一個(gè)握手 的過(guò)程來(lái)完成身份鑒定與密鑰交換,從而建立安全連接。具體過(guò)程如下:
用戶瀏覽器將其SSL 版本號(hào)、加密設(shè)置參數(shù)、與session 有關(guān)的數(shù)據(jù)以及其它一些必要 信息發(fā)送到服務(wù)器。
服務(wù)器將其SSL 版本號(hào)、加密設(shè)置參數(shù)、與session 有關(guān)的數(shù)據(jù)以及其它一些必要信息 發(fā)送給瀏覽器,同時(shí)發(fā)給瀏覽器的還有服務(wù)器的證書(shū)。如果配置服務(wù)器的SSL 需要驗(yàn)證用戶
身份,還要發(fā)出請(qǐng)求要求瀏覽器提供用戶證書(shū)。
客戶端檢查服務(wù)器證書(shū),如果檢查失敗,提示不能建立SSL 連接。如果成功,那么繼續(xù)。 客戶端瀏覽器為本次會(huì)話生成pre ‐master secret,并將其用服務(wù)器公鑰加密后發(fā)送給服 務(wù)器。
如果服務(wù)器要求鑒別客戶身份,客戶端還要再對(duì)另外一些數(shù)據(jù)簽名后并將其與客戶端證 書(shū)一起發(fā)送給服務(wù)器。
如果服務(wù)器要求鑒別客戶身份,則檢查簽署客戶證書(shū)的CA 是否可信。如果不在信任列 表中,結(jié)束本次會(huì)話。如果檢查通過(guò),服務(wù)器用自己的私鑰解密收到的pre ‐master secret,
,并用它通過(guò)某些算法生成本次會(huì)話的master secret。

客戶端與服務(wù)器均使用此master secret 生成本次會(huì)話的會(huì)話密鑰(對(duì)稱密鑰) 。在雙方SSL 握手結(jié)束后傳遞任何消息均使用此會(huì)話密鑰。這樣做的主要原因是對(duì)稱加密比非對(duì)稱加密的 運(yùn)算量低一個(gè)數(shù)量級(jí)以上,能夠顯著提高雙方會(huì)話時(shí)的運(yùn)算速度。
客戶端通知服務(wù)器此后發(fā)送的消息都使用這個(gè)會(huì)話密鑰進(jìn)行加密。并通知服務(wù)器客戶端 已經(jīng)完成本次SSL 握手。
服務(wù)器通知客戶端此后發(fā)送的消息都使用這個(gè)會(huì)話密鑰進(jìn)行加密。并通知客戶端服務(wù)器 已經(jīng)完成本次SSL 握手。
本次握手過(guò)程結(jié)束,會(huì)話已經(jīng)建立。雙方使用同一個(gè)會(huì)話密鑰分別對(duì)發(fā)送以及接受的信 息進(jìn)行加、解密。
2、SSL(Secure Socket Layer)是一種通信交互協(xié)議,由Netscape 公司在1994 年制定,主
要目的就是確保在web 服務(wù)器和瀏覽器之間數(shù)據(jù)傳輸安全。SSL 協(xié)議層是在TCP/IP 層和應(yīng)
用層之間。當(dāng)前TLS(Transport Layer Security)正在逐漸替代SSL(最新版本v3) 。 SSL 協(xié)議分成以下幾部分:
,Record Protocal 是SSL 的基礎(chǔ)層,SSL 所有的上層操作都是基于這個(gè)層次,這層主要負(fù)責(zé)消
息內(nèi)容的分段,壓縮,加密和數(shù)字摘要等操作。
Handshake Protocal 故名思義就是握手協(xié)議,也是在正式應(yīng)用數(shù)據(jù)傳輸前雙方交換加密 設(shè)置以及認(rèn)證的流程規(guī)范協(xié)議。
Change Cipher Spec Protocol 是基于record 協(xié)議層通知遠(yuǎn)端服務(wù)器修改record 協(xié)議層中
安全設(shè)置的協(xié)議。
Alert Protocol 是基于record 協(xié)議發(fā)送警告到遠(yuǎn)端服務(wù)器的協(xié)議。
2.2 SSL 的具體流程圖:
,SSL

的流程也體現(xiàn)了對(duì)于對(duì)稱性密鑰和非對(duì)稱性密鑰的使用,由于對(duì)稱性密鑰加密比非對(duì)稱
性密鑰加密要快1000 倍,那么對(duì)稱性密鑰被用來(lái)做對(duì)內(nèi)容的加密,而非對(duì)稱性密鑰用來(lái)
,做

傳遞對(duì)稱性密鑰的加密手段。
服務(wù)端所需要具備的是一個(gè)擁有服務(wù)端的標(biāo)示,公鑰私鑰對(duì)的證書(shū)。在握手的流程中, 服務(wù)端將帶有公鑰的證書(shū)抽取出來(lái)發(fā)送給客戶端,客戶端就首先可以判斷證書(shū)頒發(fā)者是否屬 于本機(jī)受信的CA ,如果不是,就會(huì)類(lèi)似于IE 跳出提示,如果通過(guò)了這部分CA 認(rèn)證,雙方
就可以通過(guò)非對(duì)稱性加密算法來(lái)交換客戶端生成的臨時(shí)對(duì)稱密碼,進(jìn)行安全加密信息交互。
2.3 SSL 通訊示意圖
,2.4 SSL 通訊說(shuō)明
在該部分,將上圖所示的示意圖進(jìn)行說(shuō)明。為了說(shuō)明的方便,在本文中稱客戶端為B ,服務(wù) 器端為S 。
STEP 1: B——〉S (發(fā)起對(duì)話,協(xié)商傳送加密算法)
你好,S !我想和你進(jìn)行安全對(duì)話,我的對(duì)稱加密算法有DES,RC5,我的密鑰交換算法有 RSA 和DH ,摘要算法有MD5 和SHA 。
STEP2: S——〉B (發(fā)送服務(wù)器數(shù)字證書(shū))
你好,B !那我們就使用DES -RSA -SHA 這對(duì)組合進(jìn)行通訊,為了證明我確實(shí)是S ,現(xiàn)在 發(fā)送我的數(shù)字證書(shū)給你,你可以驗(yàn)證我的身份。
STEP 3: B——〉S (傳送本次對(duì)話的密鑰)
(檢查S 的數(shù)字證書(shū)是否正確,通過(guò)CA 機(jī)構(gòu)頒發(fā)的證書(shū)驗(yàn)證了S 證書(shū)的真實(shí)有效性后。 生成了利用S 的公鑰加密的本次對(duì)話的密鑰發(fā)送給S )
S, 我已經(jīng)確認(rèn)了你的身份,現(xiàn)在將我們本次通訊中使用的對(duì)稱加密算法的密鑰發(fā)送給 你。
STEP4: S——〉B (獲取密鑰)
(S 用自己的私鑰解密獲取本次通訊的密鑰)。
B, 我已經(jīng)獲取了密鑰。我們可以開(kāi)始通信了。
STEP5: S<——>B(進(jìn)行通訊)
說(shuō)明:一般情況下,當(dāng)B 是保密信息的傳遞者時(shí),B 不需要數(shù)字證書(shū)驗(yàn)證自己身份的真 實(shí)性,如電子銀行的應(yīng)用,客戶需要將自己的賬號(hào)和密碼發(fā)送給銀行,因此銀行的服務(wù)器需 要安裝數(shù)字證書(shū)來(lái)表明自己身份的有效性。在某些B2B 應(yīng)用,服務(wù)器端也需要對(duì)客戶端的
,身份進(jìn)行驗(yàn)證,這時(shí)客戶端也需要安裝數(shù)字證書(shū)以保證通訊時(shí)服務(wù)器可以辨別出客戶端的身 份,驗(yàn)證過(guò)程類(lèi)似于服務(wù)器身份的驗(yàn)證過(guò)程。
此外需要說(shuō)明的是,在一些電子商務(wù)的應(yīng)用中,可能還會(huì)使用到電子簽名,或者為了信 息交換的更加安全,會(huì)增加電子簽名和消息校驗(yàn)碼(MAC )。
為了便于了解SSL ,下面在簡(jiǎn)要介紹一下信息加密相關(guān)知識(shí)。使用密鑰類(lèi)型加密信息的加密 算法可以分為以下幾類(lèi):HASH 編碼、對(duì)稱加密和非對(duì)稱加密三類(lèi)。
HASH 編碼是使用HASH 算法從任意長(zhǎng)度的消息中計(jì)算HASH 值的一個(gè)過(guò)程,HASH 值可
以說(shuō)是消息的指紋,因?yàn)閷?duì)于任何不同的消息,幾乎總有不同的HASH 值。因此在SSL 通訊
過(guò)程中,可以對(duì)消息的HASH 值進(jìn)行加密,確保傳遞的消息在傳輸過(guò)程中沒(méi)有被修改。 非對(duì)稱加密或稱之為公鑰加密使用數(shù)學(xué)上相關(guān)的兩個(gè)數(shù)值來(lái)對(duì)信息進(jìn)行編碼(加密), 其中一個(gè)數(shù)字稱為公鑰,另一個(gè)稱為私鑰。公鑰加密的信息可以用私鑰解密,私鑰加密的信 息可以用公鑰解密。由于公鑰可以大面積發(fā)放,因此公鑰加密在SSL 加密通信中應(yīng)用于對(duì)密
鑰的加密或者進(jìn)行數(shù)字簽名。
對(duì)稱加密和非對(duì)稱加密相比的區(qū)別在于對(duì)稱加密中,加密信息和解密信息使用同樣的密 鑰,因此該密鑰無(wú)法公開(kāi)。但是其具有加密、解密快速的特點(diǎn)。
在SSL 通訊中,首先采用非對(duì)稱加密交換信息,使得服務(wù)器獲得瀏覽器端提供的對(duì)稱加 密的密鑰,然后利用該密鑰進(jìn)行通訊過(guò)程中信息的加密和解密。為了保證消息在傳遞過(guò)程中 沒(méi)有被篡改,可以加密HASH 編碼來(lái)確保信息的完整性。
,3 keytool 安全證書(shū)學(xué)習(xí)
3.1 驗(yàn)證是否已創(chuàng)建過(guò)同名的證書(shū)
keytool -list -v -alias tomcat -keystore "JAVA_HOME/JRE/LIB/SECURITY/CACERTS" -storepass changeit
3.2 刪除已創(chuàng)建的證書(shū)
keytool -delete -alias tomcat -keystore
"JAVA_HOME/JRE/LIB/SECURITY/CACERTS" -storepass changeit
3.3 創(chuàng)建證書(shū)
1. 服務(wù)器中生成證書(shū):(注:生成證書(shū)時(shí),CN 要和服務(wù)器的域名相同,如果在本地測(cè)試,則使用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. 導(dǎo)出證書(shū),由客戶端安裝: