【Tomcat系列】Tomcat SSL配置及Tomcat CA證書安裝

Tomcat既能夠做爲獨立的Servlet容器,也能夠做爲其餘HTTP服務器附加的Servlet容器。若是Tomcat在非獨立模式下工做,一般沒必要配置SSL,由它從屬的HTTP服務器來實現和客戶的SSL通訊。Tomcat和HTTP服務器之間的通訊無須採用加密機制,HTTP服務器將解密後的數據傳給Tomcat,並把Tomcat發來的數據加密後傳給客戶。html

若是Tomcat做爲獨立的Java Web服務器,則能夠根據安全須要,爲Tomcat配置SSL,它包含如下兩個步驟:java

(1) 準備安全證書。web

(2) 配置Tomcat的SSL鏈接器(Connector)。算法

1、準備安全證書

我在前面的《SSL簡介》一文中講過,得到安全證書有兩種方式:一種方式是到權威機構購買,還有一種方式是建立自我簽名的證書。這裏就介紹第二種獲取證書的方式,畢竟免費的嘛!瀏覽器

SUN公司提供了製做證書的工具keytool。在JDK 1.4之後的版本中都包含了這一工具,它的位置爲<JAVA_HOME>\bin\keytool.exe。此外,也能夠到SUN的網站上下載,下載地址以下:tomcat

http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security安全

經過keytool工具建立證書的命令爲:服務器

 
  1. keytool -genkeypair -alias "tomcat" -keyalg "RSA" 

以上命令將生產一對非對稱密鑰和自我簽名的證書,這個命令中幾個參數的意思以下:網絡

  • -genkeypair:生成一對非對稱密鑰。
  • -alias:指定密鑰對的別名,該別名是公開的。
  • -keyalg:指定加密算法,本例中的採用通用的RAS加密算法

首先會提示輸入keystore的密碼,這裏我輸入的密碼是sunchis。工具

而後提示輸入我的信息,如姓名、組織單位和所在城市等,只要輸入真實信息便可。

接着會提示輸入信息是否正確,輸入「y」表示信息正確。

最後要求輸入<Tomcat>的主密碼,這裏設置與keystore相同的密碼,所以只需根據提示按回車鍵便可。

點擊放大圖片
keytool生成證書的過程

以上命令將在操做系統的用戶目錄下生成名爲「.keystore」的文件。我當前登陸到操做系統的用戶名是XuLiang,那麼在Wnidows下,文件的位置爲:

C:\Documents and Settings\XuLiang\.keystore

點擊放大圖片
證書存放的路徑

在Linux下,該文件的位置爲:home\XuLiang\.keystore

另外,若是但願生成的keystore文件存放在其餘目錄中,能夠再keytool命令中加入-keystore參數,這個參數用來指定keystore文件的存放位置,例如如下命令將在D:\下生成名爲「sunchis.keystore」的文件:

 
  1. keytool -genkeypair -alias "tomcat" -keyalg "RSA" –keystore "D:\sunchis.keystore" 

查看已生成的證書的命令爲:

 
  1. keytool -list -keystore "C:\Documents and Settings\XuLiang\.keystore" 
點擊放大圖片
查看證書信息

2、配置SSL鏈接器

在Tomcat的server.xml文件中,已經提供了現成的配置SSL鏈接器的代碼,只要把<Connector>元素的註釋去掉便可:

 
  1. <!—  
  2. Define a SSL HTTP/1.1 Connector on port 8443  
  3. This connector uses the JSSE configuration, when using APR, the   
  4. connector should be using the OpenSSL style configuration  
  5. described in the APR documentation   
  6. --> 
  7.  
  8. <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
  9.           maxThreads="150" scheme="https" secure="true" 
  10.           clientAuth="false" sslProtocol="TLS"   
  11.           keystoreFile="C:\Documents and Settings\XuLiang\.keystore" 
  12.           keystorePass="SUNCHIS" 
  13.           ciphers="sunchis" 
  14. /> 

實際上,基於SSL的HTTPS使用的默認端口是443。但Tomcat在這裏將HTTPS端口設置爲8443。<Connector>配置裏的一些屬性參數以下表:

屬 性 描 述
clientAuth 若是設爲true,表示Tomcat要求全部的SSL客戶出示安全證書,對SSL客戶進行身份驗證
keystoreFile 指定keystore文件的存放位置,能夠指定絕對路徑,也能夠指定相對於<CATALINA_HOME>(Tomcat安裝目錄)環境變量的相對路徑。若是此項沒有設定,默認狀況下,Tomcat將從當前操做系統用戶的用戶目錄下讀取名爲「.keystore」的文件。
keystorePass 指定keystore的密碼,若是此項沒有設定,在默認狀況下,Tomcat將使用「changeit」做爲默認密碼。
sslProtocol 指定套接字(Socket)使用的加密/解密協議,默認值爲TLS,用戶不該該修改這個默認值。
ciphers 指定套接字可用的用於加密的密碼清單,多個密碼間以逗號(,)分隔。若是此項沒有設定,在默認狀況下,套接字可使用任意一個可用的密碼。

3、訪問支持SSL的Web站點

因爲SSL技術已創建到絕大多數瀏覽器和Web服務器程序中,所以,僅需在Web服務器端安裝服務器證書就能夠激活SSL功能了。

若是上述的第一步和第二步已經配置完畢,那麼就能夠重啓Tomcat服務器了,而後從IE瀏覽器中以HTTPS方式來訪問在Tomcat服務器上的任何一個Web應用。如今咱們就來訪問一下這個地址:

https://localhost:8443

當Tomcat收到這一HTTPS請求後,會向客戶的瀏覽器發送服務器的安全證書,IE瀏覽器接受到證書後,將向客戶顯示安全警報窗口,以下圖:

點擊放大圖片

在安全警報窗口中的第一行提示信息爲:「您與該站點交換的信息不會被其餘人查看或更改。但該站點的安全證書有問題。」這句話的意思是,一方面,該安全證書非權威機構頒發,不能做爲有效的驗證對方身份的憑據。另外一方面,假如與對方通訊,通訊數據會通過加密後在網絡上傳輸,所以不會被他人監視或修改。

若是單擊「【否】」按鈕,就表示不信任該服務器出示的安全證書,所以瀏覽器會結束與Tomcat服務器的通訊。

若是單擊「【是】」按鈕,表示信任Tomcat服務器出示的安全證書,瀏覽器將創建與Tomcat服務器的SSL會話,Tomcat服務器就會把客戶請求的數據發送過來。

若是單擊「【查看證書】」按鈕,將出現證書窗口,以下圖:

點擊放大圖片
證書窗口

從圖中能夠看到證書的「頒發者」和「頒發給」都是同一我的,這說明是自我簽名的證書,非權威機構頒發。

點擊放大圖片
證書的詳細信息

從證書的詳細信息中能夠看出,在證書中公佈了證書發送者的身份和公鑰。而私鑰只有證書發送者擁有,不會向證書接受者公開。

相關文章
相關標籤/搜索