天天看點

Tomcat6和Tomcat7配置SSL通信的比較

在項目開發過程中,嘗嘗會遇到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"  

怎樣配置Java Web程式使用HTTPS

如果想要你的JavaEE Web程式使用HTTPS協定實作SSL通信,你需要在web.xml配置檔案中添加:

security-constraint>  

  web-resource-collection>  

    web-resource-name>HelloSSLweb-resource-name>  

    url-pattern>/*url-pattern>  

  user-data-constraint>  

    transport-guarantee>CONFIDENTIALtransport-guarantee>