https通信加密原理

这篇具有很好参考价值的文章主要介绍了https通信加密原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为什么要用https

HTTP 由于是超文本传输协议,是一个简单的请求-响应协议,它通常运行在TCP之上,它是明文传输,不能保证数据的完整性,不能保证是否被窃听,不能保证数据是否被篡改

https采用了一些加解密,数字证书,数字签名的技术保证了通信的安全,一般我们认为安全的通信需要包括以下四个原则::机密性、完整性,身份认证和不可否认。

  • 机密性:即对数据加密,解决了窃听风险,因为即使被中间人窃听,由于数据是加密的,他也拿不到明文;
  • 完整性:指数据在传输过程中没有被篡改,如果修改,接收方也能识别出来,从来判定接收报文不合法;
  • 身份认证:确认对方的真实身份,这样就解决了冒充风险,用户不用担心访问的是某宝结果却在和钓鱼网站通信的问题;
  • 不可否认: 即不可否认已发生的行为,比如小明向小红借了 1000 元,但没打借条,或者打了借条但没有签名,就会造成小红的资金损失。

HTTPS 通信原理简述

首先要了解有哪些加密算法,都有哪些特点

  1. 对称加密算法
    加解密都用的同一个秘钥,用同一个秘钥加密,同一个秘钥解密
    加解密速度快
    适合加密大量数据
    常用的对称加密算法有 AES、DES、3DES、RC4、SM4 等。
  2. 非对称加密算法
    有一对秘钥,公钥和私钥,公钥加密私钥解密,私钥加密公钥解密
    (注:私钥加密其实这个说法其实并不严谨,准确的说私钥加密应该叫私钥签名。因为私密加密的信息公钥是可以解密的,而公钥是公开的,任何人都可以拿到,用公钥解密叫做验签。)
    加密算法复杂,加密速度慢
    比较安全
    常用的非对称加密算法有RSA、DSA、SM2
  3. 哈希算法,也叫散列算法,也叫摘要算法
    不可逆,只能加密,无法解密
    哈希函数输出长度必须是固定的,并且与输入长度无关
    一般用来验证数据的完整性
    常用的哈希算法有SM3,、md5、SHA1、SHA256

实现对称加密,需要三项,确定对称加密算法,生成对称秘钥(一个随机数,一般一次一秘,每一次的通信都会重新生成),明文
实现非对称加密,也需要三项,确定非对称加密算法,公钥(一般一个网站有一组公私钥对),明文
实现哈希算法,需要两项,确定哈希算法,明文,生成固定长度密文

对称加密报文

既然 HTTP 是明文传输的,那我们给报文加密不就行了,对称加密有具有加解密速度快,性能高的特点,也是 HTTPS 最终采用的加密形式。 所以使用对称加密的方式来给报文进行加解密。
但是这里有一个关键问题:对称加密的通信双方要使用同一把密钥,这个密钥是如何协商出来的?如果通过报文的方式直接传输密钥,之后的通信其实还是在裸奔,因为这个密钥会被中间人截获甚至替换掉,这样中间人就可以用截获的密钥解密报文,甚至替换掉密钥以达到篡改报文的目的。

非对称加密结合对称加密算法

这个时候就用到了非对称算法,解决单向对称密钥的传输问题 公钥加密只能私钥解密,而私钥只有服务器有,不在中间传输。用非对称算法的公钥加密对称秘钥,用对称秘钥加密报文,服务器端先用私钥解密出对称秘钥,再解密出报文,这样就实现了加密传输的安全。

但是问题又来了, server 怎么把公钥安全地传输给 client 呢。如果直接传公钥,也会存在被中间人调包的风险。这个时候就用到了数字证书,解决公钥传输信任问题

数字证书

服务器得去公证人这里先登记,把服务器的公钥、网站域名等等信息报上去,公证人拿到这些信息后,计算一个 Hash 值,然后再用公证人的 私钥 把Hash值进行加密,加密后的结果就是 数字签名。最后,公证人把登记的信息和这个数字签名合在一起,封装了一个新的文件发给服务器,登记就完成了,而这个新的文件就是数字证书

服务器拿到证书后,可要好生保管,因为通信的时候,服务器须要将他们的证书发给我们浏览器验证。我们浏览器拿到证书后,把证书里面的信息也计算一遍Hash,再用提前记录好的 公证人的公钥 把证书里的数字签名进行解密,得到公证人计算的Hash,两个一对比,就知道这证书是不是公证人签发的,以及有没有被篡改过了!只有验证成功才能继续后面的流程,要不然就是冒充的!

