如今web應用使用https方式進行訪問是很廣泛的了,今天(1月29日)纔出了一個新聞:Chrome力推HTTPS:HTTP網站被標註爲不安全。因此說,爲本身的網站添加SSL的鏈接支持刻不容緩啊,本文就來講一下Tomcat的SSL鏈接支持。html
本文的說明使用「第三方」給的證書,因此不涉及證書製做,使用APR引擎,因此須要安裝APR以及tomcat-native,參考tomcat官方文檔。
linux
本文基於linux系統上的tomcat-8.0.30,已經安裝好了apr以及tomcat-native,關於apr以及tomcat-native的安裝參考個人另外一篇博客:爲Linux上的Tomcat安裝apr支持。web
雖說能夠使用jdk自帶工具製做證書,網上(包括tomcat官方文檔的大部分)都有不少說明,可是這樣的證書是不符合真實環境的,真實的環境是由「第三方」的機構進行證書頒發,不然每次都會提示證書不受信,並且在地址欄前面還會有看起來像出錯的提示。算法
因此,咱們這裏直接使用由「第三方」頒發的證書,證書有兩個文件:公鑰和私鑰。具體的文件名取決於證書的具體算法、類型什麼的,反正是兩個文件。chrome
這裏我獲得的證書的公鑰文件名爲「serversert.pem」,私鑰文件名爲「serverkey.pem」,其實能夠重命名一下,可是我也就不重命名了。將這兩個文件放到目錄「/etc/ssl」裏面,要是放到其餘目錄也行,待會兒的配置路徑對應修改就是。apache
首先須要修改「<tomcat-dir>/conf/server.xml」文件,在默認的文件的基礎上,將默認的tomcat
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
修改成安全
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />
而後將默認添加了註釋的服務器
<!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> -->
去掉註釋,並修改成app
<Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="200" SSLEnabled="true" scheme="https" secure="true" SSLCertificateFile="/etc/ssl/serversert.pem" SSLCertificateKeyFile="/etc/ssl/serverkey.pem" SSLVerifyClient="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2" />
緊接着這個的下面,將
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
修改成
<Connector port="8009" protocol="AJP/1.3" redirectPort="443" />
這樣實際上已經開啓了https的支持的了,可是尚未實現對http鏈接到https的跳轉的,須要將http(80端口)的鏈接跳轉到https(443端口)還須要下面的配置。
修改「<tomcat-dir>/conf/web.xml」文件,在文件最後
</welcome-file-list> </web-app>
在這中間加入配置,使之成爲
</welcome-file-list> <!-- SSL --> <login-config> <!-- Authorization setting for SSL --> <auth-method>CLIENT-CERT</auth-method> <realm-name>Client Cert Users-only Area</realm-name> </login-config> <security-constraint> <!-- Authorization setting for SSL --> <web-resource-collection> <web-resource-name >SSL</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> </web-app>
至此,配置完成!
配置完成以後,啓動服務器,使用「http://<host>」不指定端口訪問服務器,正確狀況下,應該自動跳轉到"https://<host>",至關於會自動從80跳轉到443端口,這都是http和https的默認端口,若是須要其餘端口,配置的時候指定另外的端口便可。
server.xml裏面鏈接協議須要系統的OpenSSL庫支持對應的協議才行,我實驗的時候在一臺OpenSSL庫爲「0.9.8.e」版本的時候就只能使用TLSv1版本。