HTTPS(SSL/TLS)是计算机网络的知识,主要用来对HTTP协议传输的文本进行加密,提高安全性的一种协议。

因为HTTP是明文传输,所以会很有可能产生中间人攻击(获取并篡改传输在客户端及服务端的信息并不被人发觉),HTTPS加密应运而生。

什么是对称加密?

简单的说,就是用一个密钥,可以对一段信息进行加密,也可以使用其本身对这段信息进行解密,这就叫做对称加密。

所以对称加密能防止中间人攻击吗?

很难。

首先,如果能做到客户端和服务端都拥有这个密钥并且没有第三者知道,那理论上对称加密是可以的,但是如何做到不可能让别人知道呢?

无论这个密钥是客户端生成发送给服务端,还是服务端生成发送给客户端,此时如果有中间人窃取了该密钥的信息,那往后传输的所谓“加密”数据,中间人也都可以将其解密并加密继续传输下去而不被人发现。

显然,本来我们就想要防范中间人攻击,而对称加密想实施的前提就是保证没有中间人窃取密钥才可以。这是不是有点像“问:我们如何将房价降下来呢?答:把房子的价格降下来,房价自然降下来”

非对称加密

简单说就是有两把密钥,一把叫做公钥、一把叫私钥,用公钥加密的内容必须用私钥才能解开,同样,私钥加密的内容只有公钥能解开。

所以非对称加密可以防范中间人攻击吗?

鉴于非对称加密的机制,我们可能会有这种思路:服务器先把公钥以明文方式传输给浏览器,之后浏览器向服务器传数据前都先用这个公钥加密好再传,这条数据的安全似乎可以保障了!因为只有服务器有相应的私钥能解开公钥加密的数据

然而反过来由服务器到浏览器的这条路怎么保障安全?如果服务器用它的私钥加密数据传给浏览器,那么浏览器用公钥可以解密它,而这个公钥是一开始通过明文传输给浏览器的,若这个公钥被中间人劫持到了,那他也能用该公钥解密服务器传来的信息了。所以目前似乎只能保证由浏览器向服务器传输数据的安全性

所以我们证明了一组公钥私钥,至少可以确保单向的数据安全,那么我可不可以合理推断如果我有两组公钥私钥,那我就可以保证双向数据传输的安全了呢?

  • 某网站服务器拥有公钥A与对应的私钥A’;浏览器拥有公钥B与对应的私钥B’。
  • 浏览器把公钥B明文传输给服务器。
  • 服务器把公钥A明文给传输浏览器。
  • 之后浏览器向服务器传输的内容都用公钥A加密,服务器收到后用私钥A’解密。由于只有服务器拥有私钥A’,所以能保证这条数据的安全。
  • 同理,服务器向浏览器传输的内容都用公钥B加密,浏览器收到后用私钥B’解密。同上也可以保证这条数据的安全。

bingo!好像成功了!但是这个方法并没有被大范围推广,并且也不可能被大范围推广。很重要的原因是非对称加密算法非常耗时,而对称加密快很多。

好家伙,说来说去又回到对称加密了,合着你就非得用对称加密是吗?

对!就是要找一个方法,让客户端和服务端都知道那个公共密钥并且确保第三方不会获取,那我就是可以放心的使用对称加密传输数据了

对称加密和非对称加密的综合版本

  1. 某网站拥有用于非对称加密的公钥A、私钥A’。
  2. 浏览器向网站服务器请求,服务器把公钥A明文给传输浏览器。
  3. 浏览器随机生成一个用于对称加密的密钥X,用公钥A加密后传给服务器。
  4. 服务器拿到后用私钥A’解密得到密钥X。
  5. 这样双方就都拥有密钥X了,且别人无法知道它。之后双方所有数据都通过密钥X加密解密即可。

成功!HTTPS基本就是采用了这种方案。

但是这并不是完美的,这仍然有漏洞喔!

对称加密和非对称加密的综合版本的漏洞

如果在数据传输过程中,中间人劫持到了数据,此时他的确无法得到浏览器生成的密钥X,这个密钥本身被公钥A加密了,只有服务器才有私钥A’解开它,然而中间人却完全不需要拿到私钥A’就能干坏事了。请看:

  1. 某网站有用于非对称加密的公钥A、私钥A’。
  2. 浏览器向网站服务器请求,服务器把公钥A明文给传输浏览器。
  3. 中间人劫持到公钥A,保存下来,把数据包中的公钥A替换成自己伪造的公钥B(它当然也拥有公钥B对应的私钥B’)
  4. 浏览器生成一个用于对称加密的密钥X,用公钥B(浏览器以为是公钥A)加密后传给服务器。
  5. 中间人劫持后用私钥B’解密得到密钥X,再用公钥A加密后传给服务器
  6. 服务器拿到后用私钥A’解密得到密钥X。

这样在双方都不会发现异常的情况下,中间人通过一套“狸猫换太子”的操作,掉包了服务器传来的公钥,进而得到了密钥X。根本原因是浏览器无法确认收到的公钥是不是网站自己的,因为公钥本身是明文传输的。

所以!我们只剩下最后一个问题,那就是怎么确保浏览器收到的公钥是网站的,而不是中间人的!

数字证书

网站在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书里含有证书持有者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明“该公钥对应该网站”。而这里又有一个显而易见的问题,“证书本身的传输过程中,如何防止被篡改”?即如何证明证书本身的真实性?身份证运用了一些防伪技术,而数字证书怎么防伪呢?解决这个问题我们就真的接近胜利了!

