如何配置Tomcat以支持SSL
如何配置Tomcat 以支持SSL1、技術(shù)背景SSL(Server Socket Layer)簡介在網(wǎng)絡(luò)上信息在源-宿的傳遞過程中會經(jīng)過其它的計算機(jī)。一般情況下,中間的計算機(jī)不會監(jiān)聽路過的信息。但在使
如何配置Tomcat 以支持SSL
1、技術(shù)背景
SSL(Server Socket Layer)簡介
在網(wǎng)絡(luò)上信息在源-宿的傳遞過程中會經(jīng)過其它的計算機(jī)。一般情況下,中間的計算機(jī)不會監(jiān)聽路過的信息。但在使用網(wǎng)上銀行或者進(jìn)行信用卡交易的時候有可能被監(jiān)視,從而導(dǎo)致個人隱私的泄露。由于Internet 和Intranet 體系結(jié)構(gòu)的原因,總有某些人能夠讀取并替換用戶發(fā)出的信息。隨著網(wǎng)上支付的不斷發(fā)展,人們對信息安全的要求越來越高。因此Netscape 公司提出了SSL 協(xié)議,旨在達(dá)到在開放網(wǎng)絡(luò)(Internet)上安全保密地傳輸信息的目的,這種協(xié)議在WEB 上獲得了廣泛的應(yīng)用。 之后IETF(www.ietf.org)對SSL 作了標(biāo)準(zhǔn)化,即RFC2246,并將其稱為TLS (Transport Layer Security),從技術(shù)上講,TLS1.0與SSL3.0的差別非常微小。
SSL 工作原理
SSL 協(xié)議使用不對稱加密技術(shù)實現(xiàn)會話雙方之間信息的安全傳遞。可以實現(xiàn)信息傳遞的保密性、完整性,并且會話雙方能鑒別對方身份。不同于常用的http 協(xié)議,我們在與網(wǎng)站建立SSL 安全連接時使用https 協(xié)議,即采用https://ip:port/的方式來訪問。
當(dāng)我們與一個網(wǎng)站建立https 連接時,我們的瀏覽器與Web Server之間要經(jīng)過一個握手的過程來完成身份鑒定與密鑰交換,從而建立安全連接。具體過程如下:
1. 用戶瀏覽器將其SSL 版本號、加密設(shè)置參數(shù)、與session 有關(guān)的數(shù)據(jù)以及其它一
些必要信息發(fā)送到服務(wù)器。
2. 服務(wù)器將其SSL 版本號、加密設(shè)置參數(shù)、與session 有關(guān)的數(shù)據(jù)以及其它一些必
要信息發(fā)送給瀏覽器,同時發(fā)給瀏覽器的還有服務(wù)器的證書。如果配置服務(wù)器的
SSL 需要驗證用戶身份,還要發(fā)出請求要求瀏覽器提供用戶證書。
3. 客戶端檢查服務(wù)器證書,如果檢查失敗,提示不能建立SSL 連接。如果成功,那
么繼續(xù)。
4. 客戶端瀏覽器為本次會話生成pre-master secret ,并將其用服務(wù)器公鑰加密后發(fā)
送給服務(wù)器。
5. 如果服務(wù)器要求鑒別客戶身份,客戶端還要再對另外一些數(shù)據(jù)簽名后并將其與客戶
端證書一起發(fā)送給服務(wù)器。
6. 如果服務(wù)器要求鑒別客戶身份,則檢查簽署客戶證書的CA 是否可信。如果不在信
任列表中,結(jié)束本次會話。如果檢查通過,服務(wù)器用自己的私鑰解密收到的
pre-master secret,并用它通過某些算法生成本次會話的master secret。
7. 客戶端與服務(wù)器均使用此master secret 生成本次會話的會話密鑰(對稱密鑰) 。在
雙方SSL 握手結(jié)束后傳遞任何消息均使用此會話密鑰。這樣做的主要原因是對稱
加密比非對稱加密的運(yùn)算量低一個數(shù)量級以上,能夠顯著提高雙方會話時的運(yùn)算速
,度。
8. 客戶端通知服務(wù)器此后發(fā)送的消息都使用這個會話密鑰進(jìn)行加密。并通知服務(wù)器客
戶端已經(jīng)完成本次SSL 握手。
9. 服務(wù)器通知客戶端此后發(fā)送的消息都使用這個會話密鑰進(jìn)行加密。并通知客戶端服
務(wù)器已經(jīng)完成本次SSL 握手。
10. 本次握手過程結(jié)束,會話已經(jīng)建立。雙方使用同一個會話密鑰分別對發(fā)送以及接受
的信息進(jìn)行加、解密。
2、Java 環(huán)境配置
2.1 JSSE: Java SSL extension
用來支持Java 程序的SSL 。
2.2 Keystore
Java 把密鑰、證書等都放到一個文件中,并且一個文件可以放多個密鑰對和證書信息,并用別名alias 來區(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 ),則可略過下面的步驟。
下載JSSE ,URL: (注意,JDK1.4以
上版本已經(jīng)集成JSSE 了,不需要再下載) ,一般來說都只能download 全球版本(還有個版本是美國/加拿大版本,加密位數(shù)沒有限制);
安裝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)本來就有這一行)
(注意數(shù)字2應(yīng)該是你的系統(tǒng)security.provider.2=com.sun.net.ssl.internal.ssl.Provider
確定你的系統(tǒng)有下面文件的其中一個:
1) JA V A_HOME/jre/lib/security/jssecacerts或者
2) JA V A_HOME/jre/lib/security/cacerts 原有的最大provider 數(shù)再加一,不一定是2;但一般把它的優(yōu)先級設(shè)為2,而改其它的)
3、申請服務(wù)器證書過程
申請服務(wù)器證書過程如下:
建立保存證書相關(guān)信息的目錄
如:e:myServerCert。
在dos 窗口中敲入以下命令生成keystore 文件,如圖一所示
%java_homebinkeytool -genkey -alias tomcatTest -keyalg RSA -size 2048 -keystore e:myServerCertserverKey.keystore
,說明:
將提示您輸入保護(hù)keystore 的密碼,至少為六位。
注意問題:姓氏可輸入域名,中國的國家代碼是:CN
-lias tomcatTest 中的tomcatTest 為別名 可以任意輸入
請到e:myServerCert 目錄下確認(rèn)是否生成文件 serverKey.keystore
沒有-size 2048的指定,默認(rèn)產(chǎn)生的是2048位的密鑰對
圖一
產(chǎn)生certificate signature request (CSR) 用來向CA 頒發(fā)機(jī)構(gòu)申請有效
的服務(wù)器證書
%java_homebinkeytool –certreq -keyalg RSA -alias tomcatTest -file e:myServerCert ?rtreq.csr -storepass lxz2003 -keystore e:myServerCertserverKey.keystore
命令行的說明:
-alias tomcatTest 在生成.keystore 的別名
-storepass 訪問.keystore 的密碼
-file certreq.csr 生成證書請求存放的文件
在e:myServerCert目錄下找到certreq.csr 文件用文本編輯器(如notepad.exe 、ultraedit.exe )打開(注意千萬不要改變其中的內(nèi)容或用word 等帶有一定格式的字處理軟件編輯或存儲以上信息。)文件內(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)站提交證書請求,下載證書
得Web Server證書的參考號和授權(quán)碼后,訪問CFCA 統(tǒng)一下載平臺(生產(chǎn)系統(tǒng),測試系統(tǒng):)。
進(jìn)入界面后,如果沒有下載CA 證書鏈的話,可以在該頁面上先點擊下載證書鏈(詳細(xì)介紹見本章4.2),然后點擊“Web 服務(wù)器證書下載”
選擇“接受此協(xié)議”進(jìn)入下載界面,輸入?yún)⒖继柡褪跈?quán)碼,并在“選項”中選擇返回的證書的數(shù)據(jù)格式。例如選擇DER (默認(rèn)的方式),把前面得到的PKCS#10格式證書請求(certreq.csr 中的內(nèi)容)粘貼到下面的文本框。
提交該表單,證書將被產(chǎn)生并返回。
保存證書到指定目錄,證書申請完成
,5、安裝下載CFCA 測試證書鏈
在在證書下載平臺(測試系統(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(測試系統(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(如果是測試系統(tǒng)就是CFCARCA.cer )
導(dǎo)入可信任的中級證書到你的.keystore 文件中
%java_homebinkeytool -import -alias ca2 –storepass changeit -keystore
java_home jrelibsecurity?certs -trustcacerts -file C:Downloadsb_Tcerts Operation_CA2.cer(如果是測試系統(tǒng)就是CFCATESTCA.cer )
導(dǎo)入剛申請的服務(wù)器證書到你的.keystore 文件中
%java_homebinkeytool -import -alias tomcatTest -storepass lxz2003 -keystore
,e:myServerCertserverKey.keystore -trustcacerts -file e:myServerCertservercert.cer
注意:-storepass 、-keystore 后面的參量與導(dǎo)入CA 證書的時候不同?。?!
驗證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":客戶端無須出示證書,單向SSL 。
6.2 測試服務(wù)器證書是否成功安裝
重新啟動TOMCA T, 打開IE 瀏覽器在地址欄內(nèi)輸入:https://127.0.0.1:8443/index.jsp出現(xiàn)如下頁面表示TOMCA T 服務(wù)器證書配置成功,圖十一
,圖十一
圈選部分雙擊可顯示證書信息。
如果在TOMCAT 的server.xml 配置中將clientAuth="false"改為“true ”,則客戶端必須申請客戶端證書,如沒有客戶端證書則被拒絕訪問(最好設(shè)置為true )顯示如下頁面,圖十二。
圖十二
7附錄
由于tomcat 不同版本在配置服務(wù)器證書的部分有可能有不同,所以把我們已知的tomcat 版本配置的情況補(bǔ)充在此,作為參考。
7.1 Tomcat6.0 SSL的配置
1. 參考:
Tomcat 6.0 自帶的文檔docs/ssl-howto.html,詳細(xì)介紹了配置過程。
2. 目的:
以下詳細(xì)描述配置過程,僅作為備忘錄。
3. 備忘錄:
Step1,安裝tomcat 6.0.18,此為當(dāng)前最新版本,需JDK5.0或以上。
l JDK 安裝后,可以在命令行下使用如下命令檢測是否成功。
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
您的組織單位名稱是什么?