SSL session resumption原理

很多人熟悉HTTPS,却不知道SSL。HTTPS正是通过SSL和HTTP的组合来提供加密通讯以及对网络服务器身份的鉴别。SSL全称为 Secure Socket Layer,是一种在两台机器之间提供安全通道的协议。它具有保护传输数据以及识别通信机器的功能。客户与服务器之间的数据是经过加密的。SSL 假定其下层的数据包发送机制是可靠的。写入网络的数据将依顺序发送给另一端的程序,不会出现丢包或重传情况。依赖于可靠传输协议发送数据的特点使得SSL 只能在TCP 上工作,不能在UDP 或直接在IP 上运行。SSL 开始就是为Web 设计的,所以SSL可以很好地服务HTTP。SSL在协议栈中的位置如图1所示。

图1 SSL在协议栈中的位置

SSL 的连接分为两个阶段,即握手和数据传输阶段。握手阶段对服务器进行认证并确立用于保护数据传输的加密密钥。必须在传输任何应用数据之前完成握手。一旦握手完成,数据就被分成一系列经过保护的记录进行传输。

SSL 握手主要完成客户端与服务器约定加密算法、确立使用的加密密钥、还可以选择对客户端进行认证。不需要客户端认证的握手过程如图2所示。

图2 SSL握手过程

① SSL 客户端通过Client Hello 消息将它支持的SSL 版本、SessionID、加密套件、压缩算法等信息发送给SSL 服务器。

② SSL 服务器确定本次通信采用的SSL 版本、SessionID和加密套件,并通过Server Hello消息通知给SSL 客户端。

③ SSL 服务器将携带公钥信息的数字证书通过Certificate 消息发送给SSL客户端。

④ SSL 服务器发送Server Hello Done 消息,通知SSL 客户端版本和加密套件协商结束,开始进行密钥交换。

⑤ SSL 客户端验证SSL 服务器的证书合法后,利用证书中的公钥加密SSL 客户端随机生成的Pre_master secret,并通过Client Key Exchange 消息发送给SSL 服务器。

⑥ SSL 客户端发送Change Cipher Spec 消息,通知SSL 服务器后续报文将采用协商好的密钥和加密套件进行加密和MAC 计算。

⑦ SSL 客户端计算已交互的握手消息的MAC 值,并通过Finished 消息发送给SSL 服务器。

⑧ 同样地,SSL 服务器发送Change Cipher Spec 消息,通知SSL 客户端后续报文将采用协商好的密钥和加密套件进行加密和MAC 计算。

⑨ SSL 服务器计算已交互的握手消息的MAC,并通过Finished 消息发送给SSL 客户端。

整个SSL 握手的CPU和网络的开销都非常巨大,为了减少这种性能开销,SSL 提供了一种session resumption机制。如果客户端与服务器已经通信过一次,则它们就可以跳过整个握手阶段而直接进行数据传输。握手中开销最耗时的部分就是确立 Pre_master Secret,它要求使用公用密钥加密。而经过resumption的握手允许新的连接使用上一次握手中确立的Pre_master_secret。这就避免了公用密钥加密所需的计算开销。Session resumption过程如图3所示。

图3 SSL Session Resumption

当客户端与服务器第一次进行交互时,它们创建一个新的连接和一个新的session。如果服务器准备session resumption,就会在ServerHello 消息中给客户端一个SessionID,并将Master secret 缓存起来供以后引用。当这个客户端初始化一条与服务器的新连接时,它就会在其ClientHello 消息中使用SessionID。而服务器通过在其ServerHello 中使用相同的SessionID来同意session resumption。这样,服务器和客户端就会跳过余下的握手部分,而使用保存的Master secret来产生所有的加密密钥。

猜你喜欢

转载自nil-zhang.iteye.com/blog/1279199