大宝自习室

道路就在脚下

SSL与TLS协议

| 评论

SSL/TLS

历史背景

(1)SSL
 SSL全称是Secure Socket Layer,安全套接层。是网景公司(NetScape)所研发,用来保障互联网数据传输安全及数据完整性的的网络安全协议。SSL经历3个版本,现在最新的版本为SSL 3.0。

1994年,网景公司制定了SSL 1.0版本,但并未对外发布。同年制定了更新的版本V 2.0并对外发布。1995年,网景公司发布了SSL V3.0版本。
(2)TLS
 TLS全称Transport Layer Security,传输层安全。TLS是IETF将SSL作了标准化,发布的标准文档即RFC2246。从技术层面上讲,TLS1.0与SSL V3.0的差别非常微小。在2006年,IETF发布了rfc4492,文档中制定了ECC在TLS中使用的标准,并且在其他标准文档中规定了额外的使用细则(rfc7027文档),如所使用的椭圆曲线参数及参数的长度等。
 现在最新的TLS版本是2008年发布的TLS 1.2版。在2009年9月21日布宜诺斯艾利斯举行的Ekoparty安全会议上,安全研究人员Thai Duong和Juliano Rizzo将演示针对SSL/TLS的概念验证攻击。该协议漏洞主要影响TLS协议1.0版及SSL所有版本,TLS 1.1及1.2版本不受影响。黑客能够利用该协议漏洞悄悄破译Web服务器和终端用户浏览器之间传输的加密数据。

SSL和TLS协议

 最初人们在设计SSL协议的时候,主要是针对WEB安全设计的,包括WEB、电子邮件及新闻组等。设计的初衷就需要SSL能够与WEB所主要使用的Http协议能够很好的协同工作。现阶段SSL/TLS使用最广泛的莫过于Https。只要登录各大银行网站、电子商务网站、网上支付网站,在浏览器的地址栏都可以看到普通的Http变成了Https。
工商银行网上银行登录界面
 还有些地方SSL/TLS使用的比较隐蔽,可能无法通过上面的地址栏查看到,例如某地一卡通网络充值平台项目。都是通过SSL/TLS协议来保证在不安全的网络信道上传输敏感数据,从而保证这些数据没被窃取和篡改。
2.1 SSL/TLS协议简单介绍
 SSL/TLS协议运行在TCP协议之上,在应用层数据写到下层数据包之前,SSL/TLS协议会将敏感数据进行加密处理,对外提供安全透明的安全服务。
SSL/TLS在协议栈中的位置
 一般情况,SSL/TLS需要在TCP协议上运行,而不能直接在UDP和IP协议上运行。它并且假定数据在传输过程中是可靠的,不会出现丢包和重复发送等情况。

2.2 协议流程
 SSL/TLS协议连接分为两个阶段:握手阶段和数据传输阶段。
握手阶段:对服务器进行认证并协商确立用于保护数据传输加密的秘钥,在数据传输阶段之前完成。
数据传输阶段:客户端与服务器端之间交互的数据,都是通过握手阶段协商的加密秘钥来进行加密之后,然后打包成数据包在网络上传递给对方。握手流程

握手流程
1.Client Hello
 客户端要同服务器端连接,首先要发送一条Client Hello的消息给服务器端,其中包括的内容如下:

1. 协议版本号
2. 32bit时间戳
3. 客户端产生的随机数
4. 回话标识
5. 密码算法套件
6. 支持的压缩算法

详细解释如下:

  1. 对协议版本号,提供客户端能够支持的最新的版本号,并且是向下兼容;
  2. 32bit时间戳是从1970.01.01(00:00:00 GMT)开始计时的总秒数;
  3. 产生随机数是客户端自己产生的随机数,用来协商数据传输阶段的回话秘钥;
  4. 回话标识,若用户想要开启一个新的回话时,该字段为空;若客户端要恢复某个曾经的回话,这个时候需要传递待恢复回话的SessionID;
  5. 密码算法套件是客户端所支持的所有算法标识。一般按照客户端最想执行的算法的顺序来排列。密码算法套件为密码交换定义了密码算法,包含分组加密算法的秘钥长度及消息验证码;
  6. 压缩算法,是用户传输数据时客户端所支持的压缩算法,一般情况为空。

2.服务器Hello过程
1. Server Hello  Server Hello是服务器端接收到客户端Client Hello后的响应。响应的内容包括对Client Hello中对应内容的回应,具体内容如下:

