HTTPS
HTTPS = HTTP + 加密 + 认证 + 完整性保护。HTTP 明文传输,HTTPS 在 TCP 和 HTTP 之间加了一层 SSL/TLS,解决了窃听、篡改、伪装三个问题。
加密
SSL 与 TLS 的区别
SSL(Secure Sockets Layer)是最早的安全层协议,由网景公司开发。TLS(Transport Layer Security)是 SSL 的继任者,本质上是 SSL 3.0 的标准化版本。现在说的”SSL”通常指的就是 TLS,SSL 本身已经废弃不用了。
HTTP 与 SSL 的关系
通常 HTTP 直接和 TCP 通信。使用 SSL 后,演变成 HTTP 先和 SSL 通信,再由 SSL 和 TCP 通信。所谓 HTTPS,就是披了一层 SSL 外壳的 HTTP。
SSL 不只服务于 HTTP,应用层的 SMTP、FTP 等协议均可配合 SSL 使用。
共享密钥加密的困境
对称加密(共享密钥加密):加解密用同一把密钥,速度快,但有个问题——密钥本身怎么安全地传给对方?如果密钥在传输途中被窃取,加密就没有意义了。
公开密钥加密(非对称加密)
使用两把密钥:公钥(公开)和私钥(保密)。发送方用公钥加密,只有持有私钥的接收方才能解密。解决了密钥传递的问题,但速度比对称加密慢很多。
这里的思路如下:
- 寄一把锁过去,锁的钥匙留着
- 客户端吧客户端的钥匙放到盒子里,然后用这个锁锁上
- 寄回去打开锁,拿到客户端的钥匙
HTTPS 的混合加密机制
HTTPS 结合两者的优点:
- 用公开密钥加密安全地交换一个对称密钥
- 后续通信全部用对称加密传输数据
认证
数字证书认证机构(CA)
公钥本身无法证明”这把公钥真的属于这个网站”,中间人可以伪造公钥。解决方案是引入可信的第三方——CA(Certificate Authority,证书颁发机构)。
流程:
- 服务器向 CA 提交公钥和域名信息
- CA 用自己的私钥签名,生成数字证书
- 客户端收到证书后,用内置的 CA 公钥验签,确认证书真实有效
证书里包含:域名、服务器公钥、有效期、CA 签名。
证书错误的常见场景
打开网站时遇到”不安全”或”无法访问”,常见原因:
| 提示 | 原因 |
|---|---|
| 证书已过期 | 网站没有及时续签证书 |
| 证书不受信任 | CA 不在浏览器内置的可信列表中(如自签名证书) |
| 证书域名不匹配 | 证书颁发给 a.com,但你访问的是 b.com |
例如访问某个内网系统或小网站,浏览器会弹出红色警告页,提示”您的连接不是私密连接”,这通常是用了自签名证书(自己给自己签,没有 CA 背书)
这导致的就是你收到的公钥(锁),可能不是这个网站发送的,黑客可能仿造公钥,导致了你收到的信息和服务器收到的信息都可能是伪造的
完整性保护
加密了之后,虽然黑客看不懂,但是可以乱改,所以需要确认信息是否被乱改过,
引入哈希算法,只要被改过,指纹都会不同
TLS 在每条消息上附加 MAC(消息认证码,也就是哈希算法算出的指纹),接收方验证 MAC (自己算一遍然后比对)来确认数据在传输途中没有被篡改
如果你正在跟随梳理, 返回 MOC←