计算机网络 HTTPS
HTTPS 主要解决了 HTTP 的两个问题,第一是不再明文传输避免传输的内容被偷窥,第二个是提高了通信传输的安全性防止内容被篡改。
HTTPS 本质是在 HTTP 上套一层 SSL/TLS,底层依然是 TCP。HTTP 使用 TCP 现在默认长链接了,英文 “Keep-Alive
”,在获取网页源码后,对于 JS、CSS、图片文件不再另外单独挨个发起 TCP 连接,而是保持原本 TCP 连接不变,继续请求这些文件资源。
HTTP 原本是基于 TCP/IP 的,现在 HTTPS 在其基础之上加上了 SSL/TLS。
SSL 的密钥协商
一般基于 RSA 的密钥通信流程是:
- 客户端发起请求
- 服务端返回 CA 证书
- 客户端验证证书
- 客户端从证书中取得公钥
- 客户端生成一个密钥
k
,用公钥加密成k'
后发送给服务端 - 服务端用密钥解密密钥
k'
,得到k
- 二者都用该秘钥进行通信
上面这套流程有两个作用,其一是 防止窥探,无论是截取 k'
还是截取公钥,都无法得到私钥和接下来进行通信的密钥 k
;其二是 防止篡改,无论是伪造证书或者伪造 k'
都会被验证失败。
SSL/TLS
SSL 升级之后就成了 TLS,核心我们只需要记住两点:非对称加密和对称加密的混合加密以及数字证书和 CA。
对称加密和非对称加密
对称加密时,加密和解密都适用相同的秘钥,比如我们给压缩包上密码,别人用你设置的密码解压得到里面的内容;
非对称加密时,公钥和私钥分别用来解密对方加密的内容。
摘要算法
摘要算法主要是用在校验完整性上,我们将要传输的内容通过哈希算法,可以得到一个固定长度的摘要。这样,如果中途有黑客破坏了内容完整性,就会导致接受时发现用相同哈希函数计算内容和摘要不一样。
数字证书和 CA
为了保证客户端拿到手的公钥是服务端的而不是黑客的,我们还需要数字证书和 CA 去验证身份。