HTTPS 协议原理
最近学习了 HTTPS 协议的基础知识,把自己的粗浅的理解通过大白话写一下。不涉及技术细节。
1. 背景
HTTP 协议是基于 TCP/IP 协议进行传输的。
HTTP 传输的数据完全透明,也就是说,如果有中间人对流量截取分析,所有的信息都将泄露。
HTTPS 协议是对 HTTP 协议的基础上做了一层加密操作 (SSL 层)。所以,其英文全称是 Hypertext Transfer Protocol over Secure Socket Layer。
2. 对称加密
沟通的双方使用相同的密钥。
客户端用密钥
Q
加密信息,发送到服务端。服务端用同样的密钥Q
解密。缺点:如何保证密钥
Q
的安全? 如何将密钥安全地告诉对方?
3. 非对称加密
沟通双方使用不同的密钥。
加密,使用公钥
P
解密,需要同时使用公钥
P
和私钥Q
加密是不可逆的。加密者自己也无法破解,因为没有私钥。
服务器把公钥
P
公开发布,私钥Q
自己秘密保存好。客户使用公钥
P
加密信息,除了拥有私钥Q
的服务器,其他人都无法解密,包括客户自己。数学原理
两个素数
m
和n
, 其乘积为z
。z
做分解因子运算,只能有分解为m * n
这一种情况。比如,
3 * 7 = 21
,将21
分解因子,只能分解为3 * 7
,没有其他的情况了。两个大素数
m
和n
,从他们的积z
反向推导分解因子,分解出m
和n
。这是一个公认的数学难题。公钥就是大素数的积
z
,私钥就是两个大素数m
和n
。用户(或其他人)拿到公钥
z
,是无法算出私钥m
和n
的。也就无法进行解密。
4. HTTPS 工作流程
对称加密性能好,但无法保证双方安全地同步密钥。
非对称加密性能差,但安全。
HTTPS 的流程是,将对称加密的密钥,通过非对称加密传输。双方安全地获得对称加密密钥后,使用对称加密密钥进行加密沟通。在保证安全的情况下,获取最好的性能。
服务器从 CA 厂商处申请或购买证书(包含公钥、私钥)
服务器保存证书的私钥
客户端(浏览器)申请 HTTPS 连接到服务器
服务器返回证书(公钥)给客户端(浏览器)
客户端(浏览器)通过公共服务验证证书(公钥)是合法的 CA 厂商发行的
防止伪造证书的中间人攻击
有些测试环境会放弃证书验证,默认信认证书
在实际项目中,代码所实现的客户端,证书是内部且可信的,则不做验证。
客户端(浏览器)生成一个随机 对称加密的密钥
客户端(浏览器)使用证书(公钥)加密刚刚生成的密钥
客户端(浏览器)将加密的密钥发送给服务端 (中间人截取也将无法破解)
服务端使用证书的私钥解密,获取对称加密的密钥
双方都安全的同步了对称加密的密钥,后面的交流通过对称加密密钥进行加密。
← SASS