爲Tomcat啓用Https鏈接支持

        如今web應用使用https方式進行訪問是很廣泛的了,今天(1月29日)纔出了一個新聞:Chrome力推HTTPS:HTTP網站被標註爲不安全。因此說,爲本身的網站添加SSL的鏈接支持刻不容緩啊,本文就來講一下Tomcat的SSL鏈接支持。html

        本文的說明使用「第三方」給的證書,因此不涉及證書製做,使用APR引擎,因此須要安裝APR以及tomcat-native,參考tomcat官方文檔
linux

0、環境準備

        本文基於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

二、配置文件conf/server.xml

        首先須要修改「<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端口)還須要下面的配置。

三、配置文件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>

        至此,配置完成!

四、補充

        配置完成以後,啓動服務器,使用「http://<host>」不指定端口訪問服務器,正確狀況下,應該自動跳轉到"https://<host>",至關於會自動從80跳轉到443端口,這都是http和https的默認端口,若是須要其餘端口,配置的時候指定另外的端口便可。

        server.xml裏面鏈接協議須要系統的OpenSSL庫支持對應的協議才行,我實驗的時候在一臺OpenSSL庫爲「0.9.8.e」版本的時候就只能使用TLSv1版本。        

相關文章
相關標籤/搜索