前言
小伙伴们在面试过程中会遇到一些HTTPS相关问题
我大概收集整理了下
- 介绍HTTPS
- HTTP和HTTPS的区别
- HTTPS的加密过程
- HTTPS怎么建立安全通道
- 介绍SSL和TLS
这些问题我们都可以在以下文章中找到答案
http存在问题
- 被窃听:使用了明文
- 遇伪装:不验证通信方身份
- 遭篡改:无法证明报文完整性
问题解决
-
被窃听解决
- 通信加密:通过和SSL或TLS的组合使用,加密通信内容
- 内容加密:客户端对HTTP报文加密处理,(需要客户端和服务器端有加密和解密的机制)仍有风险
-
遇伪装解决
- 查看证书:SSL提供证书手段
-
遭篡改解决
- 完整性保护:https提供
HTTP + 加密 + 认证 + 完整性保护
= HTTPS
https简介
HTTPS 不是新协议,只是HTTP通信接口部分用SSL和TLS代替
HTTP + SSL = HTTPS
HTTPS : HTTP -> SSL -> TCP -> IP
HTTPS : HTTP -> TCP -> IP
加密
-
对称密钥加密(共享密钥加密):加密解密用同一个密钥
- 密钥必须发给对方,过程中可能被窃听
-
非对称密钥加密(公开密钥加密):一把私有密钥(只有自己知道),一把公开密钥(任何人都可以知道)
- 发送方用公开密钥加密,接收方用私有密钥解密
- 处理速度较慢
HTTPS采用共享密钥加密
与公开密钥加密
混合加密机制,保证处理速度和安全性
- 交换密钥阶段: 使用公开密钥加密 可以简单理解为加密的是共享密钥的公钥(保证安全)
- 建立通信交换报文: 使用共享密钥加密 加密的是通信的报文(保证速度)
认证
- 服务器 用自己的
公开密钥
登录证书认证机构 - 认证机构用自己的私有密钥向服务器的公开密码加
数字签名
并颁发公钥证书
- 客户端拿到服务器的公钥证书,利用认证机构公开密钥(认证机构公开密钥已事先植入客户端),验证公钥证书的的数字签名,已确认服务器公开密钥的真实性
- 使用服务器的公开密钥加密报文发送
- 服务器用私有密钥解密报文
完整性保护
- 应用层发送数据时附加一种MAC的报文摘要,可查知报文是否被篡改
HTTPS安全通信流程
客户端支持的加密算法 = [A,B,C]
客户端随机数 = R1
服务端随机数 = R2
TLS四次握手
-
Client Hello
客户端请求建立连接,向服务端发送(R1 + [A,B,C]
) -
Server Hello
服务端 回复(R2 + [A] + 证书(非对称加密公钥)
) -
Client Key Exchange
客户端 验证证书 然后通过[A] -> key
key + 非对称加密公钥 = 加密key
并发送(加密key
) -
Server Finish
服务端 利用加密key + 非对称加密私钥 = 解密key
同时利用R1 + R2 + 解密key = 对称加密的密钥
此后的HTTP链接数据传输即通过对称加密方式进行加密传输。
SSL和TLS
SSL
是一种安全传输协议,由于安全的原因SSL v1.0和SSL v2.0都没有公开,直到SSL v3.0。
TLS
是SSL v3.0的升级版,目前市面上所有的HTTPS都是用的是TLS,而不是SSL
为保证小伙伴们快速理解记忆,本文对HTTPS知识尽可能的做了简化处理,某些细节没有深究,望见谅
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。