Tomcat下具体的配置

Tomcat下关于使用SSL证书的配置可以分为三部分
1.启用SSL,使用Tomcat Java平台自身的SSL功能;
2.启用SSL,通过apr协议调用openssl的SSL功能;
3.启用SSL之后的安全配置。
Tomcat本身体型不大,它主要的底层工作都是由Java平台的虚拟机来完成的,比如说内存的调度使用、SSL的通信等。它作为常用的中间件容器具有较好的扩展性,允许用户使用Java平台本身的SSL通信功能(默认),同时又向用户提供了一种使用专业纵深性较好的openssl的SSL功能。
由于Java平台本身在逐渐淘汰安全系数低的SSL2.0、SSL3.0协议,默认客户端必须使用TLS1.0及以上的协议与之通信,这对很多客户端还停留在xp系统IE6浏览器的环境的项目来说,增加了不少的推广阻力和维护工作量。对于上述情况,openssl可以很好的解决这个问题,它仍支持使用SSL2.0及以上通信的客户端进行访问。并且使用openssl可以为SSL配置指定 证书、私钥、证书链,分而治之可以很好的处理当证书链发生变化时引起的证书整体更换。也为向笔者之前那样,因为不熟悉keytool、openssl工具的使用,导致的证书链问题的技术人员提供了解决方法。总之,使用扩展调用openssl将会给用户更多的选择。
当Tomcat启用了SSL功能之后,为了更好地保证该功能的使用,需要对它做一些安全性配置,以保证用户的访问都是通过https的,在用户试图通过http进行访问时,tomcat应可以直接跳转至https协议通信。

下面将讲述具体的配置步骤

1.启用SSL,使用Tomcat Java平台自身的SSL功能;

Java平台使用SSL支持两种协议
在tomcat/confg/server.xml对应的connector中配置其中之一即可
这是Tomcat官方文档中给的示例:

<!-- Define a HTTP/1.1 Connector on port 8443, JSSE NIO implementation -->
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"port="8443" .../><!-- Define a HTTP/1.1 Connector on port 8443, JSSE BIO implementation -->
<Connector protocol="org.apache.coyote.http11.Http11Protocol"port="8443" .../>
 <!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<Connector
           protocol="org.apache.coyote.http11.Http11NioProtocol"port="8443" maxThreads="200"scheme="https" secure="true" SSLEnabled="true"keystoreFile="${user.home}/.keystore" keystorePass="changeit"clientAuth="false" sslProtocol="TLS"/>

Tomcat默认的http对应端口为8080,https对应端口为8443,实际上并不方便用户直接访问,这里我们可以改为80和443
下面是本实验环境中的配置:

<Connector port="80" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="443" />
 <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"maxThreads="150" SSLEnabled="true" scheme="https" secure="true"clientAuth="false"sslEnabledProtocols="SSLv2,SSLv3,TLSv1,TLSv1.1,TLSv1.2,SSLv2Hello"keystoreFile="/home/oa/tomcat7/conf/www.yuanlangchao.jks"  keystorePass="yuanlangchao" />

我们此处使用sslEnabledProtocols增强型的ssl协议主要是为了使用SSLv2Hello,相对于 sslProtocols=”SSL+SSLv2+SSLv3+TLS+TLSv1+TLSv1.1+TLSv1.2” ,前者会让客户端有更多选择;只要客户端勾了TLS版本中的任意一个即可以与服务器建立通信,而后者做不到。就是说使用sslEnabledProtocols会有更好地兼容性。
很多情况下从安全性的脚本我们可能会指定 具体的协议算法规则如ciphers=”TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA”

最终效果如下图

2.启用SSL,通过apr协议调用openssl的SSL功能;

通过apr调用openssl在tomcat/conf/server.xml中的配置
官方文档的说明:

<!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<Connector
           protocol="org.apache.coyote.http11.Http11AprProtocol"port="8443" maxThreads="200"scheme="https" secure="true" SSLEnabled="true"SSLCertificateFile="/usr/local/ssl/server.crt"SSLCertificateKeyFile="/usr/local/ssl/server.pem"SSLVerifyClient="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"/>
这里写代码片

APR是Apache的另一个项目,需要下载安装;apr通过openssl来进行传输,需要保证服务器上已安装了最新的openssl版本,尤其是注意使用应对openssl心脏出血漏洞修复之后的版本。此外还需要Tomcat的扩展包Tomcat native与APR、Openssl配合使用。请按照下面的先后顺序安装配置:
APR与OPENSSL的安装如果系统yum为最新可以直接使用命令

yum install apr-devel openssl-devel

APR的下载安装