由于只有 CA 的公钥才能解密签名,如果客户端收到一个假的证书,使用 CA 的公钥是无法解密的,如果客户端收到了真的证书,但证书上的内容被篡改了,摘要比对不成功的话,客户端也会认定此证书非法。如果中间人也向CA申请了证书,劫持客户端的请求,返回自己的证书,也是行不通的,因为客户端会验证网站域名等信息,这一下总算解决了中间人冒充的问题。

抓包

charles 这些中间人为啥能抓到明文的包呢?其实就是用了证书调包这一手法,想想看,在用 charles 抓 HTTPS 的包之前我们先要做什么,当然是安装 charles 的证书。
这个证书里有 charles 的公钥,这样的话 charles 就可以将 server 传给 client 的证书调包成自己的证书,client 拿到后就可以用你安装的 charles 证书来验签等,验证通过之后就会用 charles 证书中的公钥来加密对称密钥了。整个流程如下:

https通信加密原理
由此可知,charles 这些中间人能抓取 HTTPS 包的前提是信任它们的 CA 证书,然后就可以通过替换证书的方式进行瞒天过海,所以我们千万不要随便信任第三方的证书,避免安全风险。

证书链

我们可以向 CA 申请证书,但全世界的顶级 CA(Root CA) 就那么几个,每天都有很多人要向它申请证书,它也忙不过来。这个时候用到了证书链,它会授权下一级,下下级 ,这样我们就只要找一级/二级/三级 CA 申请证书即可。怎么证明这些证书被 Root CA 授权过了呢,小一点的 CA 可以让大一点的 CA 来签名认证。比如一级 CA 让 Root CA 来签名认证,二级 CA 让一级 CA 来签名认证,Root CA 没有人给他签名认证,只能自己证明自己了,这个证书就叫「自签名证书」或者「根证书」,我们必须信任它,不然证书信任链是走不下去的(这个根证书其实是内置在操作系统中的,在浏览器中可以看到根证书和中间证书和SSL证书,及证书链)
现在我们看看如果站点申请的是二级 CA 颁发的证书,client 收到之后会如何验证这个证书呢,实际上 service 传了传给二级 CA 的证书外,还会把证书信任链也一起传给客户端,这样客户端会按如下步骤进行验证:

  1. 浏览器就使用信任的根证书(根公钥)解析证书链的根证书得到一级证书的公钥+摘要验签;
  2. 拿一级证书的公钥解密一级证书,拿到二级证书的公钥和摘要验签;
  3. 再然后拿二级证书的公钥解密 server 传过来的二级证书,得到服务器的公钥和摘要验签,验证过程就结束了。

HTTPS 通信过程

发起请求、验证身份、协商秘钥、加密会话

一、 客户端向服务端发起ssl请求

  1. 告诉服务器自己支持哪些加密算法
  2. 客户端生成随机数R1发送给服务端

二、 服务端向客户端发送数字证书(ssl证书)

  1. 服务端生成随机数R2
  2. 选择一种双方都支持的加密算法
  3. 服务端把证书、公钥、随机数R2、会话密钥生成算法,一同发给客户端

三、 客户端验证数字证书

  1. 验证数字证书的有效性,首先验证数字证书上的CA证书的根证书是否存在,再使用CA根证书的公钥解密证书签名数据,得到CA机构计算的摘要。然后通过证书里提供的摘要算法对数据(证书中的相关的明文信息)采用相同的散列函数(Hash算法)计算得到信息摘要,然后通过自己生成的摘要与CA机构的摘要比对。如果一致,则可以确认证书的合法性,即公钥合法
  2. 验证证书合法性,包括证书是否吊销、是否到期、域名是否匹配,通过后则进行后面的流程
  3. 获得证书的公钥、会话密钥生成算法、随机数R2
  4. 生成一个随机数R3(预主密钥)。
  5. 根据会话密钥算法使用R1、R2,和预主密钥R3生成会话密钥;
  6. 用服务端证书的公钥加密随机数R3并发送给服务端。

四、 服务器得到会话密钥

  1. 服务器用私钥解密客户端发过来的随机数R3
  2. 根据会话秘钥算法使用R1、R2,和预主密钥R3生成会话密钥;

五、 客户端与服务端开始进行加密会话

  1. 客户端发送加密数据给服务端
  2. 服务端响应客户端( 解密接收数据:服务端用会话密钥解密客户端发送的数据; 加密响应数据:用会话密钥把响应的数据加密发送给客户端。)
  3. 客户端用会话密钥解密服务端响应的数据

六、 客户端与服务端开始进行加密会话

