配置Tomcat 4使用SSL

配置Tomcat 4使用SSL

目前介紹配置Tomcat 4使用單向SSL認證(只驗證服務器證書)的資料很多,過程也比較簡單。但是由於配置其使用雙向SSL認證(還需要驗證客戶端個人證書)除了需要CA對證書籤名外,還要從CA獲得個人證書。有關這一問題,目前結合具體web服務器來講解如何操作的資料很少。作者通過摸索藉助一些SSL工具在本地實現了簡單的CA功能,並在此基礎上配置成功了Tomcat的雙向認證,希望能把其中的一些經驗與大家共享。不過受本人水平所限,文中難免會有錯誤與不當之處,敬請大家諒解。
1.Tomcat簡介
Tomcat是Apache Jakarta的子項目之一,作爲一個優秀的開源web應用服務器,全面支持jsp1.2以及servlet2.3規範。因其技術先進、性能穩定,而且免費,因而深受Java愛好者的喜愛並得到了部分軟件開發商的認可,成爲目前比較流行的web應用服務器。

2.SSL(Server Socket Layer)簡介
在網絡上信息在源-宿的傳遞過程中會經過其它的計算機。一般情況下,中間的計算機不會監聽路過的信息。但在使用網上銀行或者進行信用卡交易的時候有可能被監視,從而導致個人隱私的泄露。由於Internet和Intranet體系結構的原因,總有某些人能夠讀取並替換用戶發出的信息。隨着網上支付的不斷髮展,人們對信息安全的要求越來越高。因此Netscape公司提出了SSL協議,旨在達到在開放網絡(Internet)上安全保密地傳輸信息的目的,這種協議在WEB上獲得了廣泛的應用。 之後IETF(www.ietf.org)對SSL作了標準化,即RFC2246,並將其稱爲TLS(Transport Layer Security),從技術上講,TLS1.0與SSL3.0的差別非常微小。

3.SSL工作原理
SSL協議使用不對稱加密技術實現會話雙方之間信息的安全傳遞。可以實現信息傳遞的保密性、完整性,並且會話雙方能鑑別對方身份。不同於常用的http協議,我們在與網站建立SSL安全連接時使用https協議,即採用https://ip:port/的方式來訪問。

當我們與一個網站建立https連接時,我們的瀏覽器與Web Server之間要經過一個握手的過程來完成身份鑑定與密鑰交換,從而建立安全連接。具體過程如下:

用戶瀏覽器將其SSL版本號、加密設置參數、與session有關的數據以及其它一些必要信息發送到服務器。
服務器將其SSL版本號、加密設置參數、與session有關的數據以及其它一些必要信息發送給瀏覽器,同時發給瀏覽器的還有服務器的證書。如果配置服務器的SSL需要驗證用戶身份,還要發出請求要求瀏覽器提供用戶證書。
客戶端檢查服務器證書,如果檢查失敗,提示不能建立SSL連接。如果成功,那麼繼續。
客戶端瀏覽器爲本次會話生成pre-master secret,並將其用服務器公鑰加密後發送給服務器。
如果服務器要求鑑別客戶身份,客戶端還要再對另外一些數據簽名後並將其與客戶端證書一起發送給服務器。
如果服務器要求鑑別客戶身份,則檢查簽署客戶證書的CA是否可信。如果不在信任列表中,結束本次會話。如果檢查通過,服務器用自己的私鑰解密收到的pre-master secret,並用它通過某些算法生成本次會話的master secret。
客戶端與服務器均使用此master secret生成本次會話的會話密鑰(對稱密鑰)。在雙方SSL握手結束後傳遞任何消息均使用此會話密鑰。這樣做的主要原因是對稱加密比非對稱加密的運算量低一個數量級以上,能夠顯著提高雙方會話時的運算速度。
客戶端通知服務器此後發送的消息都使用這個會話密鑰進行加密。並通知服務器客戶端已經完成本次SSL握手。
服務器通知客戶端此後發送的消息都使用這個會話密鑰進行加密。並通知客戶端服務器已經完成本次SSL握手。
本次握手過程結束,會話已經建立。雙方使用同一個會話密鑰分別對發送以及接受的信息進行加、解密。

4.配置Tomcat 4.x 使用SSL

4.1 用到的軟件包


Tomcat 4.0.2
用途:Web Server。
下載:http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.3/bin/
JSSE 1.0,2
用途:用來產生Tocmcat使用的祕鑰對(keystore)。
下載: http://java.sun.com/products/jsse/
Openssl 0.9.9.6
用途:用來產生CA證書、簽名並生成IE可導入的PKCS#12格式私鑰。
下載:http://www.openssl.org/
以上工具的安裝過程可以參考自帶的幫助,本文就不再詳細描述了。

4.2 建立自己的CA

4.2.1 建立工作目錄
mkdir ca

