前言

个人原因最近要离开杭州了,接下来也不知道去哪,其实挺想去深圳发展,但是不知道行情怎么样,有没有深圳的老哥们,介绍一波,哈哈~

好了,废话不多说,本文主要尝试着用简单的语言来解析下HTTPS的原理,或者说HTTPS的实现思想,但并不保证真正的实现过程,老哥们可以自行参考

从一个例子说起

背景

假如你穿越回高中,你和你女朋友在教室遥远的对角落,只能通过传纸条来进行交流(不能直接说话,不然会被抓到早恋,hh),但是又不想纸条的内容内中间传递人给看到,那怎么样才能达到这样的效果呢?

STEP ONE

这里我们假设男女对象是A和B,中间传递纸条的人为C

这个时候第一想法就是,使用对称加密的方式,A使用秘钥对消息进行对称加密,然后B也通过同一份秘钥进行解密,这样就算C看到消息,也是密文,但是有个问题 ,之前也说了A和B是不能直接说话的,那么这个秘钥A怎么告诉B呢,有人说再加密。。那就回到了鸡生蛋蛋孵鸡的问题了

STEP TWO

为了解决上面的问题,我们引出了非对称加密的概念,特点是私钥加密后的密文,只要是公钥,都可以解密,但是公钥加密后的密文,只有私钥可以解密。私钥只有一个人有,而公钥可以发给所有的人

那假如B持有公钥,自身生成STEP1中约定加密的私钥(一般使用随机数),然后用公钥将此私钥进行加密,然后A使用非对称加密的私钥进行解密拿到B生成的私钥,然后再用STEP1中的方法进行加解密消息。这样就是C拦截到消息,由于只有A有非对称加密的私钥,也无法解密出协商的私钥

有朋友可能就有疑问了,既然非对称加密可以达到这样的效果,为啥还要用非对称加密来协商出一个私钥,再用对称加密进行消息加密交互,直接用非对称加密加密消息不就行了,这里就涉及到了一个速度以及消耗性能的问题,对称加密会比非对称加密的速度更快,计算量小等优点,详细的老哥们可以深入了解下

STEP THREE

所以现在问题又来了,这个B的非对称加密公钥怎么得到呢?首先第一想到的方案由A给B发送过去,那么不禁就会有疑问,如果C拿到了这个公钥,会不会产生问题呢,不仔细思考的可能觉得没啥问题,毕竟私钥只有一份在A那里,只要B是使用公钥进行加密了,只有A才能解密,C也没啥办法。

但是会出现一个问题,这里假设A那边的公私钥称为X/Y,A将公钥X发送给B,C拦截到消息,但C自己也有一套公私钥,这里称为J/K,C拿到公钥X后,把自己的公钥J发送给了B,这个时候B是不知情的,将数据用C给的公钥J加密后返回,这个时候C又可以通过私钥K进行解密,得到了B的数据,假设C将数据修改后,再通过之前的X公钥进行加密,然后再传递给A,A也可以通过Y进行解密

引用一张图方便帮助大家理解下

STEP FOUR

公钥被掉包的问题,其实也就是身份验证的问题,B无法验证这个公钥到底是A给的还是C掉包之后给的。

所以怎么解决这个问题,再进行加密解密,感觉又要进入到鸡生蛋蛋孵鸡的问题了,所以,A不能够直接将公钥传递给B,通过一个信任的第三方(假如兄弟闺蜜啥的,hh)用私钥将公钥进行加密后,再传递给B,B通过公钥解密出最终A要传递的公钥,如果最终能够解密出来,说明这个公钥是没有经过C给掉包的,假如STEP 3的情况,C使用自己的私钥加密后,B是无法使用第三方的公钥解密的。

那么现在问题也就回到一点,B是怎么获得到第三者的公钥的呢,其实答案是B自己内置了这些第三者的公钥的,可以理解为B是信任这些第三方的,内部会维护一个信任的第三方公钥列表,只要是通过这些信任列表中的加密之后的东西,B是可以通过公钥解密出来的

这里的第三方映射到https的话,也就是CA机构了,客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内

总结

这里再将上面的例子替换成https,总结下大概流程

  • 服务端先持有非对称加密的公私钥,将公钥发送给第三方CA机构,CA机构通过自身私钥加密公钥,返回数字证书,服务端将数字证书发送给客户端
  • 客户端通过数字证书,通过信任证书列表拿到改机构的公钥进行解密,拿到非对称加密的公钥
  • 客户端自身通过随机数算法等等生成对称加密算法私钥,通过第二步拿到的公钥将此私钥进行加密
  • 服务端通过本身的私钥进行解密,拿到客户端生成的私钥
  • 服务端、客户端通过此私钥,使用对称加密算法进行交互,保证数据安全

总结来说Https是通过对称加密算法+非对称加密算法+第三方CA机构实现的,使用CA结构拿到正确的非对称加密的公钥,使用公钥加密对称加密算法的私钥,最终使用对称加密算法进行消息加解密.

