HTTPS

https 原理及加解密过程

Posted by nolan on March 10, 2020

原理

服务器给客户端颁发一个证书,客户端发送请求前,用证书做加密,到达服务器后,服务器用根证书解密。

密码学相关概念

密钥

通常是一个字符串或数字,进行加密/解密算法时使用。

公钥和私钥都是密钥,只不过一般公钥是对外开放的,加密时使用;私钥是不公开的,解密时使用。

非对称加密

使用公钥加密,在客户端与服务器相互验证的过程中用的就是非对称加密算法。

有 RSA、DSA/DSS、Elgamal、Rabin、D-H、ECC 等;

RSA 密码体制就是公钥密码体制,RSA 的一对公钥和私钥都可以用来加密和解密。

公钥加密后只能由私钥解密;私钥加密后只能由公钥解密。

对称加密

使用私钥加密,加密使用的密钥和解密使用的密钥是同一个密钥。

有 AES、DES、3DES、TDEA、Blowfish、RC4、RC5、IDEA 等。

由于加密算法是公开的,若要保证安全性,私钥不能对外公开。

通常用来加密消息体。

数字证书

包括公钥,签名使用的算法,证书有效期,颁发机构。

数字签名

如果使用私钥对所有信息进行加密,开销太大,一般的做法是对信息做个 hash 计算,然后用私钥对这个计算值进行加密,得到一个数字签名。

image

验证过程

1)客户端发起一个 http 请求,连接到服务器的 443 端口。

2)颁发证书

服务端把自己的信息以数字证书的形式返回给客户端。

证书中有一个公钥来加密信息,私钥由服务器持有。

3)验证证书的合法性

客户端收到服务器的响应后会先验证证书的合法性(证书中包含的地址与正在访问的地址是否一致,证书是否过期)。

4)生成对称加密算法

如果验证通过,浏览器就会生成一个随机码 key;

浏览器用服务器的公钥对随机码 key 加密,传送给服务端,服务端用私钥解密得到随机码 key,以后就用这个随机码对报文进行加密,传送给浏览器后,浏览器用随机码 key 进行对称解密。

image

总结

HTTPS 实际上就是 HTTP 穿上了 SSL/TLS 的外套,HTTP 属于应用层的协议,而 SSL(安全套接字)与 TLS(运输层安全)都属于运输层协议。其实 SSL 与 TLS 都是上个世纪的产物,最新版本的 TLS 建立在 SSL 3.0 协议规范之上。