Https协议原理
解决内容可能被窃听的问题——加密
对称加密
加密和解密同用一个密钥
非对称加密
- 公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,另一把叫做公开密钥
- 使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密
TLS/SSL
其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性
解决报文可能遭篡改问题——数字签名
功能
- 能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名
- 数字签名能确定消息的完整性,证明数据是否未被篡改过
数字签名生成
Hash函数生成消息摘要,然后用发送者的私钥加密生成数字签名,与原文文一起传送给接收者。接下来就是接收者校验数字签名的流程
校验数字签名流程
接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与上一步得到的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性
解决通信方身份可能被伪装的问题——数字证书
数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上
流程
- 客户端 Client 向服务器 Server 发出请求时,Server 返回证书文件
- 客户端 Client 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即服务器的公开密钥是值得信赖的
- 客户端还会验证证书相关的域名信息、有效时间等信息; 客户端会内置信任CA的证书信息(包含公钥),如果CA不被信任,则找不到对应 CA的证书,证书也会被判定非法
Https流程
- 浏览器向服务器的443端口发起请求
- 服务器收到请求,数字证书返回给浏览器
- 浏览器进行数字证书认证
- 查询有无服务器下发证书对应的机构,有的话,取出该机构颁发的公钥
- 用机构的证书公钥解密得到证书的内容和证书签名, 包括网址,网站的公钥,证书的有效期,进行认证
- 浏览器生成一个随机数R,并使用网站公钥对R进行加密
- 浏览器将加密的R发送给服务器
- 服务器用自己的私钥解密得到R
- 服务器以R为密钥使用了对称加密算法加密网页内容并传输给浏览器
- 浏览器以R为密钥使用之前约定好的解密算法获取网页内容