如今web应用使用https方式进行访问是很广泛的了,今天(1月29日)才出了一个新闻:Chrome力推HTTPS:HTTP网站被标注为不安全。因此说,为本身的网站添加SSL的链接支持刻不容缓啊,本文就来讲一下Tomcat的SSL链接支持。html
本文的说明使用“第三方”给的证书,因此不涉及证书制做,使用APR引擎,因此须要安装APR以及tomcat-native,参考tomcat官方文档。
linux
本文基于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
首先须要修改“<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端口)还须要下面的配置。
修改“<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版本。