https通信加密原理文章来源地址https://www.toymoban.com/news/detail-480148.html

到了这里,关于https通信加密原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么要用线程池?

    线程池是一种管理和复用线程资源的机制,它由一个线程池管理器和一组工作线程组成。线程池管理器负责创建和销毁线程池,以及管理线程池中的工作线程。工作线程则负责执行具体的任务。 线程池的主要作用是管理和复用线程资源,避免了线程的频繁创建和销毁所带来的

    2024年02月06日
    浏览(63)
  • 为什么要用虚拟 DOM?

    虚拟DOM(Virtual DOM)是一种将应用程序的状态(state)与DOM分离的技术。它是一个JavaScript对象,它的结构类似于实际DOM元素的结构。使用虚拟DOM的目的是在减少DOM操作的数量的同时,提高应用程序的性能和响应速度。 当应用程序的状态发生变化时,使用虚拟DOM可以计算出需要

    2024年02月01日
    浏览(44)
  • 低代码是什么意思?企业为什么要用低代码平台?

    低代码是什么意思?企业为什么要用低代码平台? 这两个问题似乎困扰了很多人,总有粉丝跟小简抱怨, 一天到晚念叨低代码,倒是来个人解释清楚啊! 来了,这次一文让你全明白。 在此之前,先了解什么是云计算。 “云” :指的就是互联网,因为之前互联网(Internet)

    2024年02月07日
    浏览(55)
  • 2023-06-03:redis中pipeline有什么好处,为什么要用 pipeline?

    2023-06-03:redis中pipeline有什么好处,为什么要用 pipeline? 答案2023-06-03: Redis客户端执行一条命令通常包括以下四个阶段: 1.发送命令:客户端将要执行的命令发送到Redis服务器。 2.命令排队:Redis服务器将收到的命令放入队列中,按照先进先出(FIFO)的原则等待执行。 3.命令

    2024年02月07日
    浏览(40)
  • bash脚本if语句比较为什么要用x

    如下进行PCIe设备的检测和计数,并执行重启操作的例子代码: 在给定的代码片段中,使用 x 是为了避免在比较时出现空字符串的问题。这是一种常见的技巧,用于确保比较操作的准确性。 在这个特定的语句中, x${devIDFunc0} 是用来检查变量 devIDFunc0 是否为空字符串。通过在变

    2024年02月08日
    浏览(51)
  • 在Vue中动态引入图片为什么要用require

    静态资源和动态资源 静态资源 动态的添加src 动态资源 我们通过网络请求从后端获取的资源 动态的添加src会被当成静态资源 动态的添加src最终会被打包成: 动态的添加图片最会会被编译成一个静态的字符串,然后再浏览器运行中会去项目中查找这个资源, 静态资源编译 默

    2024年02月13日
    浏览(49)
  • 为什么爬虫要用高匿代理IP?高匿代理IP有什么优点

    只要搜代理IP,度娘就能给我们跳出很多品牌的推广,比如我们青果网路的。 正如你所看到的,我们厂商很多宣传用词都会用到高匿这2字。 这是为什么呢?高匿IP有那么重要吗? 这就需要我们从HTTP代理应用最多最广的:爬虫数据采集来说。 爬虫数据采集的时候,非常容易遇

    2024年02月12日
    浏览(49)
  • 模型\视图一般步骤:为什么经常要用“选择模型”QItemSelectionModel?

                                                              一、“使用视图”一般的步骤: //1. 创建  模型(这里是数据模型!) tabModel = new QSqlTableModel ( this , DB ); // 数据表 //2. 设置  视图 的 模型(这里是数据模型!) ui - tableView - setModel ( tabModel ); 模

    2024年01月22日
    浏览(54)
  • facebook多账号运营为什么要用静态住宅ip代理?

    在进行Facebook群控时,ip地址的管理是非常重要的,因为Facebook通常会检测ip地址的使用情况,如果发现有异常的使用行为,比如从同一个ip地址频繁进行登录、发布内容或者在短时间内进行大量的活动等等,就会视为垃圾邮件或者恶意行为,导致账户被禁用或者限制。 因此,

    2024年02月21日
    浏览(46)
  • 为什么3D开发要用三维模型格式转换工具HOOPS Exchange?

    在当今数字化时代,3D技术在各个行业中扮演着愈发重要的角色,从产品设计到制造、建筑、医疗保健等领域。然而,由于不同的软件和系统使用不同的3D模型格式,跨平台、跨系统之间的数据交换和共享变得十分复杂。为了解决这一难题,Tech Soft 3D公司推出了HOOPS Exchange,一

    2024年03月27日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包