开发者社区> 云栖号资讯小哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

一篇文章让你彻底弄懂SSL/TLS协议

简介: 云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! SSL/TLS是一种密码通信框架,他是世界上使用最广泛的密码通信方法。SSL/TLS综合运用了密码学中的对称密码,消息认证码,公钥密码,数字签名,伪随机数生成器等,可以说是密码学中的集大成者。
+关注继续查看

云栖号资讯:【点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


SSL/TLS是一种密码通信框架,他是世界上使用最广泛的密码通信方法。SSL/TLS综合运用了密码学中的对称密码,消息认证码,公钥密码,数字签名,伪随机数生成器等,可以说是密码学中的集大成者。

SSL(Secure Socket Layer)安全套接层,是1994年由Netscape公司设计的一套协议,并与1995年发布了3.0版本。

TLS(Transport Layer Security)传输层安全是IETF在SSL3.0基础上设计的协议,实际上相当于SSL的后续版本。

SSL/TLS的应用

1

SSL/TLS是一个安全通信框架,上面可以承载HTTP协议或者SMTP/POP3协议等。

TLS协议的架构

2

TLS主要分为两层,底层的是TLS记录协议,主要负责使用对称密码对消息进行加密。

上层的是TLS握手协议,主要分为握手协议,密码规格变更协议和应用数据协议4个部分。

  • 握手协议负责在客户端和服务器端商定密码算法和共享密钥,包括证书认证,是4个协议中最最复杂的部分。
  • 密码规格变更协议负责向通信对象传达变更密码方式的信号
  • 警告协议负责在发生错误的时候将错误传达给对方
  • 应用数据协议负责将TLS承载的应用数据传达给通信对象的协议。

握手协议

握手协议是TLS协议中非常重要的协议,通过客户端和服务器端的交互,和共享一些必要信息,从而生成共享密钥和交互证书。

不说话,先上图:

2

接下来我们一步步的介绍每一步的含义:

1.client hello

客户端向服务器端发送一个client hello的消息,包含下面内容:

  • 可用版本号
  • 当前时间
  • 客户端随机数
  • 会话ID
  • 可用的密码套件清单
  • 可用的压缩方式清单

我们之前提到了TLS其实是一套加密框架,其中的有些组件其实是可以替换的,这里可用版本号,可用的密码套件清单,可用的压缩方式清单就是向服务器询问对方支持哪些服务。

客户端随机数是一个由客户端生成的随机数,用来生成对称密钥。

2.server hello

服务器端收到client hello消息后,会向客户端返回一个server hello消息,包含如下内容:

  • 使用的版本号
  • 当前时间
  • 服务器随机数
  • 会话ID
  • 使用的密码套件
  • 使用的压缩方式

使用的版本号,使用的密码套件,使用的压缩方式是对步骤1的回答。

服务器随机数是一个由服务器端生成的随机数,用来生成对称密钥。

3.可选步骤:certificate

服务器端发送自己的证书清单,因为证书可能是层级结构的,所以处理服务器自己的证书之外,还需要发送为服务器签名的证书。
客户端将会对服务器端的证书进行验证。如果是以匿名的方式通信则不需要证书。

4.可选步骤:ServerKeyExchange

如果第三步的证书信息不足,则可以发送ServerKeyExchange用来构建加密通道。

ServerKeyExchange的内容可能包含两种形式:

如果选择的是RSA协议,那么传递的就是RSA构建公钥密码的参数(E,N)。我们回想一下RSA中构建公钥的公式:, 只要知道了E和N,那么就知道了RSA的公钥,这里传递的就是E,N两个数字。

如果选择的是Diff-Hellman密钥交换协议,那么传递的就是密钥交换的参数,具体内容可以参考更加安全的密钥生成方法Diffie-Hellman

5.可选步骤:CertificateRequest

如果是在一个受限访问的环境,比如fabric中,服务器端也需要向客户端索要证书。

如果并不需要客户端认证,则不需要此步骤。

6.server hello done

服务器端发送server hello done的消息告诉客户端自己的消息结束了。

7.可选步骤:Certificate

对步骤5的回应,客户端发送客户端证书给服务器

8.ClientKeyExchange

还是分两种情况:

如果是公钥或者RSA模式情况下,客户端将根据客户端生成的随机数和服务器端生成的随机数,生成预备主密码,通过该公钥进行加密,返送给服务器端。

