真实面经题目 · 原创解析
HTTPS 握手和加密过程是什么?
HTTPS 的本质是 HTTP 运行在 TLS 安全通道之上。握手阶段通过证书验证服务器身份,通过密钥交换协商会话密钥;数据传输阶段主要使用对称加密保护内容,同时用完整性校验和认证机制防止篡改与伪造。
真实面经题目 · 原创解析
HTTPS 的本质是 HTTP 运行在 TLS 安全通道之上。握手阶段通过证书验证服务器身份,通过密钥交换协商会话密钥;数据传输阶段主要使用对称加密保护内容,同时用完整性校验和认证机制防止篡改与伪造。
可以按建立连接的顺序回答:客户端先发起 TCP 连接,然后发送 ClientHello,带上支持的 TLS 版本、密码套件、随机数和扩展信息;服务端返回 ServerHello,选择协议版本和加密套件,并发送证书链和密钥交换相关参数;客户端验证证书是否可信、域名是否匹配、证书是否过期或被吊销;双方通过 ECDHE 等密钥交换算法计算共享秘密,再结合客户端随机数和服务端随机数派生出对称会话密钥;最后双方发送 Finished 消息确认握手未被篡改。后续 HTTP 报文使用会话密钥加密传输,既保证机密性,也保证完整性和身份认证。
HTTPS 不是新的应用层协议,而是在 HTTP 和 TCP 之间加入 TLS。HTTP 仍然负责请求方法、路径、头部和响应体,TLS 负责身份认证、密钥协商、加密传输和完整性保护。面试回答要把网络层次说清楚,否则容易把证书、非对称加密和 HTTP 报文混在一起。
TLS 握手要解决三个问题:客户端如何确认服务端确实是目标站点,双方如何在不泄露密钥的情况下协商出会话密钥,握手过程如何防止中间人篡改。证书解决身份问题,密钥交换解决共享秘密问题,Finished 校验解决握手完整性问题。
服务端会发送证书链,客户端根据本地信任根证书逐级验证签名,同时检查证书有效期、域名匹配、用途限制和吊销状态。证书本身通常不是用来加密所有业务数据,而是用来证明公钥属于该服务端。若证书不可信,中间人就可能伪造站点,因此浏览器会阻断或强提示。
现代 TLS 常用临时椭圆曲线 Diffie-Hellman 完成密钥交换。客户端和服务端各自生成临时私钥和公开参数,双方通过数学计算得到相同共享秘密,但旁路监听者无法直接算出。随后双方把共享秘密和握手随机数输入密钥派生函数,生成用于加密、认证和记录保护的会话密钥。
握手完成后,HTTP 数据主要使用对称加密算法传输,因为对称加密速度快,适合大量数据。TLS 记录层会把数据分片、加密并附带认证信息,接收方可以验证数据是否被篡改。TLS 还支持会话恢复,减少重复握手开销,但恢复机制仍要保证密钥隔离和安全属性。
非对称加密计算成本高,不适合大量业务数据。TLS 用非对称机制解决身份认证和密钥协商,之后用高效的对称加密传输 HTTP 内容。
意味着客户端能通过信任链验证该证书由可信机构签发,并且证书绑定的域名、有效期和用途满足当前连接要求。它证明公钥属于目标站点,而不是证明业务内容一定可信。
攻击者可能拦截连接并试图替换证书或篡改密钥交换参数。如果客户端正确验证证书链和握手完整性,攻击者无法伪装成服务端并建立被信任的安全通道。
客户端随机数和服务端随机数参与密钥派生,保证不同连接生成不同会话密钥,也防止重放旧握手材料得到相同密钥。