今天给大家分享下HTTPS的相关知识。作为前端工程师,对于天天打交道的HTTP我们肯定都熟得不能再熟了,每一次通过浏览器发出的请求都是需要符合HTTP协议的。那么HTTPS和HTTP的区别大家了解吗?
这是一个经典的面试题,大部分人会这么回答
HTTPS比HTTP多了一个S(Secure),也就是说HTTPS是安全版的HTTP 端口号不同。HTTP使用80端口,HTTPS使用443端口 HTTPS用的是非对称加密算法 上面的回答能给几分?等看完本文我们可以再回头来看下这个回答
那么,HTTPS是如何实现安全的数据传输呢?想彻底搞明白这个问题,就需要了解HTTP的发展历程、HTTP遇到的问题、对称与非对称加密算法、数字签名、第三方证书颁发机构等概念。
所以,想要全面了解HTTPS,还是要从HTTP的发展历程说起......
I.HTTP HTTP是Hypertext Transfer Protocal 的缩写,中文全称是超文本传输协议。
超文本是指包含但不限于文本外的图片、音频、视频等多媒体资源。 协议是通信双方约定好的数据传输格式以及通信规则。 HTTP是TCP/IP协议簇的最高层--应用层协议。
浏览器和服务器在使用HTTP协议相互传递超文本数据时,将数据放入报文体内,同时填充首部(请求头或响应头)构成完整HTTP报文并交到下层传输层,之后每一层加上相应的首部(控制部分)便一层层的下发,最终由物理层将二进制数据以电信号的形式发送出去。HTTP报文结构如下👇
图片 HTTP发展历程如下👇 版本 产生时间 内容概括 发展现状 HTTP/0.9 1991年 不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求 非正式标准 HTTP/1.0 1996年 传输内容、格式、首部和数组大小不限制,增加POST、PUT、PATCH、HEAD、 OPTIONS、DELETE方式 正式标准,广泛使用 HTTP/1.1 1997年 持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码 最为广泛 HTTP/2 2015年 多路复用、服务器推送、头信息压缩、二进制协议等。必须搭配TLS,也就是默认使用HTTPS 逐渐兴起 由HTTP的发展历程来看,最开始版本的HTTP(HTTP1.0)在每次建立TCP连接后只能发起一次HTTP请求,请求完毕就释放TCP连接。我们都知道TCP连接的建立需要经过三次握手的过程,而每次发送HTTP请求都需要重新建立TCP连接,毫无疑问是很低效的。所以HTTP1.1改善了这一点,使用长连接的机制,也就是“一次TCP连接,N次HTTP请求”。
HTTP协议的长连接和短连接,实质上是 TCP 协议的长连接和短连接。
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
(HTTP1.0若要开启长连接,需要加上Connection: keep-alive请求头)
随着HTTP越来越广泛的使用,HTTP的安全性问题也逐渐暴露。
回忆一下多年前遍地都是的运营商劫持,当你访问一个本来很正常的网页,但页面上却莫名其妙出现了一些广告标签、跳转脚本、欺骗性的红包按钮,甚至有时候本来要下载一个文件,最后下载下来却变成了另外一个完全不同的东西,这些都是被运营商劫持了HTTP明文数据的现象。
HTTP有以下3点安全性问题:
图片 数据保密性问题
因为HTTP无状态,而且又是明文传输,所有数据内容都在网络中裸奔,包用户括身份信息、支付账号与密码。这些敏感信息极易泄露造成安全隐患。
数据完整性问题
HTTP数据包在到达目的主机前会经过很多转发设备,每一个设备节点都可能会篡改或调包信息,无法验证数据的完整性。
身份校验问题
有可能遭受中间人攻击,我们无法验证通信的另一方就是我们的目标对象。
因此,为了保证数据传输的安全性,必须要对HTTP数据进行加密。