4.2.2 生成CA私鑰以及自簽名根證書
4.2.2.1 生成CA私鑰
openssl genrsa -out ca/ca-key.pem 1024


4.2.2.2 生成待簽名證書
openssl req -new -out ca/ca-req.csr -key ca/ca-key.pem


4.2.2.3 用CA私鑰進行自簽名
openssl x509 -req -in ca/ca-req.csr -out ca/ca-cert.pem -signkey ca/ca-key.pem -days 365

4.3 設置Tomcat 4.x
在本文中用符號"%JDK_HOME%"來表示JDK的安裝位置,用符號"%TCAT_HOME%" 表示Tomcat的安裝位置。

4.3.1建立工作目錄
mkdir server

4.3.2 生成server端證書
4.3.2.1 生成KeyPair
%JDK_HOME%/bin/keytool -genkey -alias tomcat_server -validity 365 -keyalg RSA -keysize 1024 -keypass changeit -storepass changeit -dname "cn=localhost, ou=department, o=company, l=Beijing, st=Beijing, c=CN" -keystore server/server_keystore

4.3.2.2 生成待簽名證書
%JDK_HOME%/bin/keytool -certreq -alias tomcat_server -sigalg MD5withRSA -file server/server.csr -keypass changeit -keystore server/server_keystore -storepass changeit

4.3.2.3 用CA私鑰進行簽名
openssl x509 -req -in server/server.csr -out server/server-cert.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -days 365

4.3.2.4 導入信任的CA根證書到JSSE的默認位置(%JDK_ROOT %/jre/security/cacerts)
%JDK_HOME%/bin/keytool -import -v -trustcacerts -storepass changeit -alias my_ca_root -file ca/ca-cert.pem -keystore %JDK_HOME%/jre/lib/security/cacerts

4.3.2.5 把CA簽名後的server端證書導入keystore
%JDK_HOME%/bin/keytool -import -v -trustcacerts -storepass changeit -alias tomcat_server -file server/server-cert.pem -keystore server/server_keystore

4.3.2.6 查看server端證書
keytool -list -keystore %JDK_HOME%/jre/lib/security/cacerts
keytool -list -keystore server/server_keystore

4.3.3 修改server.xml使Tomcat支持SSL
首先找到以下內容,去掉對其的註釋。然後參照紅色部分修改。如果配置Tomcat不驗證客戶身份,可以設置clientAuth="false"。
port="8443" minProcessors="5" maxProcessors="75"
enableLookups="true"
acceptCount="10" debug="0" scheme="https" secure="true">
clientAuth="true" protocol="TLS"
keystoreFile="%TCAT_HOME%/conf/server_keystore" keystorePass="changeit"
/>


然後把文件server/server_keystore複製到目錄%TCAT_HOME%/conf/下。

4.4 在IE中安裝個人證書
4.4.1 建立工作目錄
mkdir client

4.4.2 生成client私鑰並用CA私鑰簽名

4.4.2.1 生成client私鑰
openssl genrsa -out client/client-key.pem 1024

4.4.2.2 生成待簽名證書
openssl req -new -out client/client-req.csr -key client/client-key.pem

4.4.2.3 用CA私鑰進行簽名
openssl x509 -req -in client/client-req.csr -out client/client.crt -signkey client/client-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 365

4.4.2.4 生成client端的個人證書
因爲JSSE1.0.2沒有完全實現了對PKCS#12格式文件的操作(只能讀取,不能輸出),所以在這裏需要用openssl製作client端的個人證書(包含私鑰)。
openssl pkcs12 -export -clcerts -in client/client.crt -inkey client/client-key.pem -out client/client.p12

4.4.2.5 安裝信任的根證書
把ca/ca-key.pem改名爲ca/ca-key.cer,在client端的IE中使用"工具 ' Internet選項 ' 內容 ' 證書 ' 導入"把我們生成的CA根證書導入,使其成爲用戶信任的CA。

4.4.3 安裝個人證書
把client.p12導入到client端的IE中作爲個人證書,導入過程同4.4.2.5。

4.5 用IE瀏覽器使用SSL協議訪問Tomcat

4.5.1 啓動Tomcat 4.x
執行%TCAT_HOME%/bin/startup.bat啓動Tomcat 4.x

4.5.2 用IE訪問Tomcat 4.x
在IE瀏覽器的地址欄中輸入https://localhost:8443,如果前面的操作都正確的話,應該可以看到Tomcat的歡迎頁面。同時狀態欄上的小鎖處於閉合狀態,表示您已經成功地與服務器建立了要求客戶端驗證的SSL安全連接。

5 結論
以上我們實現了爲Tomcat 4.x配置要求客戶端驗證的SSL的全過程。對於其它類型的服務器,例如Apache,Netscape Enterprise Server, Websphere,Weblogic等,一般只是在服務器端保存證書的方式略有不同,但它們的原理都是類似的,配置時可以在本文中辦法的基礎上做出相應的調整。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章