概述SSL(Secure Socket Layer)安全套接字协议是运行在应用层和TCP层之间的安全机制 。保证上层应用数据传输的保密性、完整性以及传输双发身份的合法性 。
- 传输加密性:握手协议定义会话密钥后,所有传输的报文被会话密钥加密 。
- 消息的完整性:传输的报文中增加mac(消息认证码),用于检测完整性 。
- 身份验证:客户端认证(可选),服务端认证(强制)
握手协议是SSL连接通信的第一个子协议也是最复杂的协议 。
![一篇文章讲述清楚SSL握手协议详细流程](http://img.jiangsulong.com/220404/1T44a428-0.jpg)
文章插图
SSL分层结构
SSL握手协议【一篇文章讲述清楚SSL握手协议详细流程】通过握手过程,客户端与服务端之间协商会话参数(包括相互验证、协商加密和MAC算法、生成会话密钥等) 。
![一篇文章讲述清楚SSL握手协议详细流程](http://img.jiangsulong.com/220404/1T4492c6-1.jpg)
文章插图
SSL握手协议过程
第一阶段:建立安全能力
客户端-client_hello:
- 客户端可以支持的SSL最高版本号;
- 客户端生成的32字节的随机数;
- 会话标识符ID;
- 客户端可以支持的密码套件列表;
- 客户端可以支持的压缩方法列表 。
- SSL版本号,取收到的客户端SSL版本和服务端支持的最高版本中的较低者;
- 服务端生成的32字节的随机数;
- 会话标识符ID;
- 从收到的客户端密码套件列表中选择一个密码套件(包含密钥交换算法、对称加密算法、摘要算法);
- 从收到的客户端压缩方法列表中选择一种压缩方法 。
服务端-certificate:
- 含有公钥信息的服务端数字证书或到CA的完整证书链 。
- 可选,根据密钥协商算法而定,如果传送给客户端的服务端证书数据不足以按照第一阶段选定的密钥交换算法协商密钥,该步骤不足密钥协商元素 。
- 可选,请求验证客户端证书信息,单向数据认证(只认证服务端)无此步骤 。
- 通知客户端版本号和加密套件协商结束 。
客户端-certificate:
- 可选,客户端数字证书,双向数据认证中服务端要求验证客户端身份合法性 。
- 客户端交换密钥,视密钥交换算法而定,密钥协商参数或pre-master key(服务端公钥加密) 。
- 可选,客户端将已交互的握手消息、会话密钥的摘要值用客户端私钥加密发送给服务端 。
客户端-change_cipher_spec:
- 改变密码格式信息,告诉服务端之后的报文消息用会话密钥加密 。
- 向服务端宣布握手协议完成 。
- 改变密码格式信息,告诉客户端之后的报文消息用会话密钥加密 。
- 向客户端宣布握手协议完成 。
推荐阅读
- Oracle基本语法总结
- 从一个例子入门Mysql储存过程
- oracle常用数据字典列表
- 一篇文章教你搞定内存泄漏与排查流程——安卓性能优化
- 如何在JAVA中定义常量?
- 秒杀系统架构分析与实战
- Web服务器防护技术你了解多少?
- 十四款常见的Web前端开发框架
- 基于redis分布式锁实现“秒杀”
- 手机端网站的加载速度如何提高?