HTTP 和HTTPS区别

HTTP:(Hypertext Transfer Protocol Vertion)超文本传输协议,被用于web浏览器与服务器传递消息,以明文传输,不提供任何加解密。端口80

HTTPS:在http协议的基础上加入了SSL(Secure Sockets Layer)加密传输协议,加密传输,身份验证。端口443。需要申请CA证书,需要费用。

一是保证数据传输不被篡改,二是保证服务器身份验证。

https客户端与服务器端交互流程:

1:客户端使用https访问服务器端,要求建立ssl连接。

2:服务器端返回网站证书(证书包含公钥)给客户端。

3:客户端的浏览器生成会话密钥,然后利用网站的公钥对其加密,并发送给网站。

4:网站服务器接收到,客户端加密后的会话密钥,使用网站的私钥对其解密,得到会话密钥。

5:之后的客户端和服务器端的通信都会通过此会话密钥进行加解密通信。

对称加密:会话密钥是对称加密算法的,是一个随机数,每次会话都不一样。

非对称加密:公钥和私钥是非对称加密算法的,私钥加密的东西只要是公钥就能解开,公钥加密的东西只有私钥才能解开。公钥是对外开放的,私钥是内部使用的。

会话过程使用会话密钥对称加密来进行通信的,

会话密钥的安全获取是通过非对称加密的服务器公钥来获取的。

为了保证服务器的公钥不被掉包,需要使用第三方的私钥对其服务器的公钥加密,生成数字证书,然后只能使用第三方的公钥解密获得服务器公钥。

但证书也有可能被中间人掉包,中间人也申请了第三方证书。此证书也能被第三方公钥解开。

为了保证数字证书不被篡改,浏览器和操作系统都会维护一个权威的第三方机构列表(包括它们的公钥),然后会对数字证书的内容进行MD5加密生成数字签名,通过对数字签名的验证可以保证此证书的内容没有被篡改。

第三方机构用私钥加密服务器公钥和相关信息成的东西为数字证书。

第三方机构为数字证书签发机构。

数字证书的内容MD5加密后生成数字签名。

https请求概述:

客户端发送请求到服务器端请求,

服务器端接收请求返回数字证书。

验证数字证书安全性,主要是没有被篡改。

浏览器在本地查找第三方可信机构的公钥。

通过第三方机构的公钥解密验证数字证书的可信度。

通常是用第三方的公钥解密数字证书中的数字签名生成数字签名明文签名B。

然后对数字证书的内容进行MD5加密生成签名A。比对签名A和签名B可以验证此证书的信息没有被篡改。

验证数字证书的安全性后,用第三方机构的公钥可以解开得到服务器的公钥。

在安全得到服务器的公钥后,就使用服务器公钥加密会话密钥,发送给服务器。

服务器用私钥解密得出会话密钥,此后双方就可以通过会话密钥进行加密通信。

整个会话过程主要是为了生成双方可见唯一的会话密钥。要防止被中间人掉包。

为了获取会话密钥,需要获取服务器公钥。

为了安全得到服务器公钥,使用了第三方可信机构的数字证书,数字签名。

数字证书是第三方机构的公钥对服务器公钥加密,保证服务器的公钥是安全性。但不能保证数字证书被替换的情况。

数字签名是为了保证数字证书一致性,没有被篡改。

HTTP2.0多路复用

SSL证书需要购买申请,功能越强大的证书费用越高
SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗(SSL有扩展可以部分解决这个问题,但是比较麻烦,而且要求浏览器、操作系统支持,Windows XP就不支持这个扩展,考虑到XP的装机量,这个特性几乎没用)。
根据ACM CoNEXT数据显示,使用HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电。
HTTPS连接缓存不如HTTP高效,流量成本高。
HTTPS连接服务器端资源占用高很多,支持访客多的网站需要投入更大的成本。
HTTPS协议握手阶段比较费时,对网站的响应速度有影响,影响用户体验。比较好的方式是采用分而治之,类似12306网站的主页使用HTTP协议,有关于用户信息等方面使用HTTPS。
 

猜你喜欢

转载自blog.csdn.net/xszrt/article/details/89322631