HTTPS

HTTPS

为什么出现 HTTPS

防止 敏感数据 (银行卡号、账号密码等) 被劫持。HTTPS 会对 HTTP 的请求和响应进行加密,因此即使劫持,攻击者看到的也都是一些随机的字符串。

SSL/TLS

双向非对称加密

Client 和 Server 把自己的公钥公开出去,各自保留自己的私钥。

客户端 (PubA、PriA) 给服务器 (PubB、PriB) 发送消息的过程如下:

// 私钥签名,再用服务器的公钥加密
let sign = PriA(msg)
let encryption = PubB(sign)
Client --encryption--> Server

服务器接受客户端消息的过程:

// 私钥解密,再用客户端的公钥验证签名
PubA(unEncryption(PriB, encryption), '验证签名')
  • 签名和验签:私钥签名,公钥验签,目的防篡改。
  • 加密和解密:公钥加密,私钥解密,目的防止第三方拦截偷听。

单向非对称加密

互联网上,只能 Client 验证 Server,因此只有服务器提供一对公钥和私钥即可。

当然,如果是银行网银,那么也有验证每个客户端的合法性,给用户发的 U 盘,就包含了客户端的公钥和私钥对,用的是双向非对称加密。

SSL/TLS 的原理就是,先单向非对称加密,然后再对称加密

RSA 应用场景

(1)加密

Bob 想要给 Alice 发送 “Hello Alice!” 这个信息:

  • 公钥加密
  • 私钥解密

(2)数字签名

  • 私钥签名
  • 公钥验证

如何保证公钥传输不被中间人劫持?

引入中间机构 CA,服务器把公钥发送给客户端的时候,不是直接发送公钥,而是发送公钥对应的证书

证书是如何来的?

客户端如何验证服务器的证书?

用 CA 给的公钥 (公钥在网络上,谁都可以知道),解密证书的签名,解密成功,Hash 对的上,就证明公钥没有问题。

如何证明 CA 也是真的 ?

给 CA 颁发证书。谁颁发,CA 的上一级。

HTTPS 握手

CA 证书验证过程

抓包可以抓到吗

可以

参考