HTTPS工作原理与加密
HTTPS 的出发点是解决HTTP明文传输时信息 被篡改和监听 的问题
为了兼顾性能和安全性,使用了
非对称加密+对称加密
的方案 【加密】使用非对称加密的数字签名功能,保证公钥传输中不被篡改,借助CA机构和系统根证书的机制保证了HTTPS证书的公信力 【防伪】
基本概念
明文:HTTP协议是明文传输的,明文就是未被加密过的原始数据(容易被恶意wifi、运营商等劫持数据)
密钥:分为公钥和私钥(两者均可加密或解密)。一般来讲,公钥用于加密,私钥用于解密
证书:第三方机构颁发,浏览器出厂时内置
- 对称加密:使用一个密钥对数据进行加解密
- 非对称加密:假设密钥A与密钥B为一对密钥。则密钥A加密,密钥B解密,反之亦可
通信过程
HTTP和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL 和TCP 通信
证书校验过程
加解密方案:非对称加密 + 对称加密
用户在浏览器发起HTTPS请求(如 baidu.cn),默认使用服务端的443端口进行连接
【发送证书】 服务端收到请求,返回配置好的证书给客户端(
证书包含公钥、颁发者、算法等信息
),与之对应的私钥Private保留在服务端不公开
【校验证书】 客户端收到证书,校验合法性。包括是否在有效期、域名与请求域名是否匹配,上一级证书是否有效(递归判断
证书链
,直到判断到系统内置或浏览器配置好的根证书),如果不通过,则显示HTTPS警告信息,如果通过则继续
【公钥加密】 客户端生成一个用于对称加密的
随机Key
,并用证书内的公钥Pub进行加密发送给服务端
【私钥解密(非对称加解密)】 服务端收到
随机Key
的密文,使用公钥Pub配对的私钥Private进行解密,得到客户端发送的随机Key
与请求报文数据
【私钥加密】 服务端使用客户端发送过来的
随机Key
对要传输的HTTP数据进行对称加密,将密文返回客户端
【公钥解密(对称加解密)】 客户端使用
随机Key
对称解密密文,得到HTTP数据明文
后续HTTPS请求使用之前交换好的
随机Key
进行对称加解密
TIP
两组公钥私钥加密会更加安全,但非对称加解密
耗时要远大于对称加解密
,对性能有很大损耗
CA机构
由于非对称加密的算法都是公开的,任何人都可以自己生成一对公私钥(如Fiddler)
- 如网络遭遇中间人劫持,则可能伪造证书来完成双方通信。客户端无法确定收到的公钥是否由客户端发送的
签发证书
服务端在使用HTTPS前,去CA机构申请一份数字证书,数字证书里包含有证书持有者、证书有效期、公钥等信息,服务端将证书发送给客户端,客户端校验证书身份后再进行后续的加密操作
防篡改证书(防伪)
CA机构在颁发证书时对证书信息进行加密,得到
数字签名
。客户端在校验证书时会通过CA机构的证书对该数字签名进行校验是否合法
,以此来达到防伪的目的。(CA机构是一种公信身份,在系统或浏览器中会内置CA机构的证书和公钥信息)
扩展
老旧的网站会要求使用前下载安装他自己的根证书,这就是这个网站使用的证书并不能在系统内置的CA机构和根证书之间形成一条信任链,需要自己安装根证书来构成信任链(部分网上银行)
加密算法
md5: 消息摘要算法(不可逆)
sha1:消息摘要算法(不可逆. 密码强于md5,但速度较慢). 可用于密码验证、文件完整性校验、数字签名等场景
rsa:非对称加密算法