背景

大家都知道,在客户端与服务器数据传输的过程中,HTTP协议的传输是不安全的,也就是一般情况下HTTP是明文传输的。但HTTPS协议的数据传输是安全的,也就是说HTTPS数据的传输是经过加密的。

在客户端与服务器这两个完全没有见过面的陌生人交流中,HTTPS是如何保证数据传输的安全性的呢?下面我们来一步步了解HTTPS是如何加密才得以保证数据传输的安全性的?

我们先把客户端称为小客,服务器称为小服。然后一步步探索在小客与小服的交流中(就是一方请求一方响应),HTTPS是如何保证他们的交流不会被中间人窃听的。

一、对称加密

假如现在小客与小服要进行一次私密的对话,他们不希望这次对话内容被其他外人知道。可是,我们平时的数据传输过程中又是明文传输的,万一被某个黑客把他们的对话内容给窃取了,那就难受了。

为了解决这个问题,小服这家伙想到了一个方法来加密数据,让黑客看不到具体的内容。该方法是这样子的:

在每次数据传输之前,小服会先传输给小客一把密钥,然后小服在之后给小客发消息的过程中,会用这把密钥对这些消息进行加密。小客在收到这些消息后,会用之前小服给的那把密钥对这些消息进行解密,这样,小客就能得到密文里面真正的数据了。如果小客要给小服发消息,也同样用这把密钥来对消息进行加密,小服收到后也用这把密钥进行解密。

这样,就保证了数据传输的安全性。如图所示:

这种方法称之为对称加密,加密和解密都用同一把密钥。

这时,小服想着自己的策咯,还是挺得意的。但这个策略安全的前提是,小客拥有小服的那把密钥。可问题是,小服是以明文的方式把这把密钥传输给小客的,如果黑客截取了这把密钥,小服与小客就算是加密了内容,在截取了密钥的黑客老哥眼里,这和明文没啥区别。

二、非对称加密

小服还是挺聪明的,意识到了密钥会被截取这个问题,他又想到了另外一种方法:用非对称加密的方法来加密数据。方法如下:

小服和小客都拥有两把钥匙,一把钥匙是公开的(全世界都知道也没关系),称之为公钥;而另一把钥匙是保密(也就是只有自己才知道),称之为私钥。并且,用公钥加密的数据,只有对应的私钥才能解密;用私钥加密的数据,只有对应的公钥才能解密。

所以在传输数据的过程中,小服在给小客传输数据的过程中,会用小客给他的公钥进行加密,然后小客收到后,再用自己的私钥进行解密。小客给小服发消息的时候,也一样会用小服给他的公钥进行加密,然后小服再用自己的私钥进行解密。

这样,数据就能安全到达双方。如图:

想着这么复杂的策略都能想出来,小服可是得意的不能再得意了……还没等小服得意多久,小客就给它泼了一波冷水。

小客严肃着说:其实,你的这种方法也不是那么安全啊,还是存在被黑客截取的危险啊。例如:

你在给我传输公钥的过程中,如果黑客截取了你的公钥,并且拿着自己的公钥来冒充你的公钥来发给我。我收到公钥之后,会用公钥进行加密传输(这时用的公钥实际上是黑客的公钥)。黑客截取了加密的消息之后,可以用他自己的私钥来进行解密来获取消息内容。然后再用你(小服)的公钥来对消息进行加密,之后再发给你(小服)。 这样子,我们的对话内容还是被黑客给截取了(倒过来小客给小服传输公钥的时候也一样)。

…这么精妙的想法居然也不行,小服这波,满脸无神。

这里插讲下,其实在传输数据的过程中,在速度上用对称加密的方法会比非对称加密的方法快很多。所以在传输数据的时候,一般不单单只用非对称加密这种方法(我们先假设非对称密码这种方法很安全),而是会用非对称加密 + 对称加密这两种结合的方法。基于这个,我们可以用非对称加密方法来安全着传输密钥,之后再用对称加密的方法来传输消息内容(当然,我这里假定了非对称加密传输是安全的,下面会讲如何使之安全)。

三、数字证书

我们回头想一下,是什么原因导致非对称加密这种方法的不安全性呢?它和对称加密方法的不安全性不同。非对称加密之所以不安全,是因为小客收到了公钥之后,无法确定这把公钥是否真的属于小服。

也就是说,我们需要找到一种策略来证明这把公钥就是小服的,而不是别人冒充的。

为了解决这个问题,小服和小客绞尽脑汁想出了一种终极策略:数字证书——我们需要找到一个拥有公信力、大家都认可的认证中心(CA)。小服在给小客发公钥的过程中,会把公钥以及小服的个人信息通过Hash算法生成消息摘要。如图:

为了防止摘要被人调换,小服还会用CA提供的私钥对消息摘要进行加密来形成数字签名。如图:

并且,最后还会把原来没Hash算法之前的信息和数字签名合并在一起,形成数字证书。如图:

当小客拿到这份数字证书之后,就会用CA提供的公钥来对数字证书里面的数字签名进行解密得到消息摘要,然后对数字证书里面小服的公钥和个人信息进行Hash得到另一份消息摘要,然后把两份消息摘要进行对比,如果一样,则证明这些东西确实是小服的,否则就不是。如图:

