面试题答案
一键面试优化SSL握手性能
- 优化服务器配置
- 硬件优化:使用高性能的服务器硬件,如多核CPU、高速内存和高性能网络接口卡(NIC),以提高处理能力。
- 负载均衡:采用负载均衡器将SSL握手请求均匀分配到多个服务器上,避免单个服务器过载。例如,使用F5、Nginx等负载均衡器。
- SSL会话复用
- 会话ID复用:服务器为每个SSL会话分配唯一的会话ID,客户端后续请求可携带该ID,服务器验证后直接复用会话,减少完整握手开销。
- 会话票证(Session Tickets):服务器生成加密的会话票证发送给客户端,客户端后续请求携带票证,服务器解密验证后复用会话,可跨服务器实现会话复用。
- 优化SSL协议版本和密码套件
- 协议版本:优先使用TLS 1.3,相比TLS 1.2等旧版本,TLS 1.3减少了握手消息数量,提升了性能。
- 密码套件:选择性能高的密码套件,例如椭圆曲线密码套件(ECC)比RSA在性能上更具优势,可加快密钥交换和签名验证速度。
- 硬件加速:使用SSL卸载引擎(如专用的SSL加速器卡),将SSL握手计算任务从服务器CPU卸载到硬件设备上,释放服务器资源。
应对中间人攻击
- 证书验证
- 检查证书链:客户端收到服务器证书后,验证证书链的完整性和有效性,确保证书由受信任的证书颁发机构(CA)签发。
- 证书吊销检查:通过证书吊销列表(CRL)或在线证书状态协议(OCSP)检查证书是否已被吊销。
- 公钥固定(PublicKey Pinning):客户端预先配置服务器的公钥哈希值,收到服务器证书时,计算证书中公钥的哈希值并与预配置值比对,防止中间人替换证书。
- 双向认证(Mutual Authentication):不仅服务器向客户端验证身份,客户端也向服务器提供证书进行身份验证,增加中间人攻击难度。
应对重放攻击
- 时间戳:在握手消息中添加时间戳,接收方验证时间戳的有效性,若时间戳超出合理范围,则认为是重放消息并丢弃。
- 随机数(Nonce):在握手过程中,双方交换随机数,每次握手生成的随机数不同,接收方通过记录已接收的随机数,若再次收到相同随机数的消息则判定为重放攻击。
- 序列号:为每个握手消息分配唯一序列号,接收方按顺序接收消息,若收到重复序列号的消息则视为重放攻击。