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