HTTP和HTTPS是一个很广泛的知识点,本篇只作简要理解与记录,主要针对HTTP通信存在什么问题,HTTPS如何改进HTTP存在的那些问题,HTTPS工作原理是什么。
HTTP和HTTPS是什么
HTTP:是一种超文本传输协议,广泛用于接口通讯,web网站等
HTTPS:HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。
为什么需要HTTPS
简单来说就是HTTPS是HTTP的“升级版”,解决了HTTP明文传输带来的安全问题,其主要解决以下问题:
- HTTP使用明文(不加密),内容可能会被窃听
- 无法证明报文的完整性,请求和响应期间可能会遭受篡改
- 不验证通信方的身份,可能会遭遇伪装
反观HTTPS协议,它比HTTP多了如下优势:
- 数据隐私性(安全性):内容经过对称加密,每个连接生成一个唯一的加密密钥
- 数据完整性:内容传输经过完整性校验
- 身份认证:第三方无法伪装服务端(客户端)身份
HTTPS是如何解决上述HTTP问题的
本质上来说,HTTPS并非是一种全新的传输协议,只是在HTTP通信接口部分用SSL和TSL协议代替而已。通常HTTP底层是直接和TCP通信的,而HTTPS底层则先和SSL/TSL通信,再由SSL/TSL和TCP通信。简而言之,HTTPS就是身披SSL协议这层外壳的HTTP。
解决内容可能被窃听的问题----加密
HTTPS使用对称加密+非对称加密
发送密文的乙方使用对方的公钥进行加密处理“对称的密钥”,然后对方用自己的私钥解密拿到“对称的密钥”,这样可以确保交换的密钥是安全的前提下,使用对称机密方式进行通信。
解决报文可能被篡改的问题----数字签名
网络传输过程中需要经过很多中间节点,虽然数据无法被解密,但可能被篡改,那如何校验数据的完整性呢?----校验数字签名。
数字签名有两种功效:
- 能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。
- 数字签名能确定消息的完整性,证明数据是否未被篡改过。
解决通信方身份可能被伪装的问题----数字证书
数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上
- 网站主办方需要向第三方机构申请CA证书
- 第三方机构通过多种手段验证主办方信息真实性
- 客户端发起请求时,服务端返回证书文件
- 客户端读取证书中的明文信息,通过散列计算得到的信息照耀,如果一致,则可以确认证书的合法性
- 客户端同时还会验证证书相关的域名信息,有效时间信息等等
HTTPS工作流程
描述:
- Client(客户端)发起一个HTTPS请求,根据RFC2818的规定,Client知道需要连接Server的443(默认)端口。
- Server把事先配置好的公钥证书(public key certificate)返回给客户端
- Client验证公钥证书
- Client使用伪随机数生成器生成加密所使用的对称密钥,然后用证书的公钥加密这个对称密钥,发给Server
- Server使用自己的私钥(private key)解密这个消息,得到对称密钥。至此,Client和Server双方都持有了相同的对称密钥
- Server使用对称密钥加密“明文内容A”,发送给Client
- Client使用对称密钥解密响应的密文,得到“明文内容A”
- Client再次发起HTTPS的请求,使用对称密钥加密请求的“明文内容B”,然后Server使用对称密钥解密密文,得到“明文内容B”
HTTP与HTTPS的区别
- HTTP 是明文传输协议,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。
- HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引HTTPS网页
- HTTPS需要用到SSL证书,而HTTP不用
- HTTPS标准端口443,HTTP标准端口80
- HTTPS基于传输层,HTTP基于应用层
- HTTPS在浏览器显示绿色安全锁,HTTP没有显示