SSL/TLS协议

文章目录

  • SSL/TLS协议
    • SSL/TLS协议简介
    • SSL/TLS协议架构
    • SSL/TLS握手协议流程
    • 主密码和预备主密码
    • TLS记录协议
    • SSL/TLS协议的应用

注意:本文是博主用来做笔记的,大部分都参考了这篇专栏,有的地方加了一点点自己的理解。
SSL/TLS协议_第1张图片
SSL/TLS协议_第2张图片

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的后续版本。

TLS/SSL协议在传输层与应用层之间对网络俩姐进行加密。

SSL/TLS协议架构

SSL/TLS协议_第3张图片
TLS主要分为两层

底层的是TLS记录协议,主要负责使用对称密码对消息进行加密
上层的是TLS握手协议,主要分为握手协议,密码规格变更协议和应用数据协议4个部分。

SSL/TLS握手协议流程

SSL/TLS协议_第4张图片

  1. 客户端向服务器端发送 client hello,包含以下内容:

    (1)可用版本号:用于询问服务器端支持哪个版本
    (2)当前时间:时间戳,用于防重放攻击
    (3)客户端随机数:客户端随机数是一个由客户端生成的随机数,用来生成对称密钥
    (4)会话ID:标记该会话
    (5)可用的密码套件清单:用于询问服务器端支持哪些密码套件
    (6)可用的压缩方式清单:用于询问服务器端支持哪些压缩方式

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

    (1)使用的版本号:回答client hello询问的使用的版本号
    (2)当前时间:时间戳,用于防重放攻击
    (3)服务器随机数:服务器随机数是一个由服务器端生成的随机数,用来生成对称密钥
    (4)会话ID:标记该会话
    (5)使用的密码套件:回答client hello询问的可以使用的密码套件
    (6)使用的压缩方式:回答client hello询问的可以使用的压缩方式

  3. 可选步骤:服务器端发送自己的证书清单certificate,因为证书可能是层级结构的,所以处理服务器自己的证书之外,还需要发送为服务器签名的证书。用于身份认证,防中间人攻击
    客户端将会对服务器端的证书进行验证。如果是以匿名的方式通信则不需要证书。

  4. 可选步骤:ServerKeyExchange,如果第三步的证书信息不足,则可以发送ServerKeyExchange用来构建加密通道。
    ServerKeyExchange的内容可能包含两种形式:

    -如果选择的是RSA协议,那么传递的就是RSA构建公钥密码的参数(E,N)
    -如果选择的是Diff-Hellman密钥交换协议,那么传递的就是密钥交换的参数

  5. 可选步骤:CertificateRequest如果是在一个受限访问的环境,比如fabric中,服务器端也需要向客户端索要证书。
    如果并不需要客户端认证,则不需要此步骤。

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

  7. 可选步骤:Certificate,对步骤5的回应,客户端发送客户端证书给服务器。用于身份认证,防中间人攻击

  8. ClientKeyExchange,还是分两种情况:

    -如果是公钥或者RSA模式情况下,客户端将根据客户端生成的随机数和服务器端生成的随机数,生成预备主密码,通过该公钥进行加密,返送给服务器端。
    -如果使用的是Diff-Hellman密钥交换协议,则客户端会发送自己这一方要生成Diff-Hellman密钥而需要公开的值。这样服务器端可以根据这个公开值计算出预备主密码。

  9. 可选步骤:CertificateVerify客户端向服务器端证明自己是客户端证书的持有者。

  10. ChangeCipherSpec(准备切换密码):密码规格变更协议的消息,表示后面的消息将会以前面协商过的密钥进行加密。

  11. finished(握手协议结束):客户端告诉服务器端握手协议结束了。

  12. ChangeCipherSpec(准备切换密码):服务器端告诉客户端自己要切换密码了。

  13. finished(握手协议结束):服务器端告诉客户端,握手协议结束了。

  14. 切换到应用数据协议:这之后服务器和客户端就是以加密的方式进行沟通了。

简单总结一下流程:
(1)客户端与服务器端进行协商一些重要参数:client hello、server hello。1-2

用于防重放攻击(时间戳)、保证数据机密性(随机数:用来生成对称密钥、加密算法)、完整性(压缩算法)

(2)客户端与服务器端进行身份认证:certificate。3-9
(3)切换密钥,结束握手。ChangeCipherSpec、finished。10-14

密钥交换的方法:
(1)A对服务器B发起请求,B首先把公钥(包含在证书中)发给A(明文传输,证书是公开的)。

(2)A使用随机数算法,生成1个密钥key,并使用公钥进行加密,生成e(key),把e(key)发送到服务器B。

(3)B收到e(key),使用私钥进行解密从而得到key。

交换后,客户端和服务器都得到了密钥key(预主密钥)。
B发送公钥在TLS中是通过证书(certificate)报文发送的,certificate中的包含了公钥。key是通过ClientKeyExchange报文发送的。
注意:在实际TLS中,key并没有直接被当成密钥,上面的描述省去了对key进行KDF等后续操作。

主密码和预备主密码

上面的步骤8生成了预备主密码。

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

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

TLS记录协议

SSL/TLS协议_第5张图片

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

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

SSL/TLS协议的应用

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

你可能感兴趣的:(基础知识,ssl,https,网络)