CA证书、https、SSL\TLS 扫盲
mbed TLS、TLS、SSL、HTTPS、TCP、MQTT的区别和关系
mbed TLS是一个加密库,为实现TLS提供了一套API,比如:mbedtls_client_connect()、mbedtls_client_write()、mbedtls_client_read();
TLS协议是应用层协议,定义了完整的数据包格式,HTTPS是HTTP+TLS,TLS是HTTP的上层协议,HTTP数据包作为TLS数据包的内容,比如HTTP数据包通过函数mbedtls_client_write()发送出去;
TLS的前身是SSL,如下:
定义
| |
---|---|
协议
|
年份
|
SSL 1.0
|
未知
|
SSL 2.0
|
1995
|
SSL 3.0
|
1996
|
TLS 1.0
|
1999
|
TLS 1.1
|
2006
|
TLS 1.2
|
2008
|
TLS 1.3
|
2018
|
TLS协议可以配合其他协议一起使用,TLS协议下层是HTTP协议就是HTTPS;MQTT如果走加密通道,意思就是TLS协议的下层协议是MQTT协议,MQTT数据包通过TLS协议的发送API发送出去;TLS协议下层也可以直接是TCP协议
CA证书
CA = certificate authority,是一个权威机构,负责颁发证书。
a.服务器 S 向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证;
b.CA 通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;
c.如信息审核通过,CA 会向申请者签发认证文件,即证书。
证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名;
签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA 的私钥对信息摘要进行加密,密文即签名;
d.客户端 C 向服务器 S 发出请求时,服务器 S 返回证书文件;
e.客户端 C 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA 的公钥(此公钥在客户端的根证书中)解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即服务器 S 的公钥合法;
f.客户端然后验证证书相关的域名信息、有效时间等信息;
在这个过程注意几点:
1.申请证书不需要提供私钥,确保私钥永远只能服务器掌握;
2.证书的合法性仍然依赖于非对称加密算法(保证证书不会被伪造);
3.证书=公钥+申请者与颁发者信息+签名;
4.客户端会内置权威受信任 CA 的证书信息(包含公钥)。
证书的作用就是保证客户端正确收到服务器的公钥,并且客户端使用公钥加密数据发给服务器,只有合法服务器有私钥,才能解密数据,保证服务器的合法性(称作对服务器的认证)。
https
http存在的问题
- 容易被监听
- http通信都是明文,数据在客户端与服务器通信过程中,任何一点都可能被劫持。比如,发送了银行卡号和密码,hacker劫取到数据,就能看到卡号和密码,这是很危险的
- 被伪装
- http通信时,无法保证通行双方是合法的,通信方可能是伪装的。比如你请求www.taobao.com,你怎么知道返回的数据就是来自淘宝,中间人可能返回数据伪装成淘宝。
- 被篡改
- hacker中间篡改数据后,接收方并不知道数据已经被更改
https解决的问题
https很好的解决了http的三个缺点(被监听、被篡改、被伪装),https不是一种新的协议,它是http+SSL(TLS)的结合体,SSL是一种独立协议,所以其它协议比如smtp等也可以跟ssl结合。https改变了通信方式,它由以前的http—–>tcp,改为ssl——>http—–>tcp;https采用了共享密钥加密+公开密钥加密的方式
https连接过程
- 客户端发送请求到服务器端
- 服务器端返回证书,公钥作为证书的一部分而存在
- 客户端通过存在本地的根证书验证证书,如果有效,则生成对称加密的密钥(以下简称密钥,对称加密计算快)并使用公钥加密发送到服务器端
- 服务器端使用私钥解密数据,并使用收到的密钥加密数据,发送到客户端
- 客户端使用密钥解密数据
- SSL加密建立………
客户端认证的通信的过程
- 客户端需要认证的过程跟服务器端需要认证的过程基本相同,并且少了最开始的两步。这种情况都是证书存储在客户端,并且应用场景比较少,一般金融才使用,比如支付宝、银行客户端都需要安装证书
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
2017-04-27 QT学习指导
2017-04-27 C++ --- 类继承和调用父类的构造函数方法
2017-04-27 C++中的explicit关键字