《Tomcat6和Tomcat7配置SSL通訊的比較》
作者:chszs,轉載需註明。部落客頁:http://blog.csdn.net/chszs
在項目開發過程中,嘗嘗會遇到Tomcat需要SSL通訊的需求。尤其是在需要安全Web應用時,需要HTTPS協議的通訊。由於Tomcat預設情況下沒有提供SSL通訊設定,因此必須明白如何在Tomcat下配置SSL。更糟糕的是,Tomcat的不同版本,其SSL配置有所不同。所以,本文將講述如何在Tomcat的主要版本(即6和7)下,配置SSL通訊。
SSL、HTTPS和認證是任何Java程式員都應該瞭解的基礎知識,尤其是對那些開發金融和安全敏感類的互連網應用的開發人員。SSL、HTTPS和認證三者的協同工作,保證了用戶端和伺服器的安全通訊。
開發使用HTTP協議訪問的Web應用,安全是主要關心的問題。由於HTTP協議是以純文字格式傳輸資料的,它在傳輸敏感資訊(如使用者名稱、密碼、社保號、信用卡資訊等)時,是很不安全的。HTTP協議不能保證網站的可靠性,URL的重新導向可以使得假冒網站代替真正的網站,HTTP是不會阻止這一切的,也不會提醒使用者。
HTTPS和SSL就是解決上述問題的。HTTPS是HTTP之上的SSL,SSL代表安全通訊端層,它提供了網站的加密和驗證。所以,那些商務網站、銀行都在使用HTTPS協議。當使用HTTPS協議進行資料轉送時,在用戶端和伺服器端之間傳輸前,資料是加密了的。因此,任何人都可以攔截或捕獲HTTPS,但是看不到真實的內容。SSL還利用第三方發行機構(如VeriSign、godaddy,thwate等)發行的認證來驗證網站的真實可靠性。
認證是怎樣工作的呢?當用戶端瀏覽器使用HTTPS串連到伺服器,伺服器返回第三方機構發行的認證。如果認證是Java程式,能訪問到認證keystore和truststore的存根,瀏覽器端也有儲存的可信認證,可驗證伺服器提供的認證。如果瀏覽器或任何Java用戶端,沒有找到這些認證,它會警告說認證不可識別,推薦你不訪問此網站。你也可以手動信任任何網站,請求瀏覽器相信伺服器提供的認證。
在開發的情況下,Tomcat返回自簽名的認證或測試認證。對於Java程式員,JDK內建了一個keytool工具,他能用於建立自簽名的認證,並儲存到keystore和truststore供使用。
你可以從Windows的支援小組請求認證,或者使用工具如IBM IkeyMan或keytool命令產生認證,並放入truststore和keystore中。
一旦認證已經準備好,開啟Tomcat/conf目錄下的server.xml設定檔,尋找Connector標籤,它定義HTTPS通訊,通常它被注釋掉了,所以可以尋找“Define a SSL HTTP/1.1 Connector on port 8443”,一旦找到,使用下面的配置進行替換。
在Tomcat6中定義SSL通訊:
<Connector protocol="org.apache.coyote.http11.Http11Protocol" port="8443" minSpareThreads="5" maxSpareThreads="75" enableLookups="true" disableUploadTimout="true" acceptCount="100" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" clientAuth="false" sslProtocol="TLS" keystoreFile="${catalina.home}/conf/server.jks" keystoreType="JKS" keystorePass="changeit" />
還需修改這個:
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
在Tomcat7中配置SSL通訊:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="${catalina.home}/conf/server.jks" keystoreType="JKS" keystorePass="changeit" />
怎樣配置Java Web程式使用HTTPS
如果想要你的JavaEE Web程式使用HTTPS協議實現SSL通訊,你需要在web.xml設定檔中添加:
<security-constraint> <web-resource-collection> <web-resource-name>HelloSSL</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint></security-constraint>