HTTPS 的加密流程

HTTPS是在HTTP的基础上,引入加密层(SSL),HTTP是明文传输(不安全的)。之前就出现了,运营商劫持等等问题,因此就引入了HTTPS,解决安全问题,最核心的要点,就是"加密",主要分为了俩点:1. 对称加密 2. 非对称加密

1. 引入对称加密

简单来说对称加密就是加密和解密,使用的是同一个密钥。这里引入的加密是对传输数据进行保护,主要就是针对header和body 进行加密。主要通过对称加密的方式,针对传输数据进行加密操作。

  1. 对称加密的时候,客户端和服务器需要使用同一个密钥。

  2. 不同的客户端,需要使用不同的密钥。(如果这里所有的客户端密钥都相同,加密形式虚设,黑客就很容易拿到密钥)。

总结: 这就意味着,每个客户端连接到服务器的时候,都需要自己生成一个随机的密钥,并且这个密钥告知服务器。(也不一定非得客户端生成,服务器生成也行,也是需要告诉客户端的)。

这就是问题的关键!!密钥需要传输给对方的,一旦黑客拿到了这个密钥,意味着加密操作就无意义了。需要考虑,针对咋们的密钥,也进行密文传输。假设使用对称加密,引入key2 针对key进行key进行加密,意味着就需要把key2也传输给服务器,服务器才能解密到可以,但是在传输过程中还是肯被黑客拿到的。

2. 引入非对称加密

简单来说,非对称加密,使用的是俩个密钥。这俩个密钥,k1,k2是成对的。俩个密钥,就可以一个公开出去,称为"公钥",另一个自己保存好,称为"私钥"。

引入它主要就是针对 对称密钥的传输,进行加密。 (由于非对称加密系统开销,远远大于对称加密。针对大规模的数据加密,不太合适使用非对称加密。)

服务器生成一对非对称密钥,私钥服务器自己持有,公钥可以告任何的客户端。

1.客户端在连上服务器之后,就需要先从服务器这边拿到公钥,(公钥本身就可以公开出去,不需要加密传输)客户端生成对称密钥,拿着公钥针对对称密钥加密。2.此时就可以把加密之后的密文进行传输了,由于想要解密,必须通过私钥,而且私钥只有服务器自己知道,此时这样的加密数据就可以比较安全的到达服务器。3.服务器通过私钥解密之后得到了对称密钥,接下来和客户端之间的通信就通过对称加密来完成了。

SSL内部完成的工作是上图的连线,使用HTTPS的时候,层底也是TCP,先进行 TCP三次我输,TCP连通之后,就要进行SSL的握手了(交换密钥的过程)后面才是真正传输业务数据。

而且这个办法不是百分之一百安全的,就例如: 服务器可以创建出一对公钥和私钥,黑客也可以按照同样的方式,创建出一对公钥和私钥,冒充自己是服务器。如图:

那针对上述问题,如何解决???

最关键的一点,客户端拿到公钥的时候,要有办法验证,这个公钥是否 是真的,而不是黑客伪造的。要求服务器这边提供一个"证明",证书是一个结构化的数据(里面包含很多属性,最终以字符串的形式提供)证书中汇报一系列的信息,比如:服务器的主域名,公钥,证书有效期....证书是搭建服务器的人,要从第三方的公正机构进行申请的。(申请的时候当然要提交材料,人家要审核)。

客户端拿到证书之后,主要的俩件事:

  1. 按照同样的校验和算法,把证书的其他字段都重新算一遍,得到校验和1

  2. 使用系统中内置的公正机构公钥,对证书中的签名进行解密,得到校验和2

此时,就可以比对,看着俩校验和是否一致!如果一致,说明证书是没有被修改过的,就是原版证书。如果不一致说明证书被别人篡改过了。(比如黑客如果替换了自己的公钥,此时算出来的校验和一定发生改变),此时客户端就能识别出来了(此时浏览器这边会弹出一个告警页面,告诉用户你访问的网站有风险)。

黑客无法修改证书的内容,因为:

1.如果黑客直接修改公钥,不修改签名,此时客户端验证的校验和是一定不一样的,就识别出来了。

  1. 如果黑客修改公钥,也尝试重新生成签名,由于黑客不知道公证机构的私钥,所以黑客无法重新生成佳明的签名,如果黑客拿自己的私钥加密呢??客户端这边拿着公证机构的公钥加密也会失败。
相关推荐
妮妮喔妮1 小时前
HTTP中常见的Content-Type
网络·网络协议·http
危险、1 小时前
RabbitMQ 通过HTTP API删除队列命令
分布式·http·rabbitmq
超人不会飛2 小时前
就着HTTP聊聊SSE的前世今生
前端·javascript·http
数通Dinner2 小时前
异步Websocket构建聊天室
运维·网络·websocket·网络协议·信息与通信
hashiqimiya3 小时前
配置tcp的https协议证书
网络·tcp/ip·https
闲坐含香咀翠3 小时前
记一次交互优化:从根源上解决Axios请求竞态问题
前端·http·浏览器
向宇it3 小时前
【unity游戏开发——网络】网络游戏通信方案——强联网游戏(Socket长连接)、 弱联网游戏(HTTP短连接)
网络·http·游戏·unity·c#·编辑器·游戏引擎
WooaiJava3 小时前
多个参数用websocket 向io 服务器发送变量,一次发一个,并接收响应
网络·websocket·网络协议
轻语呢喃3 小时前
Cookie详解:从原理到实战,彻底搞懂用户身份识别机制
javascript·http·html
DemonAvenger3 小时前
Go网络编程基础:网络模型与协议栈概述
网络协议·架构·go