SSL/TLS算法流程解析

简介: SSL/TLS 早已不是陌生的词汇,然而其原理及细则却不是太容易记住。本文将试图通过一些简单图示呈现其流程原理,希望读者有所收获。   一、相关版本 Version Source Description   Browser Support SSL v2.

 

SSL/TLS 早已不是陌生的词汇,然而其原理及细则却不是太容易记住。本文将试图通过一些简单图示呈现其流程原理,希望读者有所收获。

 

一、相关版本

Version Source Description   Browser Support
SSL v2.0 Vendor Standard

 (from Netscape Corp.) [SSL2]

First SSL protocol for which implementations exist - NS Navigator 1.x/2.x 
- MS IE 3.x 
- Lynx/2.8+OpenSSL
SSL v3.0

Expired Internet Draft

(from Netscape Corp.) [SSL3]

Revisions to prevent specific security attacks, add non-RSA ciphers and support for certificate chains - NS Navigator 2.x/3.x/4.x 
- MS IE 3.x/4.x 
- Lynx/2.8+OpenSSL
TLS v1.0

Proposed Internet Standard

(from IETF) [TLS1]

 Revision of SSL 3.0 to update the MAC layer to HMAC, add block padding for block ciphers, message order standardization and more alert messages. -Lynx/2.8+OpenSSL 

 

SSL全称为 Socket Security Layer,TLS全称为Transport Layer Security,这两者没有本质的区别,都是做的传输层之上的加密(介于传输层及应用层之间)。TLS是后续SSL版本分支的名称,花费长时间去争论两者的优劣没有意义。目前TLS最新版本为 TLS1.2(也称为SSL3.3)

 

二、SSL/TLS 解决的问题

信息被窃听(wiretap),第三方随时随地获得通讯内容;

    SSL/TLS 实现了传输信息的加密。

数据被篡改(tampering),第三方可修改传输中的数据;

    SSL/TLS 实现了数据签名及校验。

身份被冒充(pretending),第三方可冒充通讯者身份传输数据;

    SSL/TLS 采用了CA数字证书认证机制。

 

三、握手阶段

简单点说,SSL/TLS对于传输层的加密是通过动态密钥对数据进行加密实现的,而动态密钥则通过握手流程协商制定;为了保证动态密钥的安全性,其中免不了使用公钥加密算法(非对称)、数字证书签名等技术手段。

一个SSL/TLS 握手过程需要协商的信息包括:

 1 协议的版本号;

 2 加密算法,包括非对称加密算法、动态密钥算法;

 3 数字证书,传输双方通过交换证书及签名校验对彼此进行鉴权;

 4 动态密钥,传输数据过程使用该密钥进行对称加解密,该密钥通过非对称密钥进行加密传输。

 

四、流程解析

一个典型的SSL/TLS 握手流程包括双向认证,如下所示:

 

1. 客户端发出一个 client hello 消息,携带的信息包括:

    所支持的SSL/TLS 版本列表;支持的与加密算法;所支持的数据压缩方法;随机数A;

2. 服务端响应一个 server hello 消息,携带的信息包括:

    协商采用的SSL/TLS 版本号;会话ID;随机数B;服务端数字证书 serverCA;

    由于双向认证需求,服务端需要对客户端进行认证,会同时发送一个 client certificate request,表示请求客户端的证书;

3. 客户端校验服务端的数字证书;校验通过之后发送随机数C,该随机数称为pre-master-key,使用数字证书中的公钥加密后发出;

    由于服务端发起了 client certificate request,客户端使用私钥加密一个随机数 clientRandom随客户端的证书 clientCA一并发出;

4. 服务端校验客户端的证书,并成功将客户端加密的随机数clientRandom 解密;

    根据 随机数A/随机数B/随机数C(pre-master-key) 产生动态密钥 master-key,加密一个finish 消息发至客户端;

5. 客户端根据 同样的随机数和算法 生成master-key,加密一个finish 消息发送至服务端;

6. 服务端和客户端分别解密成功,至此握手完成,之后的数据包均采用master-key进行加密传输。

 

五、要点解析

双向认证和单向认证

双向认证更好的解决了身份冒充问题,服务端提供证书的同时要求对客户端身份进行认证;然而在一些常见的应用场景下往往只有单向认证,如采用https网站只需要求客户端(浏览器)对服务端的证书进行认证。

在单向认证场景下,握手阶段2服务端不会发出 client certificate request,之后服务端也不需要校验客户端证书;

在双向认证场景下,客户端如果无法提供证书,会发出 no digital certificate alert 的警告信息,此时可能导致握手失败(根据服务端策略而定);

 

随机数的使用

由于数字证书是静态的,因此要求使用随机因素来保证协商密钥的随机性;对于RSA 算法来说,pre-master-key本身就是一个随机数,再加上hello消息中的随机,三个随机数通过一个密钥导出器最终导出一个对称密钥。

之所以采用 pre-master-key 机制是因为SSL协议不信任每个主机都能产生完全随机的随机数,如果 pre-master-key 不随机,那么被猜出来的风险就很大,于是仅仅使用 pre-master-secret作为密钥不合适,需要引入新的随机因素,也就是同时结合hello消息中的双向随机数。

 

会话密钥重用

