一、HTTP与HTTPS
HTTP(Hypertext Transfer Protocol)超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议,可以说 HTTP 是当代互联网通信的基础。
1. HTTP
HTTP 有以下安全性问题:
-
使用明文进行通信,内容可能会被窃听;
-
不验证通信方的身份,通信方的身份有可能遭遇伪装;
-
无法证明报文的完整性,报文有可能遭篡改。
(运行商劫持示例,图片来源:https://mp.weixin.qq.com/s/21JaXwdfSjItj5SgOwhapg)
2. HTTPS
HTTPS 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是说 HTTPS 使用了隧道进行通信。
通过使用 SSL,HTTPS 具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。
(图片来源:https://github.com/CyC2018/CS-Notes/blob/master/notes/HTTP.md#六https)
二、加密
1. 对称加密
对称**加密(Symmetric-Key Encryption),发送方加密和接收方解密使用同一**。
-
优点:运算速度快;
-
缺点:无法安全地将**传输给通信方。
2. 非对称加密
非对称**加密,又称公开**加密(Public-Key Encryption),加密和解密使用不同的**。通信发送方获得接收方的公开**之后,发送方使用公开**进行加密,接收方收到数据后使用私有**进行解密。
注:非对称**除了用来加密,还可以用来进行数字签名。因为私有**无法被其他人获取,因此通信发送方使用其私有**进行签名,通信接收方使用发送方的公开**对签名进行解密,就能判断这个签名是否正确。
三、HTTPS工作流程
(图片来源:https://mp.weixin.qq.com/s/21JaXwdfSjItj5SgOwhapg)
-
用户在浏览器发起HTTPS请求(如 https://www.ciaotigre.com/),默认使用服务端的443端口进行连接;
-
HTTPS需要使用一套CA数字证书,证书内会附带一个公钥Pub,而与之对应的私钥Private保留在服务端不公开(为防止CA数字证书被恶意篡改,这里需要用到数字签名功能,这是一种防伪技术);
-
服务端收到请求,返回配置好的包含公钥Pub的证书给客户端;
-
客户端收到证书,校验合法性,主要包括是否在有效期内、证书的域名与请求的域名是否匹配,上一级证书是否有效(递归判断,直到判断到系统内置或浏览器配置好的根证书),如果不通过,则显示HTTPS警告信息,如果通过则继续;
-
客户端生成一个用于对称加密的随机Key,并用证书内的公钥Pub进行加密,发送给服务端;
-
服务端收到随机Key的密文,使用与公钥Pub配对的私钥Private进行解密,得到客户端真正想发送的随机Key;
-
服务端使用客户端发送过来的随机Key对要传输的HTTP数据进行对称加密,将密文返回客户端;
-
客户端使用随机Key对称解密密文,得到HTTP数据明文;
-
后续HTTPS请求使用之前交换好的随机Key进行对称加解密。
签名认证
数字证书认证机构(CA,Certificate Authority)是客户端与服务器双方都可信赖的第三方机构。
服务端在使用HTTPS前,去经过认证的CA机构申请颁发一份数字证书,数字证书里包含有证书持有者、证书有效期、公钥等信息,服务端将证书发送给客户端,客户端校验证书身份和要访问的网站身份确实一致后再进行后续的加密操作。
为防止数字证书被恶意篡改,这里用到了一种防伪技术,即数字签名,过程如下:
-
(签名,Signing)CA机构拥有自己的一对公钥和私钥
-
(签名,Signing)CA机构在颁发证书时对明文信息Data进行哈希得到Hash值
-
(签名,Signing)将Hash值用私钥进行加签得到数字签名Signature,并将该签名与公开**证书绑定到一起
-
(认证,Verification)客户端得到证书,分解得到明文部分Data和数字签名Signature
-
(认证,Verification)用CA机构的公钥进行解签,得到Hash值(由于CA机构是一种公信身份,因此在系统或浏览器中会内置CA机构的证书和公钥信息)
-
(认证,Verification)用证书里声明的哈希算法对明文Data部分进行哈希得到Hash
-
(认证,Verification)当自己计算得到的哈希值与解签后的Hash值相等,表示证书可信,没有被篡改
注:以上分析可以知道,CA证书不仅包含明文信息,同时还有数字签名用于认证,防止证书被恶意篡改带来的安全问题。
参考:
[1] https://github.com/CyC2018/CS-Notes/blob/master/notes/HTTP.md#六https
[2] https://mp.weixin.qq.com/s/21JaXwdfSjItj5SgOwhapg