//解压配置编译安装
[root@oracle apr-1.5.2]# tar -vxf apr-1.5.2.tar.gz
[root@oracle apr-1.5.2]# cd apr-1.5.2
[root@oracle apr-1.5.2]# ./configure
[root@oracle apr-1.5.2]# make
[root@oracle apr-1.5.2]# make install

openssl版本下载安装

[root@oracle ~]# tar -vxf openssl-1.0.2d.tar.gz
[root@oracle ~]# cd openssl-1.0.2d
[root@oracle ~]# ./config
[root@oracle ~]# make
[root@oracle ~]# make test
[root@oracle ~]# make install
[root@oracle ~]# /usr/local/ssl/bin/openssl  version
OpenSSL 1.0.2d 9 Jul 2015

Tomcat native下载安装

[root@oracle ~]# tar -vxf tomcat-native-1.1.33-src.tar.gz[root@oracle ~]# cd tomcat-native-1.1.33-src/jni/native/[root@oracle native]# ls
build      build.conf  build-outputs.mk  configure     include          libtcnative.dsw  NMAKEmakefile      os   srclib        tcnative.pc.in
buildconf  BUILDING    config.layout     configure.in  libtcnative.dsp  Makefile.in      NMAKEmakefile.inc  src  tcnative.dsp  tcnative.spec[root@oracle native]# ./configure --with-apr=/usr/local/apr/bin/apr-1-config \
>--with-java-home=/usr/java/jdk8/
> --with-ssl=yes \
> -prefix=/home/oa/tomcat7/[root@oracle native]# make && make install[root@oracle native]# cd /home/oa/tomcat7/lib/[root@oracle lib]# ls
annotations-api.jar  catalina-tribes.jar  jasper.jar        libtcnative-1.so         servlet-api.jar        tomcat-dbcp.jar     tomcat-jdbc.jar
catalina-ant.jar     ecj-4.4.2.jar        jsp-api.jar       libtcnative-1.so.0       tomcat7-websocket.jar  tomcat-i18n-es.jar  tomcat-util.jar
catalina-ha.jar      el-api.jar           libtcnative-1.a   libtcnative-1.so.0.1.33  tomcat-api.jar         tomcat-i18n-fr.jar  websocket-api.jar
catalina.jar         jasper-el.jar        libtcnative-1.la  pkgconfig                tomcat-coyote.jar      tomcat-i18n-ja.jar
//已经包含了native相关的包,表明安装成功,需要将它配置到名为
LD_LIBRARY_PATH的环境变量
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/oa/tomcat7/lib
export LD_LIBRARY_PATH[root@oracle ~]# cat .bash_profile
# .bash_profile# Get the aliases and functions
if [ -f ~/.bashrc ]; then. ~/.bashrc
fi# User specific environment and startup programsPATH=$PATH:$HOME/bin
JAVA_HOME=/usr/java/jdk8
JRE_HOME=/usr/java/jdk8/jre/
CATALINA_HOME=/home/oa/tomcat7/
export JAVA_HOME
export CATALINA_HOME
PATH=$JAVA_HOME/bin:$PATH:/usr/local/ssl/bin/
export JRE_HOME
export PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/oa/tomcat7/lib
export LD_LIBRARY_PAT

上面三步完成后:
需要检查server.xml中的AprLifecycleListener,默认是开启的

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

本演示环境的配置:

 <Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"maxThreads="150" SSLEnabled="true" scheme="https" secure="true"clientAuth="false"SSLProtocol="SSLv2+SSLv3+TLSv1+TLSv1.1+TLSv1.2"SSLCertificateFile="/home/oa/tomcat7/conf/www.yuanlangchao.com.pem_nochain.crt"SSLCertificateKeyFile="/home/oa/tomcat7/conf/www.yuanlangchao.com.private.key"SSLCertificateChainFile="/home/oa/tomcat7/conf/yuan_bundle.crt" />

启动tomcat看日志中下面状态表示apr启动成功

Sep 23, 2015 6:52:16 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: Loaded APR based Apache Tomcat Native library 1.1.33 using APR version 1.5.2.
Sep 23, 2015 6:52:16 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
Sep 23, 2015 6:52:16 AM org.apache.catalina.core.AprLifecycleListener initializeSSL

此时客户端通过单独通过SSL2.0、SSL3.0都可以访问站点,当然这是不安全的也是Java平台将其淘汰的原因,但它可以很好得处理客户端兼容性,尤其是低版本的浏览器:

3.启用SSL之后的安全配置。

tomcat启用SSL之后,一般是需要做到基于安全考虑的强制跳转,就是说用不知道这是个安全站点使用http进行访问时,系统强制跳转到安全的https端口进行访问。Tomcat通过对页面权限的访问来做到:
需要在/conf/web.xml最后添加如下配置

<welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list><!--下面是添加的-->
<security-constraint><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://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html#Edit_the_Tomcat_Configuration_File
http://tomcat.apache.org/tomcat-7.0-doc/config/http.html#NIO_specific_configuration
http://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#jssenames

全面讲解Tomcat下SSL证书的配置(五)相关推荐

  1. 全面讲解Tomcat下SSL证书的配置(四)

    使用openssl管理证书 在上文中我们提到了openssl与keytool工具关于证书转换方面的衔接.下面将逐一讲述如何使用openssl 从pkcs12文件中提取文本格式证书.私钥.制作证书链证书 ...

  2. apache http自动跳转https_怎么给网站开启https协议?Apache2下SSL证书安装配置方法...

    本文原创,未经允许,严禁装载 刚做本站的时候,我也不知道为什么要开启https协议,只是发现有很多网站都是https.当用Chrome浏览器打开本社区网站的时候,发现现实"不安全" ...

  3. tomcat配置SSL证书_tomcat配置https证书

    现在很多网站都采用了https,因为https比http安全,所以我们公司也把内网系统改成https访问,但是这个要怎么配置和申请证书呢? 如果企业不缺钱的情况下申请购买SSL证书,当然也可以申请免费 ...

  4. 阿里云域名https证书(ssl证书)配置

    阿里云域名https证书(ssl证书)配置,nginx配置,亲测可用,记录下 首先进入到阿里云域名控制台,在域名控制台选择要配置的域名,并在操作栏点击"解析" 在域名解析点击更多下 ...

  5. Tomcat环境SSL证书安装教程

    本章节介绍根据www.gworg.com编写如何将下载的证书安装到Tomcat服务器上.安装好证书后,您的Web服务器将能支持SSL通信,从而保证您Web服务器的通信安全. Tomcat环境SSL证书 ...

  6. qt 中使用openssl_openSSL漏洞致使SSL证书安全配置评级F

    原文阅读:openSSL漏洞致使SSL证书安全配置评级F SSL数字证书在服务器配置不当会暴露更多的安全漏洞,因此给黑客提供了攻击网站提供了便利和入口,通常我们会借助SSLLABS进行测试SSL安全部 ...

  7. SSL证书会失效吗?什么情况下SSL证书会失效呢?

    SSL证书会失效吗?什么情况下SSL证书会失效呢?近期有些客户问关于"SSL证书怎么失效了"的问题.情况有比较多种,类似安装上出现问题.SSL证书过期了等等情况.以下做了逐一说明分 ...

  8. 云技术背景下ssl证书可以提供怎样的安全服务呢?

    大数据.云技术是互联网信息时代的新名词,这些词汇对于普通互联网用户来说似曾相识但又不解其意,唯一可以确定的是,在云技术背景下我们的网络信息服务更加便捷,网络安全风险越发增加,但网络安全防护也随之提升. ...

  9. tomcat服务器上https的SSL证书安装配置

    购买:SSL域名验证SSL证书 地址:http://item.taobao.com/item.htm?spm=937.1000770.1000419.2.cTamzc&id=158232072 ...

最新文章

  1. SAP QM中阶之Material Specification的使用
  2. Ext JS 6学习文档-第3章-基础组件
  3. 光盘引导和网络安装linux系统
  4. 高并发01_synchronized
  5. 单例销毁_【PHP设计模式】单例模式
  6. 抛开vue-cli 利用requireJS搭建一个vue项目
  7. LeetCode 1374. 生成每种字符都是奇数个的字符串
  8. 数据库实例:mysql与mongo结合用户登录
  9. Flutter高内聚组件怎么做?阿里闲鱼打造开源高效方案!
  10. nmmqq.php?/lspc.html,html中的图片直接使用base64编码后的字符串代替详解
  11. 协鑫集成为泰国Enmax建立10MW光伏电站
  12. TCP/IP 三次握手
  13. Serializer序列化器----反序列化使用
  14. python学习(总)
  15. h3c s5820交换机_简单配置
  16. IIS HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
  17. android网络音乐播放器
  18. 网速快慢与网线材质的选择关系
  19. java/php/net/python教学评价系统设计
  20. 命题, 定理,引理和推论的定义

热门文章

  1. OAK相机如何实现同步?
  2. 用 python 写游戏《外星人入侵》:限制飞船的活动范围并给飞船增加射击功能
  3. 图像检索与降维(一):VLAD
  4. 大厂架构师经验分享!插件化框架解读之android系统服务实现原理,年薪超过80万!
  5. Linux下DDNS客户端的使用
  6. 2020 年 4 月编程语言排行榜
  7. ADS1118驱动调试笔记
  8. 什么是vue?为什么用vue?
  9. 02 微架构教务系统——课程搜索接口
  10. NFT颓势已现:肝不起了,卷不动了