为Tomcat启用Https连接支持

        现在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版本。        





你可能感兴趣的:(tomcat,https,tls,ssl,安全连接,安装证书,tomcat安全连接)