為Tomcat啟用Https連接支持
來自: http://my.oschina.net/songxinqiang/blog/611535
現在web應用使用https方式進行訪問是很普遍的了,今天才發了一個新聞:Chrome力推HTTPS:HTTP網站被標注為不安全。所以說,為自己的網站添加SSL的連接支持刻不容緩啊,本文就來說一下Tomcat的SSL連接支持。
本文的說明使用“第三方”給的證書,所以不涉及證書制作,使用APR引擎,所以需要安裝APR以及tomcat-native,參考tomcat官方文檔。
0、環境準備
本文基于linux系統上的tomcat-8.0.30,已經安裝好了apr以及tomcat-native,關于apr以及tomcat-native的安裝參考我的另一篇博客:為Linux上的Tomcat安裝apr支持。
1、證書
雖然說可以使用jdk自帶工具制作證書,網上(包括tomcat官方文檔的大部分)都有很多說明,但是這樣的證書是不符合真實環境的,真實的環境是由“第三方”的機構進行證書頒發,否則每次都會提示證書不受信,而且在地址欄前面還會有看起來像出錯的提示。
所以,我們這里直接使用由“第三方”頒發的證書,證書有兩個文件:公鑰和私鑰。具體的文件名取決于證書的具體算法、類型什么的,反正是兩個文件。
這里我得到的證書的公鑰文件名為“serversert.pem”,私鑰文件名為“serverkey.pem”,其實可以重命名一下,但是我也就不重命名了。將這兩個文件放到目錄“/etc/ssl”里面,要是放到其他目錄也行,待會兒的配置路徑對應修改就是。
2、配置文件conf/server.xml
首先需要修改“<tomcat-dir>/conf/server.xml”文件,在默認的文件的基礎上,將默認的
<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" /> -->
去掉注釋,并修改為
<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端口)還需要下面的配置。
3、配置文件conf/web.xml
修改“<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>
至此,配置完成!
4、補充
配置完成之后,啟動服務器,使用“http://<host>”不指定端口訪問服務器,正確情況下,應該自動跳轉到"https://<host>",相當于會自動從80跳轉到443端口,這都是http和https的默認端口,如果需要其他端口,配置的時候指定梁歪的端口即可。
server.xml里面連接協議需要系統的OpenSSL庫支持對應的協議才行,我實驗的時候在一臺OpenSSL庫為“0.9.8.e”版本的時候就只能使用TLSv1版本。