面试题-HTTPS

面试 第一篇

源自ByteByteGo

HTTPS工作原理:三个关键步骤解

根据图中内容,HTTPS(Hypertext Transfer Protocol Secure)的工作原理可以分为三个关键步骤:

服务器证书检查(Server Certificate Check)

这是建立安全连接的第一步:

  • 客户端(浏览器)向服务器发送”HELLO”消息
  • 服务器回应”HELLO”
  • 服务器发送自己的证书给客户端
  • 客户端向证书颁发机构(CA)发送请求,确认此证书是否有效
  • CA回应”YES”,表示证书合法

这一步确保了用户正在与合法网站通信,而不是某个冒充者。证书颁发机构作为可信第三方,保证了服务器的身份。

密钥交换(Key Exchange)

验证服务器身份后,需要建立加密通信:

  • 客户端从服务器证书中提取服务器的公钥
  • 客户端创建一个会话密钥
  • 客户端告知服务器它支持的密码套件(”I know A,B,C,D cipher suites”)
  • 服务器选择一个密码套件(”OK, Let’s use C”)
  • 客户端使用服务器的公钥和选定的密码套件加密会话密钥
  • 服务器使用自己的私钥解密,获得会话密钥

此时,服务器也拥有了会话密钥,为后续加密通信做好准备。

加密通信隧道(Encrypted Tunnel)

在完成前两步后:

  • 客户端和服务器双方都拥有相同的会话密钥
  • 客户端发送的数据使用会话密钥加密
  • 服务器接收数据后使用相同的会话密钥解密
  • 服务器发送给客户端的数据也使用相同的会话密钥加密
  • 客户端接收后使用会话密钥解密

这形成了一个安全的加密通信隧道,即使数据在传输过程中被拦截,没有会话密钥的第三方也无法解密内容,保证了数据传输的安全性。

PS:从输入URL到页面显示的完整过程

  1. URL解析:浏览器解析URL,确定协议(HTTP/HTTPS)、域名和路径
  2. DNS解析:浏览器查询DNS服务器,将域名转换为IP地址
    • 首先检查浏览器缓存
    • 然后检查操作系统缓存
    • 接着查询本地DNS服务器
    • 必要时进行递归查询
  3. 建立TCP连接:浏览器与服务器建立TCP连接(三次握手)
    • 客户端发送SYN包
    • 服务器回应SYN-ACK包
    • 客户端发送ACK包
  4. TLS握手(HTTPS):如果是HTTPS,还需进行TLS握手
    • 服务器证书检查
    • 密钥交换
    • 建立加密通信隧道
  5. 发送HTTP请求:浏览器向服务器发送HTTP请求,包含请求方法、路径、头部信息等
  6. 服务器处理请求:服务器接收请求,进行相应处理,生成HTTP响应
  7. 接收HTTP响应:浏览器接收服务器返回的数据,包含状态码、响应头、响应体
  8. 解析HTML:浏览器开始解析HTML,构建DOM树
  9. 处理CSS:解析CSS,构建CSSOM树
  10. 执行JavaScript:加载并执行JavaScript代码
  11. 构建渲染树:将DOM树和CSSOM树结合,形成渲染树
  12. 布局:计算每个元素在屏幕上的精确位置和大小
  13. 绘制:将计算好的像素信息绘制到屏幕上
  14. 合成:将多个图层合成为最终显示的页面
  15. TCP连接关闭:数据传输完成后,断开TCP连接(四次挥手)
    • 客户端发送FIN包,表示客户端不再发送数据
    • 服务器发送ACK包,确认收到客户端的FIN
    • 服务器发送FIN包,表示服务器也不再发送数据
    • 客户端发送ACK包,确认收到服务器的FIN