JavaWeb(5)——Tomcat服务器HTTPS配置

概念简述:

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。

HTTP 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。

HTTPS和HTTP的区别

一、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。

二、HTTPS 协议需要到 CA 申请证书,一般免费证书很少,需要交费。

三、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。

四、HTTP 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

CA证书申请

网上有大量通过JDK的keytool工具来产生自身秘钥,进而配置HTTPS的文档和博客。但是,对于自建的秘钥,浏览器会对 HTTPS 使用危险标识。如图:
这里写图片描述
我们开启 HTTPS 本意是为了更安全,增加用户信心。但是浏览器使用危险标识会适得其反。

因此生产环境必须使用权威机构购买的CA证书,CA证书有高低级之分,越高级CA证书,安全性越好,当然价格也更贵。免费证书比较少,但对于学习和小规模时间来说,可以去购买免费CA证书。

因为我的服务器和域名都在阿里云上,所以就水到渠成地在阿里云上购买了免费的CA证书,在其他机构购买也是一样。阿里云证书服务网址是https://common-buy.aliyun.com/?commodityCode=cas,可以购买由赛门铁克提供的免费证书。按照步骤来即可。

Tomcat安装证书

本段摘自阿里云证书服务

Tomcat支持JKS格式证书,从Tomcat7开始也支持PFX格式证书,两种证书格式任选其一。

文件说明:

  1. 证书文件214070626270754.pem,包含两段内容,请不要删除任何一段内容。

  2. 如果是证书系统创建的CSR,还包含:证书私钥文件214070626270754.key、PFX格式证书文件214070626270754.pfx、PFX格式证书密码文件pfx-password.txt。

1、证书格式转换

在Tomcat的安装目录下创建cert目录,并且将下载的全部文件拷贝到cert目录中。如果申请证书时是自己创建的CSR文件,附件中只包含214070626270754.pem文件,还需要将私钥文件拷贝到cert目录,命名为214070626270754.key;如果是系统创建的CSR,请直接到第2步。

到cert目录下执行如下命令完成PFX格式转换命令,此处要设置PFX证书密码,请牢记:

openssl pkcs12 -export -out 214070626270754.pfx -inkey 214070626270754.key -in 214070626270754.pem

2、PFX证书安装

找到安装Tomcat目录下该文件server.xml,一般默认路径都是在 conf 文件夹中。找到

keystoreFile="cert/214070626270754.pfx"
keystoreType="PKCS12"
此处的证书密码,请参考附件中的密码文件或在第1步中设置的密码
keystorePass="证书密码"

完整的配置如下,其中port属性根据实际情况修改:

<Connector port="8443"
    protocol="HTTP/1.1"
    SSLEnabled="true"
    scheme="https"
    secure="true"
    keystoreFile="cert/214070626270754.pfx"
    keystoreType="PKCS12"
    keystorePass="证书密码"
    clientAuth="false"
    ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
    SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
    SSLCipherSuite="ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4"/>

3、JKS证书安装(帮助)

( 1 ) 使用java jdk将PFX格式证书转换为JKS格式证书(windows环境注意在%JAVA_HOME%/jdk/bin目录下执行)

keytool -importkeystore -srckeystore 214070626270754.pfx -destkeystore your-name.jks -srcstoretype PKCS12 -deststoretype JKS

回车后输入JKS证书密码和PFX证书密码,强烈推荐将JKS密码与PFX证书密码相同,否则可能会导致Tomcat启动失败。

( 2 ) 找到安装 Tomcat 目录下该文件Server.xml,一般默认路径都是在 conf 文件夹中。找到

keystoreFile="cert/your-name.jks"
keystorePass="证书密码"

完整的配置如下,其中port属性根据实际情况修改:

<Connector port="8443"
    protocol="HTTP/1.1"
    SSLEnabled="true"
    scheme="https"
    secure="true"
    keystoreFile="cert/your-name.jks"
    keystorePass="证书密码"
    clientAuth="false"
    ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
    SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
    SSLCipherSuite="ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4"/>

