HTTPS原理详解

知识准备

HTTP的安全性不足

1.通信使用明文(不加密),内容可能会被窃听。
2.不验证通信方的身份,有可能遭遇伪装。
3.无法证明报文的完整性,所以有可能已遭篡改。

加密技术

加密算法一般分为两种:

对称加密:加密与解密的**相同。以DES算法为代表。
非对称加密:加密与解密的**不相同。以RSA算法为代表。

非对称密加密出现以前,对称加密一个很大的问题就是不知道如何安全生成和保管**非对称密加密主要就是为了解决这个问题,使**的生成和使用更加安全,但同时也是HTTPS性能和速度严重降低的“罪魁祸首”

所以HTTPS采用对称加密非对称加密两者并用的混合加密机制,在交换**环节使用非对称加密方式,之后的建立通信交换报文阶段则使用对称加密方式。既保证了安全性,又保证了传输的效率。

身份验证—证明公开**正确性的证书

非对称加密最大的一个问题,就是无法证明公钥本身就是货真价实的公钥。

比如,正准备和某台服务器建立公开**加密方式下的通信时,如何证明收到的公开**就是原本预想的那台服务器发行的公开**。或许在公开**传输途中,真正的公开**已经被攻击者替换掉了。

如果不验证公钥的可靠性,至少会存在如下的两个问题:中间人攻击和信息抵赖。

HTTPS原理详解

为了解决上述问题,可以使用由数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开**证书。

HTTPS原理详解

CA使用具体的流程如下:
(1) 服务器的运营人员向数字证书认证机构(CA)提出公开**的申请;
(2) CA通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;
(3) 如果信息审核通过,CA会对已申请的公开**做数字签名,然后分配这个已签名的公开**,并将该公开**放入公钥证书后绑定在一起。
证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构CA的信息、有效时间、证书***等信息的明文,同时包含一个签名;
签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用CA的私钥对信息摘要进行加密,密文即签名;
(4) 客户端在HTTPS握手阶段向服务器发出请求,要求服务器返回证书文件;
(5) 客户端读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应CA的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法
(6) 客户端然后验证证书相关的域名信息、有效时间等信息;
(7) 客户端会内置信任CA的证书信息(包含公钥),如果CA不被信任,则找不到对应CA的证书,证书也会被判定非法。

HTTPS通信原理

HTTPS简介
HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。

HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。通信的具体过程如下图所示:
HTTPS原理详解

用语言描述如下:

1
客户端将自己支持的一套加密规则发送给服务端

服务端从中选出一组加密算法HASH算法,并将自己的身份信息以证书的形式发回给客户端。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。

2、3
客户端获得服务端证书之后要做以下工作:
a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
b) 如果证书受信任,或者是用户接受了不受信的证书,客户端会生成一串随机数密码,并用证书中提供的公钥加密。
c) 使用约定好的HASH算法计算握手消息,并使用生成的随机数密码对消息进行加密,最后将之前生成的所有信息发送给服务端

4
服务端接收客户端发来的数据之后要做以下的操作:
a) 使用自己的私钥将信息解密取出密码(即之前客户端生成的随机数密码),使用密码解密浏览器发来的握手消息,并验证HASH是否与客户端发来的一致。
b) 使用约定好的HASH算法计算一段握手消息,并且用密码加密握手消息,发送给客户端

客户端解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束。

5
之后所有的通信数据将由之前客户端生成的密码并利用对称加密算法进行加密。

其中客户端服务端互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。

另外,HTTPS一般使用的加密与HASH算法如下:
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256

参考:
1.https原理:证书传递、验证和数据加密、解密过程解析
2.简单粗暴系列之HTTPS原理
3.HTTPS 原理浅析及其在 Android 中的使用
4.HTTPS系列干货(一):HTTPS 原理详解