【网络】HTTPS 怎么保证数据传输的安全性
背景
大家都知道,在客户端与服务器数据传输的过程中,HTTP协议的传输是不安全的,也就是一般情况下HTTP是明文传输的。但HTTPS协议的数据传输是安全的,也就是说HTTPS数据的传输是经过加密的。
在客户端与服务器这两个完全没有见过面的陌生人交流中,HTTPS是如何保证数据传输的安全性的呢?下面我们来一步步了解HTTPS是如何加密才得以保证数据传输的安全性的?
我们先把客户端称为小客,服务器称为小服。然后一步步探索在小客与小服的交流中(就是一方请求一方响应),HTTPS是如何保证他们的交流不会被中间人窃听的。
一、对称加密
假如现在小客与小服要进行一次私密的对话,他们不希望这次对话内容被其他外人知道。可是,我们平时的数据传输过程中又是明文传输的,万一被某个黑客把他们的对话内容给窃取了,那就难受了。
为了解决这个问题,小服这家伙想到了一个方法来加密数据,让黑客看不到具体的内容。该方法是这样子的:
在每次数据传输之前,小服会先传输给小客一把密钥,然后小服在之后给小客发消息的过程中,会用这把密钥对这些消息进行加密。小客在收到这些消息后,会用之前小服给的那把密钥对这些消息进行解密,这样,小客就能得到密文里面真正的数据了。如果小客要给小服发消息,也同样用这把密钥来对消息进行加密,小服收到后也用这把密钥进行解密。
这样,就保证了数据传输的安全性。如图所示:
这种方法称之为对称加密,加密和解密都用同一把密钥。
这时,小服想着自己的策咯,还是挺得意的。但这个策略安全的前提是,小客拥有小服的那把密钥。可问题是,小服是以明文的方式把这把密钥传输给小客的,如果黑客截取了这把密钥,小服与小客就算是加密了内容,在截取了密钥的黑客老哥眼里,这和明文没啥区别。
二、非对称加密
小服还是挺聪明的,意识到了密钥会被截取这个问题,他又想到了另外一种方法:用非对称加密的方法来加密数据。方法如下:
小服和小客都拥有两把钥匙,一把钥匙是公开的(全世界都知道也没关系),称之为公钥;而另一把钥匙是保密(也就是只有自己才知道),称之为私钥。并且,用公钥加密的数据,只有对应的私钥才能解密;用私钥加密的数据,只有对应的公钥才能解密。
所以在传输数据的过程中,小服在给小客传输数据的过程中,会用小客给他的公钥进行加密,然后小客收到后,再用自己的私钥进行解密。小客给小服发消息的时候,也一样会用小服给他的公钥进行加密,然后小服再用自己的私钥进行解密。
这样,数据就能安全到达双方。如图:
想着这么复杂的策略都能想出来,小服可是得意的不能再得意了……还没等小服得意多久,小客就给它泼了一波冷水。
小客严肃着说:其实,你的这种方法也不是那么安全啊,还是存在被黑客截取的危险啊。例如:
你在给我传输公钥的过程中,如果黑客截取了你的公钥,并且拿着自己的公钥来冒充你的公钥来发给我。我收到公钥之后,会用公钥进行加密传输(这时用的公钥实际上是黑客的公钥)。黑客截取了加密的消息之后,可以用他自己的私钥来进行解密来获取消息内容。然后再用你(小服)的公钥来对消息进行加密,之后再发给你(小服)。 这样子,我们的对话内容还是被黑客给截取了(倒过来小客给小服传输公钥的时候也一样)。
…这么精妙的想法居然也不行,小服这波,满脸无神。
这里插讲下,其实在传输数据的过程中,在速度上用对称加密的方法会比非对称加密的方法快很多。所以在传输数据的时候,一般不单单只用非对称加密这种方法(我们先假设非对称密码这种方法很安全),而是会用非对称加密 + 对称加密这两种结合的方法。基于这个,我们可以用非对称加密方法来安全着传输密钥,之后再用对称加密的方法来传输消息内容(当然,我这里假定了非对称加密传输是安全的,下面会讲如何使之安全)。
三、数字证书
我们回头想一下,是什么原因导致非对称加密这种方法的不安全性呢?它和对称加密方法的不安全性不同。非对称加密之所以不安全,是因为小客收到了公钥之后,无法确定这把公钥是否真的属于小服。
也就是说,我们需要找到一种策略来证明这把公钥就是小服的,而不是别人冒充的。
为了解决这个问题,小服和小客绞尽脑汁想出了一种终极策略:数字证书——我们需要找到一个拥有公信力、大家都认可的认证中心(CA)。小服在给小客发公钥的过程中,会把公钥以及小服的个人信息通过Hash算法生成消息摘要。如图:
为了防止摘要被人调换,小服还会用CA提供的私钥对消息摘要进行加密来形成数字签名。如图:
并且,最后还会把原来没Hash算法之前的信息和数字签名合并在一起,形成数字证书。如图:
当小客拿到这份数字证书之后,就会用CA提供的公钥来对数字证书里面的数字签名进行解密得到消息摘要,然后对数字证书里面小服的公钥和个人信息进行Hash得到另一份消息摘要,然后把两份消息摘要进行对比,如果一样,则证明这些东西确实是小服的,否则就不是。如图:
这时可能有人会有疑问,CA的公钥是怎么拿给小客的呢?小服又怎么有CA的私钥呢?
其实,(有些)服务器在一开始就向认证中心申请了这些证书,而客户端里,也会内置这些证书。如图(此图来元阮一峰的网络日志):
当客户端收到服务器返回来的数据时,就会在内置的证书列表里,查看是否有有解开该数字证书的公钥。
【网络】HTTPS 怎么保证数据传输的安全性相关推荐
- 一文看懂https如何保证数据传输的安全性的
原文地址: https://www.cnblogs.com/kubidemanong/p/9390021.html 大家都知道,在客户端与服务器数据传输的过程中,http协议的传输是不安全的,也就是一 ...
- 为什么 HTTPS 比 HTTP 更安全?HTTPS 如何保证数据传输安全性
大家好,我是蛋蛋. HTTP 和 HTTPS 在许多网站都有用到,但是现在都是极力倡导使用 HTTPS ,究其原因就是 HTTP 它不是安全的,在数据传输过程中会遭到黑客窃取,本篇文章会先讲解 HTT ...
- 网络中数据如何保证数据的安全性?
在当今网络的时代中,到底是如何保证数据传输的安全的呢?下面在原理上来阐述实现过程. 一.安全标准 网络信息安全标准由美国国家标准与技术研究院(National Institute of Standar ...
- 网络夺命连环问1--说一下HTTPS咋保证通信安全的
目录 说一下HTTPS咋保证通信安全的? 谈谈对称加密与非对称加密的区别 谈谈机密性怎么实现的? 谈谈完整性怎么实现的? 怎么实现身份认证和不可否认呢? 公钥的信任问题怎么解决?怎么判断公钥真假? 总 ...
- 如何保证MongoDB的安全性?
2019独角兽企业重金招聘Python工程师标准>>> 上周写了个简短的新闻<MongoDB裸奔,2亿国人求职简历泄漏!>: 根据安全站点HackenProof的报告,由 ...
- 如何保证MongoDB的安全性? 1
上周写了个简短的新闻<MongoDB裸奔,2亿国人求职简历泄漏!>: 根据安全站点HackenProof的报告,由于MongoDB数据库没有采取任何安全保护措施,导致共计202,730,4 ...
- Https如何保证通信安全
本文主要带着以下几个问题进行探讨: 1.什么是Https? 2.Https和Http有什么区别? 3.Https是如何保证通信安全的,它解决了哪些问题? 1.离不开的Https基础理论 HTTPS是以 ...
- java 网络序_Java使用网络字节序进行数据传输
Java使用网络字节序进行数据传输 一.消息格式 采用udp协议,协议数据有 长度.设备名称.命令编号.消息体4个字段组成 字段 长度 设备名称 命令编号 消息体 长度 4字节 2字节 1字节 变长 ...
- 电表远程抄表系统如何保证数据传输的准确性
电表远程抄表系统如何保证数据传输的准确性 电表远程抄表系统如何保证数据传输的准确性?因为很多用户在使用电表远程抄表系统总是 认为数据抄收的不正确,特别是担心当用电数据抄错的时候,影响自己的利益.(这里 ...
最新文章
- 将你的Apache速度提高十倍的经验分享
- mysql数据库主从配置
- oracle 11g 11.2.0.1 设置HuagePage导致TRC 变大 变多
- 工具类—KeyValuePair
- SX1280抗WIFI强干扰电磁环境能力解析
- DeepFM调参总结
- 经典面试题(11):关于变量提升,以下代码将输出什么?
- java第一章_java 第一章
- hdu1385 最短路字典序
- 阿里云马涛:云原生时代的开源操作系统长什么样
- 239.滑动窗口的最大值
- ASP模式“救星降临”?(转)
- Apache Commons Poo GenericObjectPool 避免泄漏
- gird和flex布局
- 《陰陽師·付喪神卷·瓜仙人》原作:梦枕貘
- java算出两个时间差(LocalDateTime)
- 红楼梦航空航线数据分析
- 华为机试--简单题(一)
- 主流手机开发工作分解
- 相机光学(二十)——三原色与白平衡
热门文章
- Windows上基于快捷方式的Putty免密码登陆
- BZOJ 3221: [Codechef FEB13] Obserbing the tree树上询问( 可持久化线段树 + 树链剖分 )
- Javascript节点的访问
- java一次性查询几十万,几百万数据解决办法
- MailMail正式发布!注册码免费发放活动开启!(已结束~~不要再回复咧~)
- 软件测试学习指南(更新中)
- 软件设计师17-网络基础知识
- Meinheld 和 Gevent_XYM
- 有没有想过,你眼中的SQL进阶,别人看来连入门都不是?
- 设置手机项目首选参数