HTTPS
从网络协议的角度理解HTTPS:
HTTPS 经由 HTTP 进行通信,但利用 TLS 来保证安全,即 HTTPS = HTTP + TLS
从密码学的角度理解HTTPS
HTTPS 使用 TLS 保证安全,这里的“安全”分两部分,一是传输内容加密、二是服务端的身份认证
TLS工作流程:
密码基础
伪随机数生成器
为什么叫伪随机数,因为没有真正意义上的随机数
它的主要作用在于生成对称密码的秘钥、用于公钥密码生成秘钥对
消息认证码
消息认证码主要用于验证消息的完整性与消息的认证,其中消息的认证指“消息来自正确的发送者”
- 发送者与接收者事先共享秘钥
- 发送者根据发送消息计算 MAC 值
- 发送者发送消息和 MAC 值
- 接收者根据接收到的消息计算 MAC 值
- 接收者根据自己计算的 MAC 值与收到的 MAC 对比
- 如果对比成功,说明消息完整,并来自与正确的发送者
缺点:消息认证码的缺点在于无法防止否认,因为共享秘钥被 client、server 两端拥有,server 可以伪造 client 发送给自己的消息(自己给自己发送消息)
数字签名
数字签名和消息认证码都不是为了加密
使用自己的私钥对自己所认可的消息生成一个该消息专属的签名,这就是数字签名,表明我承认该消息来自自己
注意:私钥用于加签,公钥用于解签,每个人都可以解签,查看消息的归属人
公钥密码
公钥密码也叫非对称密码,由公钥和私钥组成,它是最开始是为了解决秘钥的配送传输安全问题,即,我们不配送私钥,只配送公钥,私钥由本人保管
它与数字签名相反,公钥密码的私钥用于解密、公钥用于加密,每个人都可以用别人的公钥加密,但只有对应的私钥才能解开密文
client:明文 + 公钥 = 密文
server:密文 + 私钥 = 明文
注意:公钥用于加密,私钥用于解密,只有私钥的归属者,才能查看消息的真正内容
证书
密码总结
密码 | 作用 | 组成 |
---|---|---|
消息认证码 | 确认消息的完整、并对消息的来源认证 | 共享秘钥+消息的散列值 |
数字签名 | 对消息的散列值签名 | 公钥+私钥+消息的散列值 |
公钥密码 | 解决秘钥的配送问题 | 公钥+私钥+消息 |
证书 | 解决公钥的归属问题 | 公钥密码中的公钥+数字签名 |
HTTPS的一次请求流程
先建立一个tcp的连接
浏览器获取证书
浏览器验证证书->去ca验证,ca已经把根证书存到了我们的操作系统中
浏览器通过公钥加密一个对称密钥(一段数据),
服务器接收到密文,通过自己的私钥解密得到对称密钥
接下来的传输使用对称加密算法,以及对称密钥进行通信,