概述
1. 安全套接字(Secure Socket Layer,SSL)协议客户端与服务器之间安全交换信息的协议
2. 允许重用已经协商过的会话
3. 协议位置:位于传输层和应用层之间
4. 子协议
(1) 握手协议
协商通信过程中使用的加密套件(加密算法、密钥交换算法和MAC算法等)
实现双方的身份验证
在双方之间安全地交换密钥
(2)密码变化协议
通过此协议通知对方,后续报文将使用新协商的加密套件和密钥进行保护和传输。(起通知作用)
(3)警告协议
向通信对端报告告警信息
(4) 记录协议
主要负责对上层的数据(SSL握手协议、SSL密码变化协议、SSL警告协议和应用层协议报文)进行分块、计算并添加MAC值、加密,并把处理后的记录块传输给对端
协议提供的安全机制
1. 数据传输的机密性
利用对称密钥算法(DES,AES等)对传输的数据进行加密
利用非对称密钥算法保证密钥本身的安全
2. 身份验证机制
CA签名过的数字证书,对服务器和客户端进行身份验证,其中客户端的身份验证是可选的
体现在SSL的握手过程
SSL利用PKI提供的机制保证公钥的真实性
3. 消息完整性验证
消息传输过程中使用MAC算法来检验消息的完整性
MAC算法要求通信双方具有相同的密钥,同样利用非对称密钥算法保证密钥本身的安全
握手过程
1. 只验证服务器的SSL握手过程
流程图
具体步骤
(1)SSL客户端通过Client Hello消息将它支持的SSL版本、加密算法、密钥交换算法、MAC算法等信息发送给SSL服务器
(2)SSL服务器确定本次通信采用的SSL版本和加密套件,并通过Server Hello消息通知给SSL客户端。如果SSL服务器允许SSL客户端在以后的通信中重用本次会话,则SSL服务器会为本次会话分配会话ID,并通过Server Hello消息发送给SSL客户端。
(3)SSL服务器将携带自己公钥信息的数字证书通过Certificate消息发送给SSL客户端。
(4) SSL服务器发送Server Hello Done消息,通知SSL客户端版本和加密套件协商结束,开始进行密钥交换。
(5)SSL客户端验证SSL服务器的证书合法后,利用证书中的公钥加密SSL客户端随机生成的premaster secret,并通过Client Key Exchange消息发送给SSL服务器
(6)SSL客户端发送Change Cipher Spec消息,通知SSL服务器后续报文将采用协商好的密钥和加密套件进行加密和MAC计算
(7)SSL客户端计算已交互的握手消息(除Change Cipher Spec消息外所有已交互的消息)的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并添加MAC值、加密等),并通过Finished消息发送给SSL服务器。SSL服务器利用同样的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,如果二者相同,且MAC值验证成功,则服务端证明了密钥和加密套件协商成功
(8) 同样地,SSL服务器发送Change Cipher Spec消息,通知SSL客户端后续报文将采用协商好的密钥和加密套件进行加密和MAC计算
(9) SSL服务器计算已交互的握手消息的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并添加MAC值、加密等),并通过Finished消息发送给SSL客户端。SSL客户端利用同样的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,如果二者相同,且MAC值验证成功,则客户端证明了密钥和加密套件协商成功。
注:Change Cipher Spec消息属于SSL密码变化协议,其他握手过程交互的消息均属于SSL握手协议,统称为SSL握手消息
2. 恢复原有会话的SSL握手过程
流程图
具体步骤
(1)SSL客户端发送Client Hello消息,消息中的会话ID设置为计划重用的会话的ID
(2)SSL服务器如果允许重用该会话,则通过在Server Hello消息中设置相同的会话ID来应答。这样,SSL客户端和SSL服务器就可以利用原有会话的密钥和加密套件,不必重新协商
(...)后面四个步骤和前面一样,起验证作用
TLS协议
Transport Layer Security 安全传输层协议
互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版
消息摘要(Message Digest)
What
将长度不固定的消息(message)作为输入参数,运行特定的Hash函数,生成固定长度的输出,这个输出就是Hash,也称为这个消息的消息摘要(Message Digest)
Why
传统的checksum是弱校验。可以将一些位翻转校验出来,但是却无法校验出一些复杂的数据错误、人为制造的数据篡改
How
计算出消息摘要,附在原始数据的尾部。到达目的地,先将原始数据(message)与消息摘要(message digest)分离,然后运行同样的Hash算法,生成自己的消息摘要,比较两个消息摘要,相同则校验通过。
算法不可逆
常见算法
CRC(循环冗余校验) 算法族
CRC32 ----32位的校验值
MD(Message-Digest Algorithm)算法族
MD2、MD4、MD5 ----128位的校验值
SHA(Secure Hash Algorithm) 算法族
SHA1 ---- 160位
SHA256 ---- 256位
SHA384 ---- 384位
SHA512 ---- 512位
MAC(Message Authentication Code)
是基于密钥和消息摘要所获得的一个值
在发送数据之前,发送方首先使用通信双方协商好的散列函数计算其摘要值。在双方共享的会话密钥作用下,由摘要值进一步生成消息验证码。
HMAC(Hash-based Message Authentication Code)
密钥参与消息摘要的运算,比MAC更安全
上文提到的常规Hash算法,如MD5、SHA,只有一个输入参数:消息
如果输入参数有两个,一个是原始数据,另外一个是密钥(Key),将会生成一个加密的消息摘要HMAC。那第三方即使篡改数据,由于没有密钥,很难生成一个全新的加密摘要而不被终点主机发现并丢弃。
应用场景---数字证书签名
将主机(服务器)的数字证书(明文)作为输入参数,生成Message Digest
然后用CA的私钥加密,这个加密过的Message Digest就变成了CA的数字签名,附在原始数字证书(明文)的末尾,成为一个整体,此整体即为CA签名过的数字证书(数字证书明文+私钥加密过的摘要)。
PKI(Public Key Infrastructure)
公开密钥基础设施,也就是利用公开密钥机制建立起来的基础设施
三要素
数字证书
本质是是一个包含用户的公钥及其身份信息的文件
证书的格式和验证方法普遍遵循X.509 国际标准
由权威机构——CA签发,并由CA保证数字证书的真实性
认证机关CA
本质是一个网络应用程序
在技术上,伪造证明书是非常简单的。认证机关的可信度,直接与证书的可信度挂钩。在很多国家认证机关都是由政府在主导建设,常常被视作一个社会性基础设施的一个环节。
证书库
证书信任链
证书之间的信任关系,是可以嵌套的
根证书
除了根证书C,其它证书都要依靠上一级的证书来证明自己
根证书不需要被证明