面试题精选之Http与Https的区别及SSL安全协议解析
一、Http 和 Https 的相关概念
Http: Hyper Text Transfer Protocol,即超文本传输协议。Http 协议是目前网络上应用最广泛的一种网络协议,所有的 www 文件都必须遵守这个协议,而Http在传输信息时,信息都是明文的格式,一些隐私信息很容易泄露,所以就有了Https。
Https: Hyper Text Transfer Protocol Secure,即超文本传输安全协议。 Https 是以安全为目标的 Http 协议,简单来说就是一个安全版的 Http。它是在 Http 协议之下加上了一层安全协议,这种安全协议称为 SSL (Secure Sockets Layer),即安全套接字。它通过SSL对信息进行加密,确保信息不会被三方截获。
二、Http 和 Https 的物理模型
上面我们讲到了 Https 是在 Http 协议之下加了一层SSL安全协议。那么 Http 本身的物理模型是什么样的呢?在计算机网络中,Http 协议在应用层使用,下层分别是传输层,网络层,数据链路层和物理层。我们来看图:
注意: 上图只是为了说明 Https 和 Http 在物理模型上的区别,并未把每层的协议完全列举。
那么 Https 跟 Http的物理模型有何不同呢?我们来看图:
这样就一目了然了,Https 在往下面的运输层传输的时候要通过一层SSL安全协议。
三、Http 和Https 的区别
通过以上分析,我们得出一下几点不同:
(1)https协议需要到ca申请证书,一般免费证书很少,需要交费(下面会说到)。
(2)http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
(3)http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
(4)http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
四、SSL 的工作机制
现在我们知道Https的传输数据要经过一层SSL安全协议,那么这个SSL安全协议如何确保安全呢?
首先,我们都知道Http协议是按照请求响应的方式,在客户端与服务器之间进行通讯的
SSL对这个请求过程进行了改进,我们把改进后的改成称为 SSL握手。
SSL握手的步骤
(1)客户端首先向服务器发送一个连接请求。
(2)服务器收到客户端的连接请求后,会生成一对非对称**(即一个公钥,一个私钥),公钥用来发送给客户端对客户端产生的对称**加密,私钥用于接收解密获得对称**。
(3)服务器向客户端发送安全证书 ① ,安全证书中包含服务器生成的公钥。
(4)客户端接收到安全证书,并对安全证书进行验证和解密,然后随机生成一个对称**。
(5)客户端将生成的对称**通过服务器的公钥加密,发送给服务器。
(6)服务器收到加密的对称**,使用自己的私钥对其进行解密。
(7)双方都收到了对称**,可以对信息进行加密,相互通信,保证安全性。
下图能帮助你能更好的理解SSL握手:
注释:
①安全证书:安全证书是由服务器向CA(安全证书颁发机构)发送了自己的公钥,CA通过自己的非对称**对服务器的公钥进行加密,并对服务器的网址等信息进行加密生成证书签名,组合加密后的服务器公钥生成的。
额外知识点:
1、收到安全证书后,客户端首先要做的事情就是验证证书的真伪。各大浏览器和操作系统已经维护了所有权威证书机构的名称和公钥。所以客户端只需要知道是哪个机构颁发的证书,就可以从本地找到对应的机构公钥,解密出数字证书签名。然后,客户端通过同样的签名规则生成一个证书签名,如果两个签名一直,说明证书是有效的。
2、谷歌浏览器会对非Https的网页进行惩罚,使他们的搜索排名靠后。