这是我参与「第三届青训营 -后端场」笔记创作活动的第三篇笔记
HTTP协议,众所周知,是一个简单的请求-响应协议,它通常运行在TCP协议之上。那么HTTPS协议又是什么?
HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。 为什么又出现了一个HTTPS协议呢?
- HTTP以明文传输,不适合宣传输敏感信息;
- HTTPS在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份。 HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
HTTP和HTTPS又有什么区别呢?
- HTTP是明文传输,安全性较差;HTTPS数据传输是加密的,安全性较好;
- 使用HTTPS需要用到CA申请证书;
- HTTP页面响应速度比HTTPS快,因为HTTP使用TCP三次握手建立连接,而HTTPS除了TCP的3个包,还要加上SSL握手的包,速度较慢;
- HTTP和HTTPS接口不一样 前者是80 后者是443;
- HTTPS是构建在SSL/TLS协议上的HTTP协议,所以HTTPS比HTTP更消耗资源。
加密算法
SSL/TLS的核心要素是非对称加密。非对称加密采用两个密钥——一个公钥,一个私钥。在通信时,私钥仅由解密者保存,公钥由任何一个想与解密者通信的发送者(加密者)所知。
使用SSL/TLS进行通信的双方需要使用非对称加密方案来通信,但是非对称加密设计了较为复杂的数学算法,在实际通信过程中,计算的代价较高,效率太低。
于是SSL/TLS协议使用非对称加密,对对称加密的密钥进行加密,保护该密钥不在网络信道中被窃听。这样,通信双方只需要一次非对称加密,交换对称加密的密钥,在之后的信息通信中,使用绝对安全的密钥,对信息进行对称加密,即可保证传输消息的保密性。
SSL/TLS握手流程:
- ClientHello:客户端生成随机数,并发送一组密码学套件供服务端选
- SeverHello:服务端生成随机数,并从上述密码学套件里选一个
- Certificate:服务端发给客户端证书(包含服务器公钥)
- ServerKeyExchange:服务端发给客户端秘钥交换算法所需的值(用于 ECDHE 算法相应曲线规范等)
- ServerHelloDone:服务端hello阶段结束
- ClientkeyExchange:客户端发给服务端秘钥交换算法所需的值pre_master;到这里服务端和客户端将通过pre_ master和Hello阶段的两个随机数共同生成最終的对称加密秘钥master secret
- Changecipherspec:客户端告诉服务端,已经生成master secret,之后的消息都加密发送了
- Finish:客户端结束并发送之前所有内容的hash供服务端验证
- ChangeCipherSpec:服务端告诉客户端,已经生成master secret,之后的消息都加密发送了
- Finish:服务端结東并验证