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. 如果黑客修改公钥,也尝试重新生成签名,由于黑客不知道公证机构的私钥,所以黑客无法重新生成佳明的签名,如果黑客拿自己的私钥加密呢??客户端这边拿着公证机构的公钥加密也会失败。
相关推荐
一个很帅的帅哥4 小时前
axios(基于Promise的HTTP客户端) 与 `async` 和 `await` 结合使用
javascript·网络·网络协议·http·async·promise·await
Ja_小浩5 小时前
【计算机网络】理解应用层协议HTTP
计算机网络·http·php
小小工匠7 小时前
加密与安全_HTTPS TLS 1.2 连接(RSA 握手)的整个过程解读
安全·https·tls
温有情8 小时前
UDP_SOCKET编程实现
网络·网络协议·udp
pemper_9 小时前
数据不出境------IP证书申请
网络·网络协议·tcp/ip·http·https·ssl
Jack黄从零学c++9 小时前
自制网络连接工具(支持tcpudp,客户端服务端)
linux·c语言·开发语言·网络协议·tcp/ip·udp·信息与通信
爱喝水的小鼠10 小时前
AJAX(一)HTTP协议(请求响应报文),AJAX发送请求,请求问题处理
前端·http·ajax
德迅云安全杨德俊11 小时前
什么是HTTP DDOS,如何防护
web安全·http·https·ddos
~yY…s<#>14 小时前
【计算机网络】传输层协议UDP
网络协议·计算机网络·udp
椰椰椰耶14 小时前
【HTTP】请求“报头”(Host、Content-Length/Content-Type、User-Agent(简称 UA))
网络·网络协议·http