为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版本。        

相关文章
相关标签/搜索