為Tomcat啟用Https連接支持

EdmLHV 8年前發布 | 32K 次閱讀 Tomcat 應用服務器

來自: 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版本。        

 

 

 

 

 本文由用戶 EdmLHV 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!