一、概述
SSL协议是最早Netscape公司开发的安全通信协议,用于浏览器安全通信。到SSL Version3,提交作为IFTF草案,已经广泛的应用Intetnet通信。之后IETF对SSLv3稍作改动并更名为TLS1.0,对应RFC2246,之后的TLS1.1、TLS1.2先后被接受为RFC4346,RFC5246,另外由于TLS是基于TCP协议设计,导致其不能处理独立纪录,不允许SSL时有数据丢失,在RFC4347中提出了一种“Datagram TLS”---DTLS,可以理解为TLS1.1的分支。
SSL/TLS协议的设计目标是保证数据的机密性和完整性。因此在SSL/TLS协议中包含了3类算法:对称加密算法(保证机密性),数据签名算法(保证完整性)和公钥算法(用于交换密钥)。下面以TLS1.0为基准介绍SSL/TLS协议簇加解密流程。
二、加解密流程
SSL/TLS协议的基本数据交互流程如下图:
加解密流程详细介绍如下:
Client Hello :表示客户端向服务器发起SSL握手请求。
客户端:生成一个32byte的random用于计算主密钥、加密密钥和消息的数字签名。在cipher suites中指明自己支持的对称加密、非对称加密和数字签名算法。
Server Hello:表示服务器相应客户端的SSL握手请求。
服务器端:生成一个32byte的random用于计算主密钥、加密密钥和消息的数字签名。生成一个23byte的SessionID。在client cipher suites中挑选一个加密强度最高的算法组合,作为双方的通讯的算法。
如TLS_RSA_WITH_AES_128_CBC_SHA表示通讯协议时TLS、非对称加密算法为RSA、对称加密算法为AES_128_CBC、数字签名算法为SHA。