SSL/TLS握手过程比较繁琐,同时非对称加解密性能比对称密钥要差得多;如果每次重建连接时都需要进行一次握手会产生较大开销,因此有必要实现会话的重用以提高性能。

常用的方式包括:

SessionID(RFC 5246),客户端和服务端同时维护一个会话ID和会话数据状态;重建连接时双方根据sessionID找到之前的会话密钥实现重用;

SessionTicket(RFC 5077),由服务端根据会话状态生成一个加密的ticket,并将key也发给客户端保证两端都可以对其进行解密。该机制相较sessionID的方式更加轻量级,服务端不需要存储会话状态数据,可减轻一定压力。

 

证书的校验

1. 检查数字签名;

   数字签名通过数字摘要算法生成并通过私钥加密传输,对端公钥解密;

2. CA链授权检查;

3. 证书过期及激活时间检查;

 

数字摘要的计算图示

 

关于Server Name Indication

在普通 SSL/TLS握手的过程中,客户端发送的信息之中不包括服务器的域名;因此理论上服务器只能包含一个域名,否则会分不清应该向客户端提供哪一个域名的数字证书。在后续TLS的版本中实现了SNI(Server Name Indication) 扩展,用于支持一台服务器主机需服务多个域名的场景。

由客户端请求时发送指定的域名,服务器据此选择相应证书完成握手。

 

六、参考文档

阮一峰_SSL/TLS协议运行机制的概述

An overview of the SSL or TLS handshake

 

img_9b09a36f6de95886f52ce82fa1e89c88.jpe

作者: zale

出处: http://www.cnblogs.com/littleatp/, 如果喜欢我的文章,请关注我的公众号

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文链接  如有问题, 可留言咨询.

目录
相关文章
|
3月前
|
网络协议 应用服务中间件 网络安全
阿里云免费版SSL证书申请及部署按照流程,白嫖阿里云20张SSL证书
阿里云提供免费SSL证书,品牌为DigiCert,单域名证书每账号可申领20张,有效期3个月。通过数字证书控制台申请,支持DNS验证,审核通过后可下载多种格式证书,适用于Nginx、Apache等服务器,轻松实现网站HTTPS加密。
543 9
|
5月前
|
网络协议 应用服务中间件 网络安全
阿里云SSL免费申请流程,共20张免费SSL,跟着教程一步步操作(新手一看就懂)
2025年阿里云免费SSL证书申请流程更新,提供Digicert品牌单域名证书,每个账号可申领20张,有效期3个月。通过数字证书管理控制台操作,支持域名DNS验证及多种服务器证书下载。免费版不支持续费,到期重新申请。
|
9月前
|
机器学习/深度学习 人工智能 算法
算法备案全流程实操
随着《生成式人工智能服务管理暂行办法》在2024年实施,算法备案成为强制性要求。未合规将导致APP下架或高额罚款。本文详解算法备案的核心逻辑与流程,涵盖必备案算法类型、三大监管红线、六大阶段的关键节点,并提供阿里云工具支持,如合规预评估平台和备案助手插件。内容包括金融风控算法的可解释性要求、生成式AI的内容安全措施及个人开发者的技术能力证明方法,助力开发者实现持续合规。
1235 4
|
4月前
|
安全 算法 网络安全
SSL/TLS协议如何确保HTTP通信的安全
通过这些机制和过程,SSL/TLS对HTTP通信提供了强大的保护,确保数据不被未授权的第三方访问或篡改,这对维护数据隐私和网络安全至关重要。随着互联网技术的不断进步,SSL/TLS协议本身也在不断更新和升级,以对抗新出现的威胁和满足现代网络的要求。
300 10
|
4月前
|
存储 域名解析 弹性计算
阿里云上云流程参考:云服务器+域名+备案+域名解析绑定,全流程图文详解
对于初次通过阿里云完成上云的企业和个人用户来说,很多用户不仅是需要选购云服务器,同时还需要注册域名以及完成备案和域名的解析相关流程,从而实现网站的上线。本文将以上云操作流程为核心,结合阿里云的活动政策与用户系统梳理云服务器选购、域名注册、备案申请及域名绑定四大关键环节,以供用户完成线上业务部署做出参考。
|
6月前
|
安全 应用服务中间件 网络安全
在Linux环境部署Flask应用并启用SSL/TLS安全协议
至此,你的Flask应用应该能够通过安全的HTTPS协议提供服务了。记得定期更新SSL证书,Certbot可以帮你自动更新证书。可以设定cronjob以实现这一点。
404 10
|
7月前
|
安全 应用服务中间件 网络安全
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
515 0
Nginx SSL/TLS协议栈中配置深度解析与实践指南-优雅草卓伊凡
|
8月前
|
域名解析 网络协议 网络安全
SSL证书验证全攻略:DNS/HTTP/手动解析怎么选?
SSL证书在网络安全中至关重要,1Panel提供三种验证方式:DNS验证、HTTP验证和手动解析。DNS验证便捷,适合CDN网站;HTTP验证快速,需服务器在线;手动解析灵活,但操作复杂。根据需求选择合适确认方式,定期检查证书状态。
891 2
|
10月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。

热门文章

最新文章

推荐镜像

更多
  • DNS