如何配置Tomcat以支持SSL
如何配置Tomcat 以支持SSL1、技術(shù)背景SSL(Server Socket Layer)簡(jiǎn)介在網(wǎng)絡(luò)上信息在源-宿的傳遞過(guò)程中會(huì)經(jīng)過(guò)其它的計(jì)算機(jī)。一般情況下,中間的計(jì)算機(jī)不會(huì)監(jiān)聽路過(guò)的信息。但在使
如何配置Tomcat 以支持SSL
1、技術(shù)背景
SSL(Server Socket Layer)簡(jiǎn)介
在網(wǎng)絡(luò)上信息在源-宿的傳遞過(guò)程中會(huì)經(jīng)過(guò)其它的計(jì)算機(jī)。一般情況下,中間的計(jì)算機(jī)不會(huì)監(jiān)聽路過(guò)的信息。但在使用網(wǎng)上銀行或者進(jìn)行信用卡交易的時(shí)候有可能被監(jiān)視,從而導(dǎo)致個(gè)人隱私的泄露。由于Internet 和Intranet 體系結(jié)構(gòu)的原因,總有某些人能夠讀取并替換用戶發(fā)出的信息。隨著網(wǎng)上支付的不斷發(fā)展,人們對(duì)信息安全的要求越來(lái)越高。因此Netscape 公司提出了SSL 協(xié)議,旨在達(dá)到在開放網(wǎng)絡(luò)(Internet)上安全保密地傳輸信息的目的,這種協(xié)議在WEB 上獲得了廣泛的應(yīng)用。 之后IETF(www.ietf.org)對(duì)SSL 作了標(biāo)準(zhǔn)化,即RFC2246,并將其稱為TLS (Transport Layer Security),從技術(shù)上講,TLS1.0與SSL3.0的差別非常微小。
SSL 工作原理
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ò)程如下:
1. 用戶瀏覽器將其SSL 版本號(hào)、加密設(shè)置參數(shù)、與session 有關(guān)的數(shù)據(jù)以及其它一
些必要信息發(fā)送到服務(wù)器。
2. 服務(wù)器將其SSL 版本號(hào)、加密設(shè)置參數(shù)、與session 有關(guān)的數(shù)據(jù)以及其它一些必
要信息發(fā)送給瀏覽器,同時(shí)發(fā)給瀏覽器的還有服務(wù)器的證書。如果配置服務(wù)器的
SSL 需要驗(yàn)證用戶身份,還要發(fā)出請(qǐng)求要求瀏覽器提供用戶證書。
3. 客戶端檢查服務(wù)器證書,如果檢查失敗,提示不能建立SSL 連接。如果成功,那
么繼續(xù)。
4. 客戶端瀏覽器為本次會(huì)話生成pre-master secret ,并將其用服務(wù)器公鑰加密后發(fā)
送給服務(wù)器。
5. 如果服務(wù)器要求鑒別客戶身份,客戶端還要再對(duì)另外一些數(shù)據(jù)簽名后并將其與客戶
端證書一起發(fā)送給服務(wù)器。
6. 如果服務(wù)器要求鑒別客戶身份,則檢查簽署客戶證書的CA 是否可信。如果不在信
任列表中,結(jié)束本次會(huì)話。如果檢查通過(guò),服務(wù)器用自己的私鑰解密收到的
pre-master secret,并用它通過(guò)某些算法生成本次會(huì)話的master secret。
7. 客戶端與服務(wù)器均使用此master secret 生成本次會(huì)話的會(huì)話密鑰(對(duì)稱密鑰) 。在
雙方SSL 握手結(jié)束后傳遞任何消息均使用此會(huì)話密鑰。這樣做的主要原因是對(duì)稱
加密比非對(duì)稱加密的運(yùn)算量低一個(gè)數(shù)量級(jí)以上,能夠顯著提高雙方會(huì)話時(shí)的運(yùn)算速
,度。
8. 客戶端通知服務(wù)器此后發(fā)送的消息都使用這個(gè)會(huì)話密鑰進(jìn)行加密。并通知服務(wù)器客
戶端已經(jīng)完成本次SSL 握手。
9. 服務(wù)器通知客戶端此后發(fā)送的消息都使用這個(gè)會(huì)話密鑰進(jìn)行加密。并通知客戶端服
務(wù)器已經(jīng)完成本次SSL 握手。
10. 本次握手過(guò)程結(jié)束,會(huì)話已經(jīng)建立。雙方使用同一個(gè)會(huì)話密鑰分別對(duì)發(fā)送以及接受
的信息進(jìn)行加、解密。
2、Java 環(huán)境配置
2.1 JSSE: Java SSL extension
用來(lái)支持Java 程序的SSL 。
2.2 Keystore
Java 把密鑰、證書等都放到一個(gè)文件中,并且一個(gè)文件可以放多個(gè)密鑰對(duì)和證書信息,并用別名alias 來(lái)區(qū)分不同的密鑰和證書,存放這些信息的文件叫做keystore 。
2.3 Keytool
JDK 自帶的用于管理keystore 的工具,具有密鑰生成、導(dǎo)入、導(dǎo)出,證書生成、導(dǎo)入、導(dǎo)出等強(qiáng)大的功能。
2.4 安裝配置
確定已安裝有JDK1.2以上版本(java -version);如果你的機(jī)器安裝了jdk1.4 以上版本(集成了SSL 、keystore 和keytool ),則可略過(guò)下面的步驟。
下載JSSE ,URL: (注意,JDK1.4以
上版本已經(jīng)集成JSSE 了,不需要再下載) ,一般來(lái)說(shuō)都只能download 全球版本(還有個(gè)版本是美國(guó)/加拿大版本,加密位數(shù)沒(méi)有限制);
安裝JSSE ,主要是把JSSE 包內(nèi)的lib/*.jar拷貝到JA V A_HOME/jre/lib/ext/下,并且
加入到CLASSPA TH 中 (這一步很重要) ;
編輯JA V A_HOME/jre/lib/security/java.security文件,主要是添加:
security.provider.1=sun.security.provider.Sun (一般系統(tǒng)本來(lái)就有這一行)
(注意數(shù)字2應(yīng)該是你的系統(tǒng)security.provider.2=com.sun.net.ssl.internal.ssl.Provider
確定你的系統(tǒng)有下面文件的其中一個(gè):
1) JA V A_HOME/jre/lib/security/jssecacerts或者
2) JA V A_HOME/jre/lib/security/cacerts 原有的最大provider 數(shù)再加一,不一定是2;但一般把它的優(yōu)先級(jí)設(shè)為2,而改其它的)
3、申請(qǐng)服務(wù)器證書過(guò)程
申請(qǐng)服務(wù)器證書過(guò)程如下:
建立保存證書相關(guān)信息的目錄
如:e:myServerCert。
在dos 窗口中敲入以下命令生成keystore 文件,如圖一所示
%java_homebinkeytool -genkey -alias tomcatTest -keyalg RSA -size 2048 -keystore e:myServerCertserverKey.keystore
,說(shuō)明:
將提示您輸入保護(hù)keystore 的密碼,至少為六位。
注意問(wèn)題:姓氏可輸入域名,中國(guó)的國(guó)家代碼是:CN
-lias tomcatTest 中的tomcatTest 為別名 可以任意輸入
請(qǐng)到e:myServerCert 目錄下確認(rèn)是否生成文件 serverKey.keystore
沒(méi)有-size 2048的指定,默認(rèn)產(chǎn)生的是2048位的密鑰對(duì)

圖一
產(chǎn)生certificate signature request (CSR) 用來(lái)向CA 頒發(fā)機(jī)構(gòu)申請(qǐng)有效
的服務(wù)器證書
%java_homebinkeytool –certreq -keyalg RSA -alias tomcatTest -file e:myServerCert ?rtreq.csr -storepass lxz2003 -keystore e:myServerCertserverKey.keystore
命令行的說(shuō)明:
-alias tomcatTest 在生成.keystore 的別名
-storepass 訪問(wèn).keystore 的密碼
-file certreq.csr 生成證書請(qǐng)求存放的文件
在e:myServerCert目錄下找到certreq.csr 文件用文本編輯器(如notepad.exe 、ultraedit.exe )打開(注意千萬(wàn)不要改變其中的內(nèi)容或用word 等帶有一定格式的字處理軟件編輯或存儲(chǔ)以上信息。)文件內(nèi)容類似如下:
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIBqjCCARMCAQAwajELMAkGA1UEBhMCQ04xEjAQBgNVBAgTCWd1YW5nZG9u c2hlbnpoZW4xDzANBgNVBAoTBmJ5dHRlcjEPMA0GA1UECxMGYnl0dGVyMRIwEAY MC4wLjEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALKNsefgVD4KhkgKfY PP7ctq4wMqR807Q joeqqu78hwD4Dd8I4R7Fg6pl6GGMhuOVG s7j59Qf s9pdUM/Sj5ex IM5skhiYSsIgsDWMY/mMl2u212AeNKxR2bzRrWtT0OUv1yHvCmE6CmifqKce51R3Ag BgkqhkiG9w0BAQQFAAOBgQBOq79Rhmt2yo1B2ezUBAv6ieyMLGvYxDID/ SU8UpKw0 rpdpPEQjOPKDnQW1gXyU5zxheWMCh7K4p/r2NNf2cvzs3hGvESwx2/cjDo2q246EoZqy/ LfaUqDbvqCEVS29Z/0tL h6GEcsQU /P6wVvOZ0MFA==
,-----END NEW CERTIFICATE REQUEST-----
登陸到CFCA 網(wǎng)站提交證書請(qǐng)求,下載證書
得Web Server證書的參考號(hào)和授權(quán)碼后,訪問(wèn)CFCA 統(tǒng)一下載平臺(tái)(生產(chǎn)系統(tǒng),測(cè)試系統(tǒng):)。

進(jìn)入界面后,如果沒(méi)有下載CA 證書鏈的話,可以在該頁(yè)面上先點(diǎn)擊下載證書鏈(詳細(xì)介紹見本章4.2),然后點(diǎn)擊“Web 服務(wù)器證書下載”

選擇“接受此協(xié)議”進(jìn)入下載界面,輸入?yún)⒖继?hào)和授權(quán)碼,并在“選項(xiàng)”中選擇返回的證書的數(shù)據(jù)格式。例如選擇DER (默認(rèn)的方式),把前面得到的PKCS#10格式證書請(qǐng)求(certreq.csr 中的內(nèi)容)粘貼到下面的文本框。

提交該表單,證書將被產(chǎn)生并返回。

保存證書到指定目錄,證書申請(qǐng)完成
,5、安裝下載CFCA 測(cè)試證書鏈
在在證書下載平臺(tái)(測(cè)試系統(tǒng):


產(chǎn)系統(tǒng)http://www.cfca.com.cn/tongyi/)選擇證書鏈下載,
下載根證書鏈(將CFCA ROOT CA及CFCA OPERATION CA2下的內(nèi)容分被保存為文件),即獲得b_Cert.zip
或者直接在CFCA 網(wǎng)站上下載證書鏈(選擇APACHE 用戶下載):http://www.cfca.com.cn/zhengshu/zhengshu.htm#2
解壓b_Cert.zip(生產(chǎn)系統(tǒng))后,可以看到文件Root_CA.cer,Operation_CA2.cer。 解壓b_Tcerts.zip(測(cè)試系統(tǒng))后,可以看到文件CFCARCA.cer ,CFCATESTCA.cer 。 以生產(chǎn)系統(tǒng)為例:1744307125
導(dǎo)入可信任的根證書到你的.keystore 文件中
%java_homebinkeytool -import -alias root –storepass changeit -keystore
%java_home jrelibsecurity?certs -trustcacerts -file C:Downloadsb_TcertsRoot_CA.cer(如果是測(cè)試系統(tǒng)就是CFCARCA.cer )
導(dǎo)入可信任的中級(jí)證書到你的.keystore 文件中
%java_homebinkeytool -import -alias ca2 –storepass changeit -keystore
java_home jrelibsecurity?certs -trustcacerts -file C:Downloadsb_Tcerts Operation_CA2.cer(如果是測(cè)試系統(tǒng)就是CFCATESTCA.cer )
導(dǎo)入剛申請(qǐng)的服務(wù)器證書到你的.keystore 文件中
%java_homebinkeytool -import -alias tomcatTest -storepass lxz2003 -keystore
,e:myServerCertserverKey.keystore -trustcacerts -file e:myServerCertservercert.cer
注意:-storepass 、-keystore 后面的參量與導(dǎo)入CA 證書的時(shí)候不同?。?!
驗(yàn)證keystore 中的key pairs 和CA 的有效性
%java_homebinkeytool -list –v -alias tomcatTest –storepass lxz2003 -keystore e:myServerCertserverKey.keystore
屏幕輸出如下,圖十。

圖十
6、配置服務(wù)器(TOMCAT )開啟SSL 服務(wù)
6.1 修改tomcat 配置文件server.xml
打開TOMCAT 安裝目錄的confserver.xml文件找到如下文本,取消注釋,添加下面的紅色標(biāo)注內(nèi)容:
port="8443" minProcessors="5" maxProcessors="75" enableLookups="true" acceptCount="100" debug="0" scheme="https" secure="true" useURIValidationHack="false" disableUploadTimeout="true"> clientAuth="true" protocol="TLS" />
TOMCAT5.5按照如下配置:
maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" truststoreFile="H:?caratrust.keystore"——證書鏈文件,相當(dāng)于前文的cacerts 文件。 truststorePass=" keystoreFile="H:?caraserverssl.keystore" ——服務(wù)器證書文件, ——相當(dāng)于前文的serverKey.keystore 文件 keystorePass="" >
由于tomcat 不同版本在配置服務(wù)器證書的部分有可能有不同,所以把我們已知的tomcat 版本配置的情況補(bǔ)充在附錄,作為參考。
clientAuth="true":要求客戶端必須出示證書,雙向SSL ;
clientAuth="want":客戶端可以出示證書也可以選擇不出示證書,單雙向SSL ; clientAuth="true":客戶端無(wú)須出示證書,單向SSL 。
6.2 測(cè)試服務(wù)器證書是否成功安裝
重新啟動(dòng)TOMCA T, 打開IE 瀏覽器在地址欄內(nèi)輸入:https://127.0.0.1:8443/index.jsp出現(xiàn)如下頁(yè)面表示TOMCA T 服務(wù)器證書配置成功,圖十一
,
圖十一
圈選部分雙擊可顯示證書信息。
如果在TOMCAT 的server.xml 配置中將clientAuth="false"改為“true ”,則客戶端必須申請(qǐng)客戶端證書,如沒(méi)有客戶端證書則被拒絕訪問(wèn)(最好設(shè)置為true )顯示如下頁(yè)面,圖十二。

圖十二
7附錄
由于tomcat 不同版本在配置服務(wù)器證書的部分有可能有不同,所以把我們已知的tomcat 版本配置的情況補(bǔ)充在此,作為參考。
7.1 Tomcat6.0 SSL的配置
1. 參考:
Tomcat 6.0 自帶的文檔docs/ssl-howto.html,詳細(xì)介紹了配置過(guò)程。
2. 目的:
以下詳細(xì)描述配置過(guò)程,僅作為備忘錄。
3. 備忘錄:
Step1,安裝tomcat 6.0.18,此為當(dāng)前最新版本,需JDK5.0或以上。
l JDK 安裝后,可以在命令行下使用如下命令檢測(cè)是否成功。
C:Documents and Settingsnew>java -version
java version "1.6.0_10"
Java(TM) SE Runtime Environment (build 1.6.0_10-b33)
Java HotSpot(TM) Client VM (build 11.0-b15, mixed mode, sharing)
看到以上藍(lán)色信息,則表示JDK 安裝配置成功。
l Tomcat 的運(yùn)行需要配置JDK_HOME和JRE_HOME環(huán)境變量,JRE_HOME默認(rèn)等于JDK_HOME的值。
Step2,創(chuàng)建服務(wù)器端certificate keystore和自簽名certificate 。
在命令行下使用如下命令:
C:Documents and Settingsnew>keytool -genkey -alias mykey -keyalg RSA -keystore
server.keystore
輸入keystore 密碼:123456
再次輸入新密碼:123456
您的名字與姓氏是什么?
[Unknown]: dinstone
您的組織單位名稱是什么?