tls协议

前言

tls是ssl协议的标准化,处于应用层(5层架构)和会话层(OSI),有着rsa方式和ecdhe两种,


一、TLS 协议的组成

请添加图片描述
握手协议:负责在客户端和服务器之间协商决定密码算法和共享密钥,包括基于证书的认证操作;
密码规格变更协议:负责向通信对象传达变更密码方式的信号,在TLS 1.3版本中不再需要该协议;
警告协议:负责在发生错误时将错误传达给对方;
记录协议:将TLS 上面承载的应用数据传达给通信对象的协议。

二、ECDHE

DH有着static DH 算法和DHE 算法。static DH 算法里服务端的密匙一般是固定不变的,有可能被用时间暴力破解出来,所以不具有前向安全性。而DHE采用ephemera临时生成私钥,保证了前向安全。ECDHE就是基于DHE算法,利用椭圆性质,更少的计算量

1.连接过程

在这里插入图片描述
第一次握手

  1. 客户端发送Client Hello

第二次握手

  1. 服务端发送 Server Hello
  2. 服务端发送Certificate,并选择ECDHE算法发送特有的第3点
  3. 服务端发送Server Key Exchange,这里面包含椭圆曲线,这代表了椭圆的曲线基点G,给客户端;以及随机数作为椭圆曲线的私匙,不公布;根据基点 G 和私钥计算出服务端的椭圆曲线公钥,这个会公布给客户端。
  4. 服务端发送Server Hello Done 代表结束

密码套件 如「 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384」代表含义

密钥协商算法使用 ECDHE;
签名算法使用 RSA;
握手后的通信使用 AES 对称算法,密钥长度 256 位,分组模式是 GCM;
摘要算法使用 SHA384;

第三次握手

  1. 客户端检验证书
  2. 客户端生成一个随机数作为椭圆的私钥,然后再根据服务端前面给的信息,生成客户端的椭圆曲线公钥,然后用「Client Key Exchange」消息发给服务端。
  3. 客户端利用Client Random + Server Random + Pre-Master(ECDHE计算出来) 计算出 Master-Secret,然受发送Change Cipher Spec,改用算法
  4. 客户端发送Encrypted Handshake Message,对前面的信息做个摘要,验证对称钥匙是否可用

ECDHE计算过程与模幂运算类似,采用素数域下的椭圆曲线的标量乘法来实现。
(1):Client,计算Pclient = Client Random* G(基点)。将PClient发送至服务器。
(2): Server,计算PServer= Server Random * G(基点)。将PServer发送至客户端。
(3):客户端计算SClient = Client Random* PServer;服务器计算SServer = Server Random *Pclient
(4):算法保证了SClient = SServer = S,提取其中的S的Pre-Master

第四次握手

  1. 服务端发送Change Cipher Spec
  2. 服务端发送Encrypted Handshake Message

客户端可以在第三次握手后抢跑发送数据

三、TLS1.3

取消了RSA,采用DHE,不需要客户端先拿到服务器的公钥证书,不使用服务器公钥来加密要发送的预备共享密钥,只需要1-RTT甚至0-RTT,会话恢复也达到了0-RTT。 一个有趣的网站图解tls1.3

1.过程

   Client                                                           Server
Key  ^ ClientHello
Exch | + key_share*
     | + signature_algorithms*
     | + psk_key_exchange_modes*
     v + pre_shared_key*         -------->
                                                               ServerHello  ^ Key
                                                              + key_share*  | Exch
                                                         + pre_shared_key*  v
                                                     {EncryptedExtensions}  ^  Server
                                                     {CertificateRequest*}  v  Params
                                                            {Certificate*}  ^
                                                      {CertificateVerify*}  | Auth
                                                                {Finished}  v
                                            <--------  [Application Data*]
         ^ {Certificate*}
    Auth | {CertificateVerify*}
         v {Finished}               -------->
           [Application Data]       <------->          [Application Data]
//  + 代表extention项       
//  * 代表可选
// {} 用hashshake_key加密
// [] 用application_key加密

在这里插入图片描述
Client 提前将所有这些椭圆参数计算成公钥发给server

借鉴tls1.2
tls1.3

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于使用 OpenSSL 解密 TLS 协议的过程,首先需要了解 TLS 的基本工作原理。TLS(Transport Layer Security)是一种安全协议,用于在计算机网络上提供加密和身份验证服务。它被广泛应用于保护 Web 浏览器与服务器之间的通信。 要解密 TLS 通信流量,可以使用 OpenSSL 提供的命令行工具或编程接口。下面是使用 OpenSSL 解密 TLS 的一般步骤: 1. 获取 TLS 通信数据:首先,你需要获取经过 TLS 加密的通信数据。这可以是从网络抓包获取到的数据或者来自其他来源的数据。 2. 准备私钥和证书:为了解密 TLS 数据,你需要拥有与该通信连接相关的私钥和证书。对于服务器端的通信,私钥通常存储在服务器上,而证书则用于身份验证。对于客户端的通信,你可能需要使用自己的私钥和证书。 3. 使用 OpenSSL 解密数据:使用 OpenSSL 的命令行工具来解密 TLS 数据。以下是一个示例命令: ``` openssl s_client -connect <server_host>:<server_port> -cert <client_cert> -key <client_key> ``` 其中 `<server_host>` 和 `<server_port>` 是要连接的服务器地址和端口,`<client_cert>` 和 `<client_key>` 是客户端的证书和私钥文件路径。 4. 输入 TLS 数据:一旦连接建立成功,你可以将 TLS 数据输入到控制台或通过重定向来解密数据。你可以发送之前获取到的抓包数据或其他 TLS 数据,然后 OpenSSL 会解密并显示在控制台上。 请注意,解密 TLS 数据需要正确的私钥和证书,并且要了解所使用的加密算法和协议版本。此外,解密他人的 TLS 通信数据可能涉及法律和隐私问题,请确保你有合法的权限和目的。 这只是一个简单的示例,具体的步骤和命令可能因情况而异。建议查阅 OpenSSL 的官方文档以获取更详细的信息和指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值