前端网络知识——HTTP和HTTPS

https和http的区别

都是基于tcp的应用层协议

  • HTTP:超文本传输协议
js 复制代码
明文传输 
默认端口号80 
连接建立相对简单,TCP三次握手
  • HTTPS
swift 复制代码
 加密传输 
 默认端口443 
 加入了SSL/TLS安全协议,建立连接除了TCP三次握手,还要进行SSL/TLS握手
 需要向CA申请数字证书

https解决了http的哪些问题

https是加密传输:http+TLS/SSL

  1. 信息加密
  • 混合加密,解决了窃听风险,采用对称加密和非对称加密的混合方式,先用非对称加密 交换会话密钥,再通过会话密钥对称加密进行通信。

2、校验机制

  • 摘要算法实现完整性,为数据生成独一无二的指纹 用于 校验数据的完整性,解决篡改风险
  • 用摘要算法计算出内容的哈希值(指纹) 是唯一的,并且无法通过哈希值推导出内容

身份证书

  • 将服务器公钥放入到数字证书中,解决了冒充风险,通过CA(数字证书认证机构)来证明公钥的可信

TLS中的加密

采用了对称加密和非对称加密相结合的方式

1、对称加密:

复制代码
加密和解密用同一把钥匙,加密解密效率很快,但是并不安全

2、非对称加密:

复制代码
分为公钥和私钥,公钥加密,私钥解密
非对称加密需要消耗一定时间,减低了数据传输效率

https加密解密过程

  1. 客户端向服务器端发送:

    加密版本(TLS1.2),加密套件(RSA一种算法),客户端随机数

  2. 服务器端向客户端发送:

    确认的加密版本和套件,服务器证书(包含公钥),服务器端随机数

    服务器证书: 被ca密钥加密的服务器公钥

  3. 客户端向服务器端发送:

    客户端从证书中获取公钥,生成第三个随机数pre_master_key

    用公钥加密这个随机数发送给服务器

    此时客户端有三个随机数,使用三个随机数生成一个会话秘钥

    使用会话秘钥加密finished报文给服务器端。

    整个流程相当于,服务器把锁头给客户端,客户端拿锁加密数据给服务器,服务器用钥匙解密信息

    finished报文: 生成密钥后,使用密钥加密后发给服务器端

  4. 服务器使用私钥解密,得到pre_master_key,通过同样算法获得会话秘钥,将finished报文通过会话秘钥传给客户端

  5. 此时客户端和服务器端通过非对称加密获得了会话秘钥,通过对称加密进行通信

为什么最后要发finished报文?

1、完整性验证,防止篡改

报文中包含一个哈希值,是对之前握手信息进行哈希运算得到的,服务器收到这个报文后会使用相同的哈希运算计算,和客户端的对比,如果一样说明没有被篡改

2、向服务器/客户端表明已经做好了使用加密通信的准备

相关推荐
DONSEE广东东信智能读卡器12 小时前
用PowerShell实现Windows 本地 WSS/HTTPS 自签名证书配置方法
windows·网络协议·https·powershell·身份证阅读器
2501_9160074712 小时前
iOS开发中抓取HTTPS请求的完整解决方法与步骤详解
android·网络协议·ios·小程序·https·uni-app·iphone
yqcoder13 小时前
数据的“包装方式”:深入解析 HTTP Content-Type
网络·网络协议·http
风度前端16 小时前
阿里云宝塔面板部署https证书
linux·后端·https
wu@5555516 小时前
使用acme生成免费https泛域名证书(通配符证书)
网络协议·http·https
wljt17 小时前
为什么要使用Spring Cloud,而不是HTTP直接调用接口?
spring·http·spring cloud
lolo大魔王18 小时前
Go 语言 HTTP 协议与 RESTful API 实训全解(理论 + 实战 + 规范)
http·golang·restful
长谷深风11119 小时前
HTTP请求全过程解析【个人八股】
网络·网络协议·http·多线程下载·tcp 连接·请求报文、响应报文·网络请求流程
艾莉丝努力练剑19 小时前
【Linux网络】Linux 网络编程:HTTP(四)从手写服务器到生产级 Nginx 与 cpp-httplib 实战
linux·运维·服务器·网络·c++·nginx·http
艾莉丝努力练剑19 小时前
【Linux网络】Linux 网络编程:HTTP(三)HTTP 协议原理
linux·运维·服务器·网络·c++·http