一、HTTP协议
HTTP超文本传输协议:应用层协议,是一个简单的请求-响应协议,指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。(CS模式)
1.1HTTP协议格式
HTTP请求报文:请求行(请求方法、请求地址、HTTP版本号)、请求头、空行、请求正文
HTTP响应报文:响应行(HTTP版本号、状态码、状态码描述)、响应头、空行、响应正文
空行存在的意义:
1.分割请求头和请求正文、响应头和响应报文
2.避免通过TCP传输会造成“粘包”问题
二、HTTPS
HTTPS:HTTP+SSL
2.1HTTP和HTTPS的区别
1.端口号不同。HTTP:80,HTTPS:443
2.安全性不同。HTTP:明文传输,HTTPS利用SSL建立信息安全通道以及确认服务器的身份。
2.1HTTPS建立通信的过程(阮一峰)
1.客户端先向服务器发起加密通信的请求,ClientHello请求。
客户端主要向服务器提供以下信息;
(1)支持的协议版本,比如TLS1.0。
(2)一个客户端生成的随机数,之后用于生成“会话密钥”。
(3)支持的加密方法。
(4)支持的压缩方法。
2.服务器回应请求,ServerHello
(1)确认使用的加密通信协议版本,若浏览器和服务器支持的协议版本不一样,服务器关闭加密通道。
(2)一个服务器生成的随机数,之后用于生成“会话密钥”。
(3)确认使用的加密方法。
(4)服务器证书(存放服务器的公钥)。
除以上信息,若服务器需要确认客户端的身份,就会再包含一项请求,要求客户端提供“客户端证书”。如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书。
3.客户端回应
首先验证服务器证书,是否是可信机构颁发、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。
若证书没有问题,客户端从证书中取出服务器的公钥。然后向服务器发送下面三个信息。
(1)一个随机数,又称“pre-master key”。该随机数用【服务器公钥加密】,防止被窃听。
(2)编码改变通知。表示随后的信息都将用双方商定的加密方法和密钥发送。
(3)客户端握手结束通知,表示客户端的握手阶段已经结束。(前面发送的所有内容的hash值,用来提供给服务器校验)。
这一阶段结束,客户端和浏览器都有了生成的三个随机数,双方会用【事先商定的加密方法】,【各自生成】本次会话所要用的“会话密钥”。
4.服务器的最后的回应
服务器收到第三个随机数“pre-master key”之后(用服务器的私钥解密获得),通过之前协商的加密算法,计算生成本次会话所用的“会话密钥”。然后,向客户端最后发送下面信息。
(1)编码改变通知。表示随后的信息都将用双方商定的加密方法和密钥发送。
(2)服务端握手结束通知,表示服务端的握手阶段已经结束。(前面发送的所有内容的hash值,用来提供给客户端校验)。
到此,整个握手阶段全部结束(其中涉及有非对称加密过程)。接下来,客户端和服务器端进入加密通信,完全使用普通的HTTP协议,只不过用“会话密钥”加密内容。
三、对称加密和非对称加密
对称加密:加密和解密都是用同样的密钥
非堆成加密:加密过程中有分公钥和私钥,私钥自留解密,公钥供其他加密
3.1对称加密和非对称加密的区别
1.加密过程不同。
2.安全性不同。非对称加密更安全。
3.速度不同。对称加密的速度更快,费时更短。