Skip to content

一、Https

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。实现原理是在HTTP下加入SSL层,SSL负责加密和解密数据。

与http的区别:

  1. https协议需要到ca申请证书,一般免费证书很少,需要交费。

  2. http是超文本传输协议,信息是明文传输,连接很简单。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

  3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

SSL

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

作用:

1)认证用户和服务器,确保数据发送到正确的客户机和服务器;

2)加密数据以防止数据中途被窃取;

3)维护数据的完整性,确保数据在传输过程中不被改变。

Https工作原理

image-20220625221700505

  1. 客户端浏览器发起HTTPS请求。就是用户通过浏览器输入一个https网址,然后连接到server的443端口。

  2. 服务器配置。采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向CA(产生和确定数字证书的第三方可信机构)等组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书不会弹出提示页面。

    CA是PKI系统中通信双方信任的实体,被称为可信第三方(Trusted Third Party,简称TTP)。作为可信第三方的行为具有非否认性。证书中绑定了公钥数据、和相应私钥拥有者的身份信息,并带有CA的数字签名。证书中也包含了CA的名称,以便于依赖方找到CA的公钥、验证证书上的数字签名。

  3. 服务器向浏览器响应数字证书。传输的数字证书主要包含了公钥与服务器身份标识信息。

  4. 客户端浏览器验证解析数字证书。首先会验证数字证书中的公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机码,然后使用证书的公钥对该随机值进行加密。

  5. 浏览器传送加密信息给服务器端。这部分传送的是用证书加密后的随机值,目的就是让服务器端得到这个随机值,以后客户端和服务器端的通信就可以通过这个随机值来进行加密与解密了。(确保安全的将对称加密的密钥传输给浏览器与服务器)

  6. 服务器端解密信息。服务器端使用私钥解密后,得到了客户端传过来的随机值,然后把内容通过该随机值进行对称加密响应数据信息。因为客户端与服务器端都有这个随机值(对称加密的密钥),所以服务器与客户端后面的数据传递都是用这个加密与解密。

  7. 服务器传输加密后的响应数据给浏览器。这部分信息是服务器端使用对称加密的密钥加密后的信息,可以在客户端被还原。

  8. 客户端解密信息。客户端利用之前生成的随机值(对称加密的密钥)进行对服务器传过来的信息进行解密,最后获得到数据信息内容。整个过程攻击者就算监听到了数据,也束手无策。

注意:

​ https的加密采用了非对称与对称加密的相结合实现的。

服务器实现https协议

生成密钥库

确保环境变量配置了%JAVA_HOME%\bin,因为生成密钥库是使用jdk中的keytool工具。

sh
keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore key.keystore
# -genkey -alias  表示生成证书别名


<NolebasePageProperties />




# -keyalg      指定密钥算法,这里指定为RSA算法。
# -keysize     指定密钥长度,默认1024位。
# -validity    指定证书有效期,这里指定为365天。
# - keystore   指定密钥库存储位置,这里是key.keystore(默认生成在计算机用户名目录下)

执行过程中会询问你一些信息,比如国家代码,省市等,其中需要填写两个密码,一次在开头,一次在最后,请保持两个密码相同。

执行完成后会生成一个.keystore文件(密钥库),将它复制到tomcat的目录下

配置tomcat启用https协议并指定密钥库

修改tomcat的server.xml文件中的如下节点去掉注释, keystoreFile所在路径 keystorePass密码

xml
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" keystoreFile="conf/key.keystore" 
			   keystorePass="123456" />

由于证书是自己生成的所以需要客户端验证

SSL证书种类

域名型 https 证书(DVSSL):信任等级一般,只需验证网站的真实性便可颁发证书保护网站;

企业型 https 证书(OVSSL):信任等级强,须要验证企业的身份,审核严格,安全性更高;

增强型 https 证书(EVSSL):信任等级最高,一般用于银行证券等金融机构,审核严格,安全性最高,同时可以激活绿色网址栏。

https优缺点

优点:

安全性方面

在目前的技术背景下,HTTPS是现行架构下最安全的解决方案,主要有以下几个好处:

1、使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;

2、HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。

3、HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。

缺点:

技术方面

1、相同网络环境下,HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电。此外,HTTPS协议还会影响缓存,增加数据开销和功耗。

2、HTTPS协议的安全是有范围的,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。

3、最关键的,SSL 证书的信用链体系并不安全。特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。

成本方面

1、SSL的专业证书需要购买,功能越强大的证书费用越高。个人网站、小网站可以选择入门级免费证书。

2、SSL 证书通常需要绑定固定IP,为服务器增加固定IP会增加一定费用;

3、HTTPS 连接服务器端资源占用高较高多,相同负载下会增加带宽和服务器投入成本;