HTTPS 交互流程

  https 与 http 区别在于 https 比 http多了一个SSL加密层。就是 client端 发送给 server端 的请求报告是经过加密,混淆的。以此来保护我们的数据在网络传输中的安全。

  ok, 我们来看一下 client 发送给 server 是如何交互的,为什么能保证数据在网络中的安全。

  • 时序图:

流程解释:

  • 客户端访问:https://www.z.com
  • https的监听端口是443端口,比如nginx服务器,nginx.conf 会有如下配置(简略配置)
server
 {
   listen       443;# https 监听的是 443端口
   server_name  www.z.com;
 
   ssl on;
   ssl_session_cache   shared:SSL:10m;
   ssl_session_timeout 10m;
 
   ssl_certificate /etc/nginx/ssl_key/z.crt.crt; # 公钥
   ssl_certificate_key /etc/nginx/ssl_key/z.crt.key; # 私钥

}

  nginx 会根据上面配置的ssl_certificate 的路径 /etc/nginx/ssl_key/z.crt.crt 找到www.z.com 域名证书的公钥,将公钥返回给客户端

  • 客户端接收到公钥后,会对公钥内容进行解析,校验
  • 校验通过后,客户端会随机生成一个randomKey(随机秘钥)
  • 客户端再使用z.crt.crt中的公钥,对 randomKey 进行加密,将加密后的内容发送给服务端
  • 服务端接收报文后,使用z.crt.key 中的私钥,对加密的内容的进行解密,然后得到 randomKey 
  • 这时,服务端会将请求域名的响应结果,使用 randomKey  进行加密,返回客户端
  • 客户端对 服务端的加密报文使用randomKey  解密,然后就可以展示在浏览器上

  通过上面的分析可以知道,https对在网络传输中的数据进行加密,防止别人抓包可以明文的看到你的内容。有些朋友说https 不安全,更多的是说那些不怀好意的人在client客户端上动了手脚,并不是说抓包,然后解密报文。

我们知道后面正常的交互都是通过randomKey来进行加解密的。而randomKey 在网络中的传输只有一次,并且这一次还是使用了z.crt.crt中的公钥进行加密,想要解密只能使用z.crt.key中的私钥,而私钥又是在server端服务器上。

要是能直接进入别人服务器 或 控制别人客户端,那也不用费那么大劲儿抓包破解了。

以上内容仅代表个人观点,如有错误请指出,立马改正

原文地址:https://www.cnblogs.com/zhangXingSheng/p/13206796.html