这时可能有人会有疑问,CA的公钥是怎么拿给小客的呢?小服又怎么有CA的私钥呢?

其实,(有些)服务器在一开始就向认证中心申请了这些证书,而客户端里,也会内置这些证书。如图(此图来元阮一峰的网络日志):

当客户端收到服务器返回来的数据时,就会在内置的证书列表里,查看是否有有解开该数字证书的公钥。

【网络】HTTPS 怎么保证数据传输的安全性相关推荐

  1. 一文看懂https如何保证数据传输的安全性的

    原文地址: https://www.cnblogs.com/kubidemanong/p/9390021.html 大家都知道,在客户端与服务器数据传输的过程中,http协议的传输是不安全的,也就是一 ...

  2. 为什么 HTTPS 比 HTTP 更安全?HTTPS 如何保证数据传输安全性

    大家好,我是蛋蛋. HTTP 和 HTTPS 在许多网站都有用到,但是现在都是极力倡导使用 HTTPS ,究其原因就是 HTTP 它不是安全的,在数据传输过程中会遭到黑客窃取,本篇文章会先讲解 HTT ...

  3. 网络中数据如何保证数据的安全性?

    在当今网络的时代中,到底是如何保证数据传输的安全的呢?下面在原理上来阐述实现过程. 一.安全标准 网络信息安全标准由美国国家标准与技术研究院(National Institute of Standar ...

  4. 网络夺命连环问1--说一下HTTPS咋保证通信安全的

    目录 说一下HTTPS咋保证通信安全的? 谈谈对称加密与非对称加密的区别 谈谈机密性怎么实现的? 谈谈完整性怎么实现的? 怎么实现身份认证和不可否认呢? 公钥的信任问题怎么解决?怎么判断公钥真假? 总 ...

  5. 如何保证MongoDB的安全性?

    2019独角兽企业重金招聘Python工程师标准>>> 上周写了个简短的新闻<MongoDB裸奔,2亿国人求职简历泄漏!>: 根据安全站点HackenProof的报告,由 ...

  6. 如何保证MongoDB的安全性? 1

    上周写了个简短的新闻<MongoDB裸奔,2亿国人求职简历泄漏!>: 根据安全站点HackenProof的报告,由于MongoDB数据库没有采取任何安全保护措施,导致共计202,730,4 ...

  7. Https如何保证通信安全

    本文主要带着以下几个问题进行探讨: 1.什么是Https? 2.Https和Http有什么区别? 3.Https是如何保证通信安全的,它解决了哪些问题? 1.离不开的Https基础理论 HTTPS是以 ...

  8. java 网络序_Java使用网络字节序进行数据传输

    Java使用网络字节序进行数据传输 一.消息格式 采用udp协议,协议数据有 长度.设备名称.命令编号.消息体4个字段组成 字段 长度 设备名称 命令编号 消息体 长度 4字节 2字节 1字节 变长 ...

  9. 电表远程抄表系统如何保证数据传输的准确性

    电表远程抄表系统如何保证数据传输的准确性 电表远程抄表系统如何保证数据传输的准确性?因为很多用户在使用电表远程抄表系统总是 认为数据抄收的不正确,特别是担心当用电数据抄错的时候,影响自己的利益.(这里 ...

最新文章

  1. 将你的Apache速度提高十倍的经验分享
  2. mysql数据库主从配置
  3. oracle 11g 11.2.0.1 设置HuagePage导致TRC 变大 变多
  4. 工具类—KeyValuePair
  5. SX1280抗WIFI强干扰电磁环境能力解析
  6. DeepFM调参总结
  7. 经典面试题(11):关于变量提升,以下代码将输出什么?
  8. java第一章_java 第一章
  9. hdu1385 最短路字典序
  10. 阿里云马涛:云原生时代的开源操作系统长什么样
  11. 239.滑动窗口的最大值
  12. ASP模式“救星降临”?(转)
  13. Apache Commons Poo GenericObjectPool 避免泄漏
  14. gird和flex布局
  15. 《陰陽師·付喪神卷·瓜仙人》原作:梦枕貘
  16. java算出两个时间差(LocalDateTime)
  17. 红楼梦航空航线数据分析
  18. 华为机试--简单题(一)
  19. 主流手机开发工作分解
  20. 相机光学(二十)——三原色与白平衡

热门文章

  1. Windows上基于快捷方式的Putty免密码登陆
  2. BZOJ 3221: [Codechef FEB13] Obserbing the tree树上询问( 可持久化线段树 + 树链剖分 )
  3. Javascript节点的访问
  4. java一次性查询几十万,几百万数据解决办法
  5. MailMail正式发布!注册码免费发放活动开启!(已结束~~不要再回复咧~)
  6. 软件测试学习指南(更新中)
  7. 软件设计师17-网络基础知识
  8. Meinheld 和 Gevent_XYM
  9. 有没有想过,你眼中的SQL进阶,别人看来连入门都不是?
  10. 设置手机项目首选参数