水平有限,若有错误,请及时指出,谢谢

参考资料

https实现原理

带你通俗理解https相关推荐

  1. 一文带你通俗理解23种软件设计模式(推荐收藏,适合小白学习,附带C++例程完整源码)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 一.设计模式是什么? 设计模式是为了解决在软件开发过程中遇到的某些问题而形成的思想.同一场景有多 ...

  2. 画出该lti系统的幅频特性响应曲线_一文带你通俗理解幅频响应和相频响应

    ​引言 好多人学习数字信号处理学了很久都没有明白这两个概念的真实含义,或者说很多人在设计滤波器的时候,根本就没有考虑什么是幅频响应和相频响应.只是一昧地把滤波器设计出来然后把不要的频率滤除掉,这样是要 ...

  3. 带通 带阻滤波器 幅频响应_一文带你通俗理解幅频响应和相频响应

    引言 好多人学习数字信号处理学了很久都没有明白这两个概念的真实含义,或者说很多人在设计滤波器的时候,根本就没有考虑什么是幅频响应和相频响应.只是一昧地把滤波器设计出来然后把不要的频率滤除掉,这样是要吃 ...

  4. 【RTOS的最通俗理解】行业大佬用一篇文章带你快速理解RTOS

    资料下载&百问网技术交流群,百万嵌入式工程师聚集地: https://www.100ask.net/page/2248041 文章目录 单片机\_RTOS\_架构 1. RTOS的概念 1.1 ...

  5. 【数据安全】一、通俗理解数字签名,数字证书和https

    通俗理解数字签名,数字证书和https 前言 最近在开发关于PDF合同文档电子签章的功能,大概意思就是在一份PDF合同上签名,盖章,使其具有法律效应.签章有法律效应必须满足两个条件: 能够证明签名,盖 ...

  6. 通俗理解tcp/ip的三次握手和四次分手

    转载地址:https://github.com/jawil/blog/issues/14 最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最 ...

  7. 一文让你通俗理解奇异值分解

    导读:今天,小编和大家分享一道关于推荐系统相关的面试题,如何通俗理解奇异值分解?让我们一起来看看如何解析这道题吧. 特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中.而且线性代数或者矩阵 ...

  8. 通俗理解kaggle比赛大杀器xgboost

    通俗理解kaggle比赛大杀器xgboost 说明:若出现部分图片无法正常显示而影响阅读,请以此处的文章为准:xgboost 题库版. 时间:二零一九年三月二十五日. 0 前言 xgboost一直在竞 ...

  9. 通俗理解卷积神经网络(cs231n与5月dl班课程笔记)

    1 前言 2012年我在北京组织过8期machine learning读书会,那时"机器学习"非常火,很多人都对其抱有巨大的热情.当我2013年再次来到北京时,有一个词似乎比&qu ...

最新文章

  1. 动画Storyboard基础
  2. It's Time to Say Goodbye (此刻告别)
  3. 已解决:centos 7.x系统自带的3.10.x内核存在一些bugs,导致运行docker、k8s不稳定,需要升级内核解决此问题。
  4. 顺序表的基本操作实验报告_INDIRECT函数从入门到进阶之相同顺序跨表引用
  5. 神经网络贷款风险评估(base on keras and python ) 原创 2017年08月18日 14:35:17 标签: python / 神经网络 / keras 300 用我
  6. vba根据内容调整word表格_给你的word提速
  7. sketch-a-net_Adobe XD,Sketch,Figma,InVision-如何在2020年选择最佳设计软件
  8. C++ AFX_MANAGE_STATE(AfxGetStaticModuleState())的作用
  9. 如果 AI 和算法无罪,那么谁在杀死穷人?
  10. micropython esp32驱动舵机_PCA9685舵机控制板与MicroPython-ESP32-1Z实验室
  11. html5技术英文论文参考文献,英文论文的参考文献范例(精选8篇)
  12. 利用360卫士打补丁
  13. 机器学习——基本原理
  14. pycharm 拼音检查
  15. C盘扩容,解决电脑卡顿
  16. 基于安卓的视频遥控小车——红外遥控部分
  17. 【机器学习中的数学】基函数与函数空间
  18. 干货课堂丨分享一种LCD驱动电路方案【飞凌嵌入式】
  19. Android Studio之高德地图实现定位和3D地图显示
  20. Android 下拉刷新框架实现

热门文章

  1. Reactjs 15.4.X IE11 Objects are not valid as a React child
  2. HTML实现点击时的阴影(:active)(已解决iOS微信上无法使用)
  3. [C语言]函数与调试
  4. What is Leanstar.cn?
  5. WINDOW7下 配置APACHE+PHP 无法加载MYSQL 的问题
  6. 谈谈金融行业的开源风险管理
  7. linux(Centos7)安装elasticsearch6.2.2
  8. 能让程序员瞬间崩溃的五个瞬间,共鸣的同学请举手!
  9. JavaScript 原始数据类型转换
  10. SFTP上传下载文件