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)。算法
我在前面的《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工具建立證書的命令爲:服務器
- keytool -genkeypair -alias "tomcat" -keyalg "RSA"
以上命令將生產一對非對稱密鑰和自我簽名的證書,這個命令中幾個參數的意思以下:網絡
首先會提示輸入keystore的密碼,這裏我輸入的密碼是sunchis。工具
而後提示輸入我的信息,如姓名、組織單位和所在城市等,只要輸入真實信息便可。
接着會提示輸入信息是否正確,輸入「y」表示信息正確。
最後要求輸入<Tomcat>的主密碼,這裏設置與keystore相同的密碼,所以只需根據提示按回車鍵便可。
以上命令將在操做系統的用戶目錄下生成名爲「.keystore」的文件。我當前登陸到操做系統的用戶名是XuLiang,那麼在Wnidows下,文件的位置爲:
C:\Documents and Settings\XuLiang\.keystore
在Linux下,該文件的位置爲:home\XuLiang\.keystore
另外,若是但願生成的keystore文件存放在其餘目錄中,能夠再keytool命令中加入-keystore參數,這個參數用來指定keystore文件的存放位置,例如如下命令將在D:\下生成名爲「sunchis.keystore」的文件:
- keytool -genkeypair -alias "tomcat" -keyalg "RSA" –keystore "D:\sunchis.keystore"
查看已生成的證書的命令爲:
- keytool -list -keystore "C:\Documents and Settings\XuLiang\.keystore"
在Tomcat的server.xml文件中,已經提供了現成的配置SSL鏈接器的代碼,只要把<Connector>元素的註釋去掉便可:
- <!—
- Define a SSL HTTP/1.1 Connector on port 8443
- This connector uses the JSSE configuration, when using APR, the
- connector should be using the OpenSSL style configuration
- described in the APR documentation
- -->
- <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
- maxThreads="150" scheme="https" secure="true"
- clientAuth="false" sslProtocol="TLS"
- keystoreFile="C:\Documents and Settings\XuLiang\.keystore"
- keystorePass="SUNCHIS"
- ciphers="sunchis"
- />
實際上,基於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 | 指定套接字可用的用於加密的密碼清單,多個密碼間以逗號(,)分隔。若是此項沒有設定,在默認狀況下,套接字可使用任意一個可用的密碼。 |
因爲SSL技術已創建到絕大多數瀏覽器和Web服務器程序中,所以,僅需在Web服務器端安裝服務器證書就能夠激活SSL功能了。
若是上述的第一步和第二步已經配置完畢,那麼就能夠重啓Tomcat服務器了,而後從IE瀏覽器中以HTTPS方式來訪問在Tomcat服務器上的任何一個Web應用。如今咱們就來訪問一下這個地址:
當Tomcat收到這一HTTPS請求後,會向客戶的瀏覽器發送服務器的安全證書,IE瀏覽器接受到證書後,將向客戶顯示安全警報窗口,以下圖:
在安全警報窗口中的第一行提示信息爲:「您與該站點交換的信息不會被其餘人查看或更改。但該站點的安全證書有問題。」這句話的意思是,一方面,該安全證書非權威機構頒發,不能做爲有效的驗證對方身份的憑據。另外一方面,假如與對方通訊,通訊數據會通過加密後在網絡上傳輸,所以不會被他人監視或修改。
若是單擊「【否】」按鈕,就表示不信任該服務器出示的安全證書,所以瀏覽器會結束與Tomcat服務器的通訊。
若是單擊「【是】」按鈕,表示信任Tomcat服務器出示的安全證書,瀏覽器將創建與Tomcat服務器的SSL會話,Tomcat服務器就會把客戶請求的數據發送過來。
若是單擊「【查看證書】」按鈕,將出現證書窗口,以下圖:
從圖中能夠看到證書的「頒發者」和「頒發給」都是同一我的,這說明是自我簽名的證書,非權威機構頒發。
從證書的詳細信息中能夠看出,在證書中公佈了證書發送者的身份和公鑰。而私鑰只有證書發送者擁有,不會向證書接受者公開。