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 证书验证过程
抓包可以抓到吗
可以。