首页 > 其他分享 >SSL/TLS 握手过程中的一些细节 -- RSA 和 数字证书

SSL/TLS 握手过程中的一些细节 -- RSA 和 数字证书

时间:2022-09-01 21:38:08浏览次数:60  
标签:TLS 公钥 加密 -- RSA 算法 密钥 服务端

 密钥交换算法 RSA 握手过程

在 RSA 密钥协商算法中,客户端会生成随机密钥,并使用服务端的公钥加密后再传给服务端。

根据非对称加密算法,服务端公钥加密的消息仅能通过服务端私钥解密。 这样服务端解密后,双⽅就得到了相同的密钥,再⽤它加密应⽤消息。

TLS 第一次握手

Client Hello

TLS 第二次握手

一、Server Hello

密码套件格式:【密钥交换算法 + 签名算法 + 对称加密算法 + 摘要算法】

⼀般 WITH 单词前⾯有两个单词,第⼀个单词是约定密钥交换的算法, 第⼆个单词是约定证书的验证算法。

⽐如刚才的密码套件的意思就是:

由于 WITH 单词只有⼀个 RSA,则说明握⼿时密钥交换算法和签名算法都是使⽤ RSA;

握⼿后的通信使⽤ AES 对称算法,密钥⻓度 128 位,分组模式是 GCM;

摘要算法 SHA384 ⽤于消息认证和产⽣随机数;

二、Server Certificate

三、Server Hello Done

客户端验证证书

数字证书作用:

认证公钥持有者的身份,以防止第三方进行冒充。

数字证书内容:

  1. 公钥;
  2. 持有者信息;
  3. 证书认证机构(CA)的信息;
  4. CA 对这份文件的数字签名及使用的算法;
  5. 证书有效期;
  6. 其他的额外信息;

CA 签发证书的过程:

  1. CA把持有者的公钥、⽤途、颁发者、有效时间等信息打成⼀个包 ,对这些信息进行 Hash 计算得到一个 Hash 值;
  2. CA 使用自己的私钥将该 Hash 值加密,生成 Certificate Signature (证书签名);
  3. 将 Certificate Signature 添加到文件证书上,形成数字证书。

客户端校验服务端数字证书的过程:

  1. 客户端使用同样的 Hash 算法计算出该证书的 Hash 值 H1;
  2. (通常浏览器和操作系统中集成了 CA 的公钥信息)浏览器收到证书以后使用 CA 的公钥解密 Certificate Signature 内容,得到第二个 Hash 值 H2;
  3. 比较 H1 和 H2,相同则可信赖。

证书信任链:

如百度的证书层级:

由于⽤户信任 GlobalSign,所以由 GlobalSign 所担保的 baidu.com 可以被信任,另外由于⽤户信任操作系统或浏览器的软件商,所以由软件商预载了根证书的 GlobalSign 都可被信任。

TLS 第三次握手

一、Change Cipher Key Exchange(called:密钥交换)

至此, 客户端和服务端双⽅都共享了三个随机数,分别是 Client Random、Server Random、pre-master。双方都⽣成会话密钥(Master Secret),它是对称密钥,⽤于对后续的 HTTP 请求/响应的数据加解密。

二、Change Cipher Spec (called:更改密码规格)

告诉服务端开始使⽤加密⽅式发送消息。

从这里开始,之后都是对称密钥加密的密文。

三、Encrypted Handshake Message (Finished)(called:加密握手信息)

把之前所有发送的数据做个摘要,再用会话密钥加密一下,让服务器验证加密通信是否可⽤和之前握⼿信息是否有被中途篡改过。

TLS 第四次握手

一、Change Cipher Spec(called:更改密码规格)

二、Encrypted Handshake Message(called:加密握手信息)

RSA 算法缺陷

问题所在:

RSA 密钥协商算法不⽀持前向保密 。

因为客户端传递随机数给服务端时使用的是公钥加密的, ⼀旦服务端的私钥泄漏 了,过去被第三⽅截获的所有 TLS 通讯密⽂都会被破解。

解决办法:

DH 密钥协商算法

具体过程:

客户端和服务端各⾃会⽣成随机数,并以此作为私钥,然后根据公开的 DH 计算公示算出各⾃的公钥,通过 TLS 握⼿双⽅交换各⾃的公钥,这样双⽅都有⾃⼰的私钥和对⽅的公钥,然后双⽅根据各⾃持有的材料算出⼀个随机 数,这个随机数的值双⽅都是⼀样的,这就可以作为后续对称加密时使⽤的密钥。


DH 密钥交换过程中,即使第三⽅截获了 TLS 握⼿阶段传递的公钥,在不知道的私钥的情况下,也是⽆法计算出 密钥的,⽽且每⼀次对称加密密钥都是实时⽣成的,实现前向保密。  

标签:TLS,公钥,加密,--,RSA,算法,密钥,服务端
From: https://www.cnblogs.com/tiddler/p/16647872.html

相关文章

  • C/C++中的自增自减运算符的前置后置问题
    前言在准备秋招的过程中,遇到双指针问题,发现自增自减运算符的前后置对于问题的解决有很大的影响,故写此文作为总结,方便后续查阅。正文一、前置后置的区别自增自减操作符......
  • The 2022 Hangzhou Normal U Summer Trials
    A.Hello,ACMer!这题就是找到hznu的个数#include<bits/stdc++.h>usingnamespacestd;int32_tmain(){strings;cin>>s;intcnt=0;for(i......
  • NTT(快速数论变换)
    NTT(快速数论变换)在取模的情况下,解决多项式乘法.n,m表示多项式的次数,从低到高读入constintNR=1<<22,g=3,gi=332748118,mod=998244353;//998244353的......
  • 差分约束
    差分约束模板:P5960【模板】差分约束算法-洛谷|计算机科学教育新生态(luogu.com.cn)例题:Problem-7176(hdu.edu.cn)有n个未知数,m个不等式.将所有不等式化......
  • Typescript类型体操 - Readonly 2
    题目中文实现一个通用MyReadonly2<T,K>,它带有两种类型的参数T和K。K指定应设置为Readonly的T的属性集。如果未提供K,则应使所有属性都变为只读,就像普通的Readonly<T>一......
  • 数位dp P3188 [HNOI2007]梦幻岛宝珠-Solution
    数位考虑+背包(+滚动数组)首先,我们能发现,这是一道\(n\)很小但是体积和权值都非常大的背包。但是这个题的体积有一个特殊的性质,就是他是\(a\times2^b,a\leq10\)的形......
  • pytorch相关知识点
    1.super的作用super()函数可以隐式的将子类里的method和父类里的method进行关联,这样就不需要再子类里显式的重新创建父类method里的属性说人话就是继承父类需要对用到的......
  • Vuex中的辅助函数
     一、组件访问state从vuex中导入mapState函数import{mapState}from'vuex'映射为当前组件的computed计算属性:...mapState(['count'])3.添加到组件......
  • SpringBoot的异步、定时、邮件任务
    13、异步、定时、邮件任务13.1、前言在我们的工作中,常常会用到异步处理任务,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会......
  • Spring整合Redis(十八)
    一、Redis简介Redis是一款基于键值对的NoSQL数据库,它的值支持多种数据结构:字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sortedsets)等。Redi......