HTTPS
webkong
# HTTPS
http的问题:HTTP 报文传输过程中是明文的,可以通过抓包的方式查看到,所以有安全问题,容易被劫持篡改
为了解决这个问题,就有了 TLS ,https
= http
+ TLS
# TLS
TLS:安全传输层协议,用于在两个通信应用程序之间提供保密性和数据完整性
该协议由两层组成:
- TLS 记录协议(TLS Record)
- TLS 握手协议(TLS Handshake)
TLS 利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(Session key)
https 分为两个阶段:
- 通过非对称加解密确认对方身份是否合法,若合法生成会话密钥。(这一步是核心)
- 报文的在发送前,先用会话密钥进行对称加密,在传输。
非对称加密算法需要两个密钥:公开密钥(public key:简称公钥)和私有密钥(private key:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥
# TLS 记录协议(TLS Record)
# TLS 握手协议(TLS Handshake)
步骤:
- 客户端请求建立TLS链接,服务端向客户端发送一个随机数
random A
和 CA证书 - 客户端对证书验证,通过后生成一个随机数
random B
,用公钥对B
加密,同时用B
生成一段签名发送给服务端 - 服务端用私钥解密,用解密后的 key 生成签名,并与客户端传来的签名进行比较,通过后生成一个随机数
random C
,并用私钥加密,还有随机数生成的hash 值
,一并发给客户端 - 客户端用公钥解密,并校验 hash 值通过后,两端利用
A
B
C
通过一定的算法生成 session key,后续的报文将通过 session key 对称加密进行传输。
# CA 证书
假如没有证书验证这一环节,那么公钥在传输过程极有可能被中间人拦截,将服务端的公钥换成它自己的公钥,返回给客户端,这样就起不到加密的作用了,这就是中间人攻击
CA证书,是由 CA 机构颁发的一个凭证,里面关键的信息有,签名算法、签名hash算法、颁发者、有效期、公钥、指纹,这个两个算法就表示对称阶段和非对称阶段采用的算法,公钥就是服务端的公钥,在申请的时候,企业需要上传公钥给CA机构,重点是这个指纹,这个指纹是由 CA 机构通过私钥对一段签名加密生成的。