简介:
安全套接层(Secure Socket Layer,SSL)是一种在两台机器之间提供安全通道的协议。
它具有保护传输数据以及识别通信机器的功能。安全通道是透明的,意思就是说它对传输的
数据不加变更。客户与服务器之间的数据是经过加密的,一端写入的数据完全是另一端读取
的内容。透明性使得几乎所有基于 TCP 的协议稍加改动就可以在 SSL 上运行,非常方便。
参考文献<SSL与TLS>
握手:
SSL 握手有三个目的。第一,客户端与服务器需要就一组用于保护数据的算法达成一致。
第二,它们需要确立一组由那些算法所使用的加密密钥。第三,握手还可以选择对客户端进
行认证。
握手过程:
a.客户端发出请求(ClientHello)
(1) 支持的协议版本,比如TLS 1.0版。
(2) 一个客户端生成的随机数,稍后用于生成"对话密钥"。
(3) 支持的加密方法,比如RSA公钥加密。
(4) 支持的压缩方法。
b.服务器回应(SeverHello)
(1) 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
(2) 一个服务器生成的随机数,稍后用于生成"对话密钥"。
(3) 确认使用的加密方法,比如RSA公钥加密。
(4) 服务器证书。
c.客户端回应
(3)客户端对服务器的证书进行验证,并抽取服务器的公用密钥。然后,再产生一个称
做 pre_master_secret 的随机密码串,并使用服务器的公用密钥对其进行加密。最后,客户端
将加密后的信息发送给服务器。
注意,第 3 步是握手过程中的关键一步。所有要被保护的数据都依赖于 pre_master_secret
的安全。原理非常简单:客户端使用服务器的公用密钥(从证书中抽取的)来加密共享密钥,
而服务器使用其私用密钥对共享密钥进行解密。握手的剩余步骤主要用于确保这种交换过程
的安全进行。客户端与服务器分别使用相同的密钥导出函数(key derivation
function,KDF)来产生 master_secret,最后再次通过 KDF 使用 master_secret
来产生加密密钥。