当前位置: 首页 > article >正文

密码学和CA证书

参考视频

一. 公钥私钥的理解

我们提到的使用公钥私钥进行加密解密只是一种口头表达方式,准确来说应该是公钥和私钥通过加密
算法生成,也需要通过配合加密算法进行解密。而不是直接用公钥和私钥进行加密解密。

二. 对称加密和非对称加密算法

1. 非对称加密算法

非对称加密算法存在一对密钥,通常用于身份验证。比如ssh登录验证,CA证书的验证。因为1. 公钥可以公开,任何人都可以使用。只要保管好私钥就可以很好的完成验证。2. 效率相对较低

2. 对称加密算法

对称加密算法只存在一个密钥,通常用于数据加密传输。如ssh连接后和CA验证成功后,客户端使用对称加密算法生成的会话密钥进行加密传输

三. CA证书

1. CA证书的作用

  1. CA证书的作用是使用了非对称加密算法验证服务器的合法性,并不是用于加密,加密要使用对称加密算法生成的会话密钥进行。

2. CA证书的工作过程

(1) 服务器生成服务器的数字证书(其中包含了服务器的信息),并申请CA签名(申请CA签名涉及到CA机构使用私钥对证书进行签名),然后颁发给客户端。

(2)一般情况下客户端根据为服务器证书签名的CA的公钥来验证服务器证书是否有效。但是很多
时候需要通过证书链进行验证,比如服务器证书由一个中间CA私钥进行签名,该服务器证书就是
证书链的最底层证书,依次往上就是中间CA证书(由根CA私钥进行签名),最后到达根CA证书自签名。根证书存放在浏览器中。验证时使用上一级的公钥来验证当前级的证书,递归验证,最后被根证书验证。才算验证成功

中间证书例子:
比如burpsuite,它作为中间人同时扮演服务器和客户端。我们把他的根证书放到浏览器中,在浏览器
向burp发送请求时,burp作为服务器给浏览器颁发一个由根证书签名的服务器证书,该证书就是一个
中间CA证书,便于浏览器验证burp的合法性。然后burp作为客户端,又对真正服务器的CA证书进行
验证。实现了中间人劫持。

(3)如果客户端验证成功,客户端通过对称加密算法产生一个会话密钥,然后使用服务器的公钥(包含在服务器数字证书中)加密会话密钥,并发送给服务器,之后服务器和客户端使用该会话密钥进行对称加密通信。

四. 其它问题

1. clash为什么不需要下载证书?

因为只有要对https加密流量进行分析时才需要证书验证过程,clash只负责转发而不是分析流量。

2. ssh连接时使用的known_hosts文件和CA都用于验证服务器身份,他们的区别是什么?

1. 首先理解ssh的通信过程:

ssh连接依靠的是两对密钥对,服务器密钥对和客户端密钥对进行身份验证。依靠会话密钥进行加密传输。

  • 具体过程为:
    • 客户端:
      客户端使用客户端私钥加密签证,服务器使用客户端公钥验证。
    • 服务器:
      1. 服务器将自己的公钥发送给客户端,客户端保存到known_hosts
      2. 服务器使用私钥签名发送到客户端,客户端用服务器公钥验证
      3. 客户端验证成功后,客户端使用对称加密算法产生一个会话密钥,然后使用服务器的公钥加密该会话密钥,并发送给服务器。服务器使用私钥进行解密
      4. 最后服务器和客户端依靠该会话密钥,和约定的对称加密算法对数据进行非对称加密通信。
        (加密后数据的格式为 密文+MAC字段,密文用于避免明文直接暴露,MAC用于判断数据是否被修改,MAC字段可以简单理解为MD5指纹验证,但是MAC字段并不是使用的MD5算法)

2. 为什么不使用ssh来替代CA证书?

  1. ssh在客户端验证服务器身份时,客户端需要存储每个服务器的公钥对服务器一一进行验证,而CA证书不一样,多个服务器可以使用一家CA机构的签名,从而客户端无需保存每个服务器公钥,只需要保存一家根CA证书即可。
  2. ssh在服务器验证客户端身份时,ssh要么采取密码登录的方式(太麻烦),要么让服务器保存客户端的公钥,这样也会增大服务器开销。而使用CA证书,多个客户端也可以使用一家CA机构的签名,从而服务端无需保存每个客户端公钥,只需要保存一家根CA证书即可。

http://www.kler.cn/a/419666.html

相关文章:

  • C++知识整理day3类与对象(下)——赋值运算符重载、取地址重载、列表初始化、友元、匿名对象、static
  • 【数据事务】.NET开源 ORM 框架 SqlSugar 系列
  • SpringMVC(二)
  • blender 视频背景
  • 网络安全:攻击和防御练习(全战课), DDos压力测试
  • 混沌工程/混沌测试/云原生测试/云平台测试
  • Elasticsearch优化汇总
  • phpmyadmin导出wordpress数据教程
  • 在 CentOS 上安装 Docker:构建容器化环境全攻略
  • 《Python基础》之正则表达式--re模块
  • 【QNX+Android虚拟化方案】124 - VLAN配置 之 QNXAndroid 修改简单记录
  • java原生反序列化利用链7u21的学习
  • CCNA_SEC 第五天作业
  • 一款适用于教育行业的免费word插件
  • Stable Diffusion介绍
  • ARM 嵌入式处理器内核与架构深度剖析:解锁底层技术逻辑
  • Java中Logger定义的三种方式
  • 多点DMALL启动招股:将在港交所上市,聚焦数字零售服务
  • 在anaconda中为jupyter安装Nbextensions扩展
  • C++初阶——动态内存管理
  • android studio引用so库
  • 【Linux】文件操作的艺术——从基础到精通
  • 深度学习-52-AI应用实战之基于Yolo8的目标检测自动标注
  • 剖析go协程池实现原理
  • (简单5步实现)部署本地AI大语言模型聊天系统:Chatbox AI + grok2.0大模型
  • 6.824/6.5840 Lab 2: Key/Value Server