面试题答案
一键面试防止数据在传输过程中被窃取的方式
- 身份验证:
- 服务器身份验证:客户端通过验证服务器的数字证书来确认服务器的真实身份。证书由受信任的证书颁发机构(CA)签发,包含服务器的公钥等信息。客户端内置了CA的根证书,通过验证证书链,能确保连接的服务器是合法的,而非中间人冒充。例如,当用户访问银行网站时,浏览器会验证银行服务器的证书,防止中间人伪装成银行服务器来骗取用户信息。
- 双向身份验证(可选):在一些企业级应用中,不仅服务器要验证客户端,客户端也需要验证服务器。客户端也持有数字证书,服务器同样验证客户端证书的合法性。这在对安全性要求极高的场景,如企业内部的VPN连接中,可防止非法客户端接入企业网络。
- 数据加密:
- 对称加密:TLS协议采用对称加密算法(如AES)对传输的数据进行加密。在握手阶段,客户端和服务器协商出一个共享的对称加密密钥。这个密钥用于对后续传输的所有数据进行加密和解密。由于对称加密算法效率高,能快速对大量数据进行加密,保证数据在传输过程中即使被截获,攻击者没有密钥也无法解密数据。
- 密钥协商:使用非对称加密(如RSA或椭圆曲线密码学ECC)来协商对称加密密钥。客户端生成一个随机数(pre - master secret),用服务器的公钥加密后发送给服务器。服务器用自己的私钥解密得到pre - master secret,双方再根据这个pre - master secret以及握手过程中的其他信息,通过特定算法计算出最终的对称加密密钥。这种方式既能安全地协商出密钥,又利用了对称加密的高效性。
- 完整性保护:
- 消息认证码(MAC):TLS协议使用消息认证码来保证数据的完整性。在发送数据时,发送方会根据数据内容和共享密钥计算出一个MAC值,并将其附加在数据后面。接收方收到数据后,用相同的密钥和算法重新计算MAC值,并与接收到的MAC值进行比较。如果两者一致,则说明数据在传输过程中没有被篡改;如果不一致,则表明数据可能已被篡改,接收方将丢弃该数据。例如,HMAC - SHA256就是TLS中常用的计算MAC值的算法。
关键的加密机制
- 握手协议:
- 客户端Hello:客户端向服务器发送一个Hello消息,其中包含客户端支持的TLS版本、加密套件列表、一个随机数(ClientHello.random)等信息。
- 服务器Hello:服务器回应客户端,选择一个TLS版本、一个加密套件,并发送自己的随机数(ServerHello.random)。同时,服务器会发送自己的数字证书。
- 证书验证和密钥交换:客户端验证服务器证书的合法性。如果是双向认证,服务器也会验证客户端证书。然后,客户端使用服务器证书中的公钥加密pre - master secret并发送给服务器。服务器解密得到pre - master secret。
- 计算会话密钥:客户端和服务器根据ClientHello.random、ServerHello.random和pre - master secret计算出会话密钥(包括对称加密密钥、MAC密钥等)。握手完成后,双方就使用这些密钥进行数据的加密、解密和完整性保护。
- 记录协议:
- 分段:将应用层数据分割成若干记录,每个记录最大长度为2^14 + 2048字节。
- 压缩:(可选)对记录进行压缩,减少数据传输量。
- 加密:使用协商好的对称加密算法对记录进行加密。
- 添加MAC:计算并添加消息认证码,保护数据完整性。最后将处理后的记录发送出去。接收方按照相反的顺序进行解密、验证MAC、解压缩等操作,还原出原始数据。