Skip to content

HTTPS工作原理与加密

HTTPS 的出发点是解决HTTP明文传输时信息 被篡改和监听 的问题

  • 为了兼顾性能和安全性,使用了非对称加密+对称加密的方案 【加密】

  • 使用非对称加密的数字签名功能,保证公钥传输中不被篡改,借助CA机构和系统根证书的机制保证了HTTPS证书的公信力 【防伪】

基本概念

明文:HTTP协议是明文传输的,明文就是未被加密过的原始数据(容易被恶意wifi、运营商等劫持数据)

密钥:分为公钥和私钥(两者均可加密或解密)。一般来讲,公钥用于加密,私钥用于解密

证书:第三方机构颁发,浏览器出厂时内置

  • 对称加密:使用一个密钥对数据进行加解密
  • 非对称加密:假设密钥A与密钥B为一对密钥。则密钥A加密,密钥B解密,反之亦可

通信过程

HTTP和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL 和TCP 通信

http&https

证书校验过程

加解密方案:非对称加密 + 对称加密

image

用户在浏览器发起HTTPS请求(如 baidu.cn),默认使用服务端的443端口进行连接

【发送证书】 服务端收到请求,返回配置好的证书给客户端(证书包含公钥、颁发者、算法等信息),与之对应的私钥Private保留在服务端不公开

【校验证书】 客户端收到证书,校验合法性。包括是否在有效期、域名与请求域名是否匹配,上一级证书是否有效(递归判断证书链,直到判断到系统内置或浏览器配置好的根证书),如果不通过,则显示HTTPS警告信息,如果通过则继续

【公钥加密】 客户端生成一个用于对称加密的随机Key,并用证书内的公钥Pub进行加密发送给服务端

【私钥解密(非对称加解密)】 服务端收到随机Key的密文,使用公钥Pub配对的私钥Private进行解密,得到客户端发送的随机Key与请求报文数据

【私钥加密】 服务端使用客户端发送过来的随机Key对要传输的HTTP数据进行对称加密,将密文返回客户端

【公钥解密(对称加解密)】 客户端使用随机Key对称解密密文,得到HTTP数据明文

后续HTTPS请求使用之前交换好的随机Key进行对称加解密

TIP

两组公钥私钥加密会更加安全,但非对称加解密耗时要远大于对称加解密,对性能有很大损耗

CA机构

由于非对称加密的算法都是公开的,任何人都可以自己生成一对公私钥(如Fiddler)

  • 如网络遭遇中间人劫持,则可能伪造证书来完成双方通信。客户端无法确定收到的公钥是否由客户端发送的

image

签发证书

服务端在使用HTTPS前,去CA机构申请一份数字证书,数字证书里包含有证书持有者、证书有效期、公钥等信息,服务端将证书发送给客户端,客户端校验证书身份后再进行后续的加密操作

防篡改证书(防伪)

CA机构在颁发证书时对证书信息进行加密,得到数字签名。客户端在校验证书时会通过CA机构的证书对该数字签名进行校验是否合法,以此来达到防伪的目的。(CA机构是一种公信身份,在系统或浏览器中会内置CA机构的证书和公钥信息)

扩展

老旧的网站会要求使用前下载安装他自己的根证书,这就是这个网站使用的证书并不能在系统内置的CA机构和根证书之间形成一条信任链,需要自己安装根证书来构成信任链(部分网上银行)

加密算法

md5: 消息摘要算法(不可逆)

sha1:消息摘要算法(不可逆. 密码强于md5,但速度较慢). 可用于密码验证、文件完整性校验、数字签名等场景

rsa:非对称加密算法

前端非对称加密方案

https://github.com/travist/jsencrypt

参考1参考2参考3