1. 选择使用的协议版本号
2. 32bit时间戳
3. 服务器产生的随机数
4. 回话标识
5. 服务器选择的密码算法套件
6. 服务器选择的压缩算法

 详细解释如下:

  1. 服务器选择所使用的SSL/TLS协议版本号,是服务器支持最高的版本号和Client Hello中版本号之间低的那个;
  2. 同Client Hello中时间戳类似;
  3. 服务器产生的随机数;
  4. 回话标识,若Client Hello中提供的会话标识能够被识别利用,则短握手协议将运行,这时的回话标识就是Client Hello中传送来的回话标识;否则服务器端将生成一个新的回话标识,并且使用新的SessionID填充;
  5. 服务器选择的密码套件,为每一个必要的密码操作都选择了单一的密码算法,并将结果告知给客户端;
  6. 服务器选择的压缩算法;

2. Server Cerificate
 服务器证书,当握手过程需要认证服务器时,服务器需要将自己的证书传递给客户端,通常证书的格式是X.509 V3证书。客户端通过验证证书的合法性来判定服务器的身份。
3. erver KeyExchange
 这个消息是对上面消息的补充。当Server Cerificate中没有包含足够多的预设主密钥信息,服务器端再发送这个消息给客户端;
4. Certificate Request
 在发送上述消息后,如服务器需要对客户端的身份进行认证,对客户进行访问控制。服务器一般会发送这个消息给客户端,该消息中一般会包括服务器接收的证书类型和服务器信任的证书签发机构等信息;
5. Server Hello Done
 该消息主要作用是提示客户端服务器端的Hello过程结束,客户端需要立马对服务器端发送过来的消息进行验证运算,进而准备下一流程。

3.秘钥交换
1. Client Certificate
 若客户端接收到Certificate Request消息,客户端在这个过程首先会发送自己的数字证书给服务器端,近以验证客户端自己的身份;
2. Client KeyExchange
 客户端会将pre-masterKey经加密处理后发送给服务器端;
3. Certificate Verify
 若客户端发送了一个证书给服务器端,一般来说,客户端也将发送一个Certificate Verify消息给服务器端;
4. Change Cipher Spec
 通知服务器端后来的通讯启用刚刚协商的安全参数,即上述握手过程中的密钥交换、认证及压缩算法等。 最后,客户端将发送一个Finished给服务器端,通知这个过程结束,进行下一流程。

4.握手结束
1. Change Cipher Spec
 服务器通知服务器启用新的安全参数,并且告知对方服务器成功执行了秘钥生成过程;
2. Finished
 是第一条使用新的加密参数进行加密的消息,它使得能够确认没有任何消息被攻击者篡改过。
异常
 若发生任何异常或者警告错误,服务器端将会发送警告信息。由2个字节组成,一个字节说明是警告警报还是致命错误警报,另一个字节说明错误细节。

SSL和TLS安全保障

 从第2部分中的描述,只能知道SSL/TLS协议的大概过程。但是它能过提供的安全保障还是可以简单分析一下的。
1.身份认证
 在握手阶段,一般情况服务器需要将自己的数字证书发送给客户端。同时,服务器端要验证客户端身份的时候也会向客户端发送一个证书请求。以此过程,协议双方都获取了对方的数字证书,并且双方都可以验证该证书的合法性。因此,双方都可以对彼此的身份进行认证,只有在满足身份认证通过之后才能进行下面的流程。

2.通讯保密
 握手阶段,两方参与者都产生自己的随机数,并且将随机数传送给对方。双方在每一次正式会话前,将双方最新产生的两个随机数及其他参数作为输入,按照一定的密码算法产生双方的回话密钥。在后续双方回话过程中,交流的所有信息都是经过加密和MAC处理的数据。在外部传输的信息都是以密文的形式进行传输,攻击者难以攻击获取每次回话密钥而获取传输的信息。并且在消息中附带消息验证码,攻击者篡改消息后,消息的接收方能立即发现消息被篡改。

3.安全要求
 通讯双方每次回话都会产生新的回话密钥,从时间纵向来看,即使攻击者获取某次的回话密钥,攻击者也仅仅只能解密出这次通讯的消息内容。但是以前和以后的加密消息,攻击者一样无法解密出来,保证了通讯过程的前向保密性。

评论