https详解
# http与https
# http简介
HTTP 协议,全称超文本传输协议(Hypertext Transfer Protocol)。顾名思义,HTTP 协议就是用来规范超文本的传输,超文本,也就是网络上的包括文本在内的各式各样的消息,具体来说,主要是来规范浏览器和服务器端的行为的。
并且,HTTP 是一个无状态(stateless)协议,也就是说服务器不维护任何有关客户端过去所发请求的消息。
为什么设计成无状态:有状态协议会更加复杂,需要维护状态(历史信息),而且如果客户或服务器失效,会产生状态的不一致,解决这种不一致的代价更高。
http通信过程:(使用tcp作为传输层协议)
- 服务器在 80 端口等待客户的请求。
- 浏览器发起到服务器的 TCP 连接(创建套接字 Socket)。
- 服务器接收来自浏览器的 TCP 连接。
- 浏览器(HTTP 客户端)与 Web 服务器(HTTP 服务器)交换 HTTP 消息。
- 关闭 TCP 连接。
# https详解
# 1.简介
HTTPS 协议(Hyper Text Transfer Protocol Secure),是 HTTP 的加强安全版本。HTTPS 是基于 HTTP 的,也是用 TCP 作为底层协议,并额外使用 SSL/TLS 协议用作加密和安全认证。默认端口号是 443.HTTPS 协议中,SSL 通道通常使用基于密钥的加密算法,密钥长度通常是 40 比特或 128 比特。
# 2.对称加密
通信双方共享唯一密钥 k,加解密算法已知,加密方利用密钥 k 加密,解密方利用密钥 k 解密,保密性依赖于密钥 k 的保密性。
# 3.非对称加密
非对称加密采用两个密钥——一个公钥,一个私钥。在通信时,私钥仅由解密者保存,公钥由任何一个想与解密者通信的发送者(加密者)所知。
# 非对称加密原理
非对称加密的公钥和私钥需要采用一种复杂的数学机制生成(密码学认为,为了较高的安全性,尽量不要自己创造加密方案)。公私钥对的生成算法依赖于单向陷门函数。在这里,函数 f 的计算方法相当于公钥,陷门 h 相当于私钥。公钥 f 是公开的,任何人对已有输入,都可以用 f 加密,而要想根据加密信息还原出原信息,必须要有私钥才行。即数据可以由公钥加密,由私有解密
# 4. 通信流程
- 用户在浏览器中输入https网址,连接到server的443端口。
- 经过tcp连接后,进行ssl流程。服务器中会保存相关的证书(证书中有一对公钥和私钥)
- 客户端向服务端发送client hello ,其中包含了TLS版本,加密方法,和客户端生成的一个随机数(第一个随机数)
- 服务端接收到数据后(明文),向客户端返回信息,包括确认STL版本、确认加密套件,并生成一个随机数(第二个随机数)发送给客户端。
- 与此同时,服务端还会向客户端发送自己的证书和相应的公钥(私钥不会发送)
- 经过一些列的服务端发送的信息,最终发送确认发送信息给客户端
- 客户端收到公钥和证书后,客户端生成第三个随机数,并用公钥进行加密,得到加密后的数据成为预主密钥,将预主密钥发送给服务端。
- 此时客户端和服务端都持有了相同的第一随机数,第二随机数,预主密钥(其中第一、二随机数是未加密的,预主密钥是客户端经过加密的,所以预主密钥信息是安全的,只有客户端和服务端知道)
- 客户端与服务端分别通过相同的方法(使用第一随机数、第二随机数、预主密钥)计算出最终的会话密钥(也只有客户端和服务端知道),然后双方的通信就通过会话密钥对数据进行加密解密。
# 总结
通过公钥和私钥的非对称加密传输预主密钥,最终形成了会话密钥,其实就是使用非对称加密保证了双方协商会话密钥的私有性,通过会话密钥这个对称加密,保障的数据的安全性。
这样,通信双方只需要一次非对称加密,交换对称加密的密钥,在之后的信息通信中,使用绝对安全的密钥,对信息进行对称加密,即可保证传输消息的保密性。
(1)HTTPS是密文传输,HTTP是明文传输;
(2)默认连接的端口号是不同的,HTTPS是443端口,而HTTP是80端口;
(3)HTTPS请求的过程需要CA证书要验证身份以保证客户端请求到服务器端之后,传回的响应是来自于服务器端,而HTTP则不需要CA证书;
(4)HTTPS=HTTP+加密+认证+完整性保护。