( 注意:不要直接拷贝所有配置,只需添加 keystoreFile,keystorePass等参数即可,其它参数请根据自己的实际情况修改 )

4、 重启 Tomcat。

5、 通过 https 方式访问您的站点,测试站点证书的安装配置,如遇到证书不信任问题,请查看相关文档。

补充知识:SSL协议

背景知识

如前所述,HTTPS是安全的HTTP,之所以安全是因为加入了SSL,SSL(Secure Socket Layer)和TLS(Transport Layer Security)是在HTTP和TCP层之间的安全层,换句话说HTTPS是在安全层之上的HTTP。

加入的这一层东西要做的事就是信息安全管理。也就是数字加密,对于数字加密,最形象的比喻应该是古代信件上的压纹封蜡,不仅要保证信息不被剽窃,篡改还可以通过密码确认人的身份。

Secure Socket Layer,为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。

SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

HTTP的安全需求:

1)加密数据以防止数据中途被窃取;
2)身份认证:确保数据发送到真实的客户机和服务器;
3)维护数据的完整性,确保数据在传输过程中不被改变。

加密方式:

对称密钥加密简单但不安全,公开密钥加密安全但计算复杂度高,因此HTTPS采用混合的加密方式,在交换秘钥对环节使用公开密钥加密方式加密共享的秘钥,在随后的通信过程中使用对称加密的方式进行加解密。

身份认证:

HTTPS才用数字证书作为认证实现。数字签名是附加在报文上的特殊加密校验码,可以证明是作者编写了这条报文。前提是作者才会有私钥,才能算出这些校验码。如果传输的报文被篡改,校验码不会匹配,因为校验码只有作者保存的私钥才能产生,所以可以保证报文的完整性。

SSL体系结构

SSL的体系结构中包含两个协议子层,其中底层是SSL记录协议层(SSL Record Protocol Layer);高层是SSL握手协议层(SSL HandShake Protocol Layer)。SSL的协议栈如图所示,其中阴影部分即SSL协议。

这里写图片描述

SSL纪录协议层的作用是为高层协议提供基本的安全服务。SSL纪录协议针对HTTP协议进行了特别的设计,使得超文本的传输协议HTTP能够在SSL运行。纪录封装各种高层协议,具体实施压缩解压缩、加密解密、计算和校验MAC等与安全有关的操作。

SSL握手协议层包括SSL握手协议(SSL HandShake Protocol)、SSL密码参数修改协议(SSL Change Cipher Spec Protocol)、应用数据协议(Application Data Protocol)和SSL告警协议(SSL Alert Protocol)。握手层的这些协议用于SSL管理信息的交换,允许应用协议传送数据之间相互验证,协商加密算法和生成密钥等。SSL握手协议的作用是协调客户和服务器的状态,使双方能够达到状态的同步。

SSL连接过程

服务器认证阶段:

1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;
2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;
3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;
4)服务器回复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。

用户认证阶段:

在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。

SSL工作过程:

(1)发送方的工作过程为:
从上次接受要发送的数据(包括各种消息和数据);
对信息进行分段,分成若干纪录;
使用指定的压缩算法进行数据压缩(可选);
使用指定的MAC算法生成MAC(Message Authentication Code 消息认证码);
使用指定的加密算法进行数据加密;
添加SSL记录协议的头,发送数据。

(2)接收方的工作过程为:
接收数据,从SSL记录协议的头中获取相关信息;
使用指定的解密算法解密数据;
使用指定的MAC算法校验MAC;
使用压缩算法对数据解压缩(在需要进行);
将记录进行数据重组;
将数据发送给高层。

SSL记录协议处理的最后一个步骤是附加一个SSL记录协议的头,以便构成一个SSL记录。SSL记录协议头中包含了SSL记录协议的若干控制信息。

参考:

http://www.ganecheng.tech/blog/53001846.html
http://baike.baidu.com/link?url=cGNu9iGqDb7q1FHzAslcVYIDaRgwhg6LmQVI4J1DGHa9S4KDtvF-YweWeXX2-92rOTDNFl4CcqhDGRtAO8fRHq
https://www.aliyun.com/?p=cas#/cas/home

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值