如何防止数字证书被篡改?

数字签名

简单理解就是用签名者的私钥加密一串信息,将这串信息以及这串信息的加密版以及公钥都传给客户端,客户端收到信息后用公钥解密,如果解密的结果和明文传过来的数据相符合,那自然可以证明该公钥是真的。

故事到此为止就讲完了。但是好像遗留了一点性能问题

每次发送HTTPS请求都需要在TLS/SSL层进行握手传输密钥吗?

如果是的话,那也太浪费资源和时间了吧。

服务器会为每个浏览器(或客户端软件)维护一个session ID,在TLS握手阶段传给浏览器,浏览器生成好密钥传给服务器后,服务器会把该密钥存到相应的session ID下,之后浏览器每次请求都会携带session ID,服务器会根据session ID找到相应的密钥并进行解密加密操作,这样就不必要每次重新制作、传输密钥了!

至此我们的故事就真的讲完了!

故事一定会有结尾,但你我却没有结果~

什么是https(加密)协议,彻底搞懂https相关推荐

  1. 网盾极风云:五分钟搞懂HTTP和HTTPS

    很多小伙伴每天都要用到http和https协议,但是却对他们一知半解,这篇文章将解开你的所有疑惑. HTTP 一般人们都能说出"HTTP是一种超文本传输协议(Hypertext Transf ...

  2. 如何使用HTTPS加密保护网站?

    加密 Web 内容并不是什么新鲜事:自发布通过SSL/TLS协议来加密 Web 内容的规范以来,已经过去了近 20 年.然而,近年来,运行安全的HTTPS加密 Web 服务器已经从一种选择变成了一种安 ...

  3. https与http的区别以及https加密原理

    https与http的区别以及https加密原理 一.什么是HTTPS 二.为什么要用HTTPS替代HTTP 三.HTTPS 与 HTTP 的区别 四.HTTPS如何解决HTTP上述问题? 1. 对称 ...

  4. 【每天学习一点新知识】嘘!上课偷偷学习HTTPS加密

    目录 论什么是HTTPS 为什么需要HTTPS HTTPS加密过程 论什么是HTTPS HTTPS,超文本传输安全协议(全称: Hypertext Transfer Protocol Secure) ...

  5. HTTP 的前世今生:一次性搞懂 HTTP、HTTPS、SPDY、HTTP2.0

    作为互联网通信协议的一员老将,HTTP 协议走到今天已经经历了三次版本的变动,现在最新的版本是 HTTP2.0,相信大家早已耳熟能详.今天就给大家好好介绍一下 HTTP 的前世今生. HTTP/0.9 ...

  6. 深圳Java学习:小白速懂Https协议

    深圳Java学习:小白速懂Https协议 一.Https简介 Http:超文本传输协议 可以在Inet网中,进行数据的传输,文本.音频.视频.图片.资源等都可以进行传输 Https:Http+SSL, ...

  7. 一次性搞懂 HTTP、HTTPS、SPDY、HTTP2

    本篇文章给大家带来的内容是关于一次性搞懂 HTTP.HTTPS.SPDY.HTTP2,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 作为互联网通信协议的一员老将,HTTP 协议走到今 ...

  8. HTTPS 终于搞懂了 !

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...

  9. 万字长文,一文搞懂TCP/IP和HTTP、HTTPS

    来自:非科班的科班 TCP/IP概念 TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现 ...

最新文章

  1. WAS集群系列(2):数据库连接低级错误——网络连接问题
  2. thinkphp 框架自动加载原理_ThinkPHP5分析Part 1 基本框架流程
  3. 以下可以采用python语言保留字的是-以下哪个选项不是Python语言的保留字?_学小易找答案...
  4. 软件架构设计 导言
  5. 从硬件到框架,30+巨头参与的AI基准竞争结果公布(第一回合)
  6. 怎么把本地的文件传给服务器,怎么把本地文件传给云服务器
  7. 数据分析(排序,数据特征、平均数、方差等,累计统计,相关分析)
  8. SAP 采购订单价格确定过程
  9. Python 3.10刚发布,这5点非常值得学习!
  10. 多个数字数组_七个问题帮助初学者深入理解Java数组
  11. 开启 JM 的 trace 功能
  12. spring-security-学习笔记-03-spring-security快速上手
  13. 学习 MySQL中导入 导出CSV
  14. 轻松实现web高可用!(keepalived实战讲解)
  15. 数据报拥塞控制协议:DCCP(Datagram Congestion Control Protocol)
  16. newifimini出厂固件_新路由newifi固件
  17. hdu4939思维DP
  18. 【FPGA的小娱乐】tft显示屏生成信号辅助测试阵列
  19. 近似算法之旅行商问题
  20. crt链接linux后不能输入退格,SecureCRT 退格键等不好用

热门文章

  1. 海量数据的KNN分类、Kmeans聚类
  2. FreeSwitch配置ODBC
  3. 文件比较-合并工具粗略比较[zz]
  4. 【JAVA转C】JAVA转C的心得以及笔记
  5. WCF医院管理系统技术解析(五)体检登记(四)
  6. 使用Git命令将本地文件推送至远程仓库
  7. 恶意代码检测技术——签名、启发式、行为式
  8. mysql datediff函数怎么用_SQL中datediff函数怎么用?(代码详解)
  9. 爬虫:12306模拟登陆
  10. 寄存器数据问题反馈集锦--W5200/W5300相关