如果使用的是Diff-Hellman密钥交换协议,则客户端会发送自己这一方要生成Diff-Hellman密钥而需要公开的值。具体内容可以参考更加安全的密钥生成方法Diffie-Hellman,这样服务器端可以根据这个公开值计算出预备主密码。

9.可选步骤:CertificateVerify

客户端向服务器端证明自己是客户端证书的持有者。

10.ChangeCipherSpec(准备切换密码)

ChangeCipherSpec是密码规格变更协议的消息,表示后面的消息将会以前面协商过的密钥进行加密。

11.finished(握手协议结束)

客户端告诉服务器端握手协议结束了。

12.ChangeCipherSpec(准备切换密码)

服务器端告诉客户端自己要切换密码了。

13.finished(握手协议结束)

服务器端告诉客户端,握手协议结束了。

14.切换到应用数据协议

这之后服务器和客户端就是以加密的方式进行沟通了。

主密码和预备主密码

上面的步骤8生成了预备主密码,主密码是根据密码套件中定义的单向散列函数实现的伪随机数生成器+预备主密码+客户端随机数+服务器端随机数生成的。

主密码主要用来生成称密码的密钥,消息认证码的密钥和对称密码的CBC模式所使用的初始化向量。

TLS记录协议

TLS记录协议主要负责消息的压缩,加密及数据的认证:

5

先上图。

消息首先将会被分段,然后压缩,再计算其消息验证码,然后使用对称密码进行加密,加密使用的是CBC模式,CBC模式的初始向量是通过主密码来生成的。

得到密文之后会附加类型,版本和长度等其他信息,最终组成最后的报文数据。

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-04-19
本文作者:flydean
本文来自:“掘金”,了解相关信息可以关注“掘金”

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
CentOS7下vsftpd over SSL/TLS加密传输配置实践
CentOS7下vsftpd over SSL/TLS加密传输配置实践
0 0
【Node.js 】开发中遇到的多进程‘keylog‘ 事件以及TLS/SSL的解决学习方案实战
【Node.js 】开发中遇到的多进程‘keylog‘ 事件以及TLS/SSL的解决学习方案实战
0 0
网络和通信安全中的SSL / TLS国密改造
GB/T39786提供了信息系统密码应用的技术框架,互联网、政务外网、企业专网等网络类型,涉及通信主体的各个要素,都需要遵循要求进行改造升级。
0 0
SSL和TLS协议如何提供身份验证、机密性和完整性
SSL 和 TLS 协议使两方能够相互识别和验证,并以机密性和数据完整性进行通信。
0 0
[ 网络协议篇 ] 一篇文章让你掌握什么是 数字证书 ?什么是SSL ?什么是 TLS ?(下)
[ 网络协议篇 ] 一篇文章让你掌握什么是 数字证书 ?什么是SSL ?什么是 TLS ?(下)
0 0
.NET HttpWebRequest(请求被中止: 未能创建 SSL/TLS 安全通道)和(基础连接已经关闭: 发送时发生错误)问题查找解决
.NET HttpWebRequest(请求被中止: 未能创建 SSL/TLS 安全通道)和(基础连接已经关闭: 发送时发生错误)问题查找解决
0 0
金鱼哥RHCA回忆录:DO447Ansible Tower的维护和常规管理--配置TLS/SSL
第十四章 Ansible Tower的维护和常规管理--配置TLS/SSL
0 0
HTTPS与HTTP的区别?(什么是SSL和TLS?)
HTTPS与HTTP的区别?什么是SSL和TLS?(https://www.o0310o.com/kb/425.html)HTTP:超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是互联网上应用最为广泛的一种网络协议。为了增加安全性,HTTPS 横空出世 网景(曾经很强大的收费浏览器公司,后来被微软用免费的IE搞死)在 1994 年创建了 HTTPS,并应用在网景导航者浏览器中。
0 0
EMQ
车联网通信安全之 SSL/TLS 协议
本篇文章我们将全面介绍 SSL/TLS 协议在车联网通信安全中的应用,并详细讲解 SSL/TLS 的配置方式。
0 0
用WireShark简单看看SSL/TLS协议
用WireShark简单看看SSL/TLS协议
0 0
+关注
云栖号资讯小哥
云栖号小编在此 ^o^
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载