面试官:讲一下 https 和 http 的区别
# 面试官:讲一下 https 和 http 的区别
"时无重至,华不再阳"
# 01 前言
因为http协议传输的数据都是以明文的形式传输的,内容没有经过加密操作,这就造成了传输不安全的情况。如果传输的数据中存在着银行卡,身份证等敏感信息,容易被他人盗取,实施诈骗。
所以人们就想出了一种能够安全传输的协议,https协议。该协议可以在信息传输前进行加密,加密之后接收方需要解密才可以得到信息,否则即使你截获了传输数据也无济于事。
# 基本概念
- http: 是一个客户端和服务器端请求和应答的标准(TCP),用于从 WWW 服务器传输超文本到本地浏览器的超文本传输协议。
- https:是以安全为目标的 HTTP 通道,即 HTTP 下 加入 SSL 层进行加密。其作用是:建立一个信息安全通道,来确保数据的传输,确保网站的真实性。
# 02 区别
那么https相比于http有哪些区别呢?是不是一种新的协议呢?其实https只是在http的基础上建立的,我们知道http协议在数据传输之前会进行TCP的三次握手,然后才会传输数据。其实https同样也会进行三次握手操作,只是在应用层和传输层之间添加了SSL/TLS层而已。
首先我们来看一下https是怎么连接的?
- 首先客户端发起请求到服务端,服务端处理后发送一个公钥给客户端
- 客户端进行验证公钥,看公钥是否有效和是否过期
- 客户端验证通过会产生随机值key,然后用公钥进行加密回传给服务端
- 服务端用私钥解密后获得客户端的随机值key
- 利用随机值key加密数据后传输给客户端
- 客户端利用key值进行解密数据
- 客户端获取真正的数据
通过上图我们就应该了解了https握手阶段,其实上面不仅是SSL握手,还包括建立连接的TCP三次握手。
既然https能够保证安全传输,是不是所有网站都使用https协议呢?
其实现在最关键的就是证书问题,用于证明你的网站是安全的而不是危险的。这就需要第三方信任度高的权威机构来对网站进行证书颁发,就好比给你授权一样。比如国内我们会相信支付宝,所以愿意把钱都存进余额宝一样的道理。
一般来说免费的证书是比较少的,很多都要收费,而且价格不菲。只有那些大型的公司或者安保系数比较高的电商网站等需要使用,一般个人的就不需要了。所以总结一下https的不足之处:
- 证书问题,价格高
- 握手阶段会额外消耗时间
- SEO搜索响应慢
- 加密范围比较有限
- 若权威公司的证书泄露,一样是不安全的
# 区别与优缺点
- http 是超文本传输协议,信息是明文传输,HTTPS 协议要比 http 协议安全,https 是具有安全性的 ssl 加密传输协议,可防止数据在传输过程中被窃取、改变,确保数据的完整性(当然这种安全性并非绝对的,对于更深入的 Web 安全问题,此处暂且不表)。
- http 协议的默认端口为 80,https 的默认端口为 443。
- http 的连接很简单,是无状态的。https 握手阶段比较费时,会使页面加载时间延长 50%,增加 10%~20%的耗电。
- https 缓存不如 http 高效,会增加数据开销。
- Https 协议需要 ca 证书,费用较高,功能越强大的证书费用越高。
- SSL 证书需要绑定 IP,不能再同一个 IP 上绑定多个域名,IPV4 资源支持不了这种消耗。
# https的工作原理
客户端在使用 HTTPS 方式与 Web 服务器通信时有以下几个步骤:
- 客户端使用 https url 访问服务器,则要求 web 服务器建立 ssl 链接。
- web 服务器接收到客户端的请求之后,会将网站的证书(证书中包含了公钥),传输给客户端。
- 客户端和 web 服务器端开始协商 SSL 链接的安全等级,也就是加密等级。
- 客户端浏览器通过双方协商一致的安全等级,建立会话密钥,然后通过网站的公钥来加密会话密钥,并传送给网站。
- web 服务器通过自己的私钥解密出会话密钥。
- web 服务器通过会话密钥加密与客户端之间的通信。
# 03 小结
对于加密的流程,无非就是一个算法的问题,利用算法对随机值进行一个加密的操作,假如你的算法强度高,复杂性也比较高,那么没有解密方法的情况下是很难破解的。
算法这一块就不是我们考虑的范围了,我们只要好好理解这个过程就好了,前端工程师无需深究其中的细节部分。只要你面试的时候能够说出以上的流程,那么就没有问题了。