一文看懂https如何保证数据传输的安全性的【转载、收藏】
一文看懂https如何保证数据传输的安全性的
一文看懂https如何保证数据传输的安全性的
大家都知道,在客户端与服务器数据传输的过程中,http协议的传输是不安全的,也就是一般情况下http是明文传输的。但https协议的数据传输是安全的,也就是说https数据的传输是经过加密。
在客户端与服务器这两个完全没有见过面的陌生人交流中,https是如何保证数据传输的安全性的呢?
下面我将带大家一步步了解https是如何加密才得以保证数据传输的安全性的。我们先把客户端称为小客,服务器称为小服。然后一步步探索在小客与小服的交流中(就是一方请求一方响应),https是如何保证他们的交流不会被中间人窃听的。
1. 对称加密
假如现在小客与小服要进行一次私密的对话,他们不希望这次对话内容被其他外人知道。可是,我们平时的数据传输过程中又是明文传输的,万一被某个黑客把他们的对话内容给窃取了,那就难受了。
为了解决这个问题,小服这家伙想到了一个方法来加密数据,让黑客看不到具体的内容。该方法是这样子的:
在每次数据传输之前,小服会先传输小客一把密钥,然后小服在之后给小客发消息的过程中,会用这把密钥对这些消息进行加密。小客在收到这些消息后,会用之前小服给的那把密钥对这些消息进行解密,这样,小客就能得到密文里面真正的数据了。如果小客要给小服发消息,也同样用这把密钥来对消息进行加密,小服收到后也用这把密钥进行解密。 这样,就保证了数据传输的安全性。如图所示:
这时,小服想着自己的策咯,还是挺得意的。
可是,这时候问题来了。这个策略安全的前提是,小客拥有小服的那把密钥。可问题是,小服是以明文的方式把这把密钥传输给小客的,这个时候,如果黑客截取了这把密钥,那就难受了。小服与小客就算是加密了内容,在截取了密钥的黑客老哥眼里,这和明文没啥区别。
2. 非对称加密
小服还是挺聪明的,得意了一会之后,小服意识到了密钥会被截取这个问题。倔强的小服又想到了另外一种方法:用非对称加密的方法来加密数据。该方法是这样的:
小服和小客都拥有两把钥匙,一把钥匙的公开的(全世界都知道也没关系),称之为公钥;而另一把钥匙是保密(也就是只有自己才知道),称之为私钥。并且,用公钥加密的数据,只有对应的私钥才能解密;用私钥加密的数据,只有对应的公钥才能解密。
所以在传输数据的过程中,小服在给小客传输数据的过程中,会用小客给他的公钥进行加密,然后小客收到后,再用自己的私钥进行解密。小客给小服发消息的时候,也一样会用小服给他的公钥进行加密,然后小服再用自己的私钥进行解密。 这样,数据就能安全着到达双方。如图:
想着这么复杂的策略都能想出来,小服可是得意的不能在得意了.....
看着那么得意的小服,小客这时心情就不得好了。还没等小服得意多久,小客就给它泼了一波冷水了。
小客严肃着说:其实,你的这种方法也不是那么的安全啊。还是存在被黑客截取的危险啊。例如:
你在给我传输公钥的过程中,如果黑客截取了你的公钥,并且拿着自己的公钥来冒充你的公钥来发给我。我收到公钥之后,会用公钥进行加密传输(这时用的公钥实际上是黑客的公钥)。黑客截取了加密的消息之后,可以用他自己的私钥来进行解密来获取消息内容。然后在用你(小服)的公钥来对消息进行加密,之后再发给你(小服)。 这样子,我们的对话内容还是被黑客给截取了啊。(倒过来小客给小服传输公钥的时候也一样)。
我靠,这么精妙的想法居然也不行,小服这波,满脸无神。
## 插讲下 ##
其实在传输数据的过程中,在速度上用对称加密的方法会比非对称加密的方法快很多。所以在传输数据的时候,一般不单单只用非对称加密这种方法(我们先假设非对称密码这种方法很安全),而是会用非对称加密 + 对称加密这两种结合的方法。 你想啊,对于对称加密这种方法来说,之所以不安全是因为密钥在传输的过程中,被别人知道了。基于这个,我们可以用非对称加密方法来安全着传输密钥,之后在用对称加密的方法来传输消息内容(当然,我这里假定了非对称加密传输是安全的,下面会讲如何使之安全)。
数字证书
我们回头想一下,是什么原因导致非对称加密这种方法的不安全性呢?它和对称加密方法的不安全性不同。非对称加密之所以不安全,是因为小客收到了公钥之后,无法确定这把公钥是否真的是小服。
也就是说,我们需要找到一种策略来证明这把公钥就是小服的,而不是别人冒充的。
为了解决这个问题,小服和小客通过绞尽脑汁想出了一种终极策略:数字证书:
我们需要找到一个拥有公信力、大家都认可的认证中心(CA)
小服再给小客发公钥的过程中,会把公钥以及小服的个人信息通过Hash算法生成消息摘要。如图:
为了防止摘要被人调换,小服还会用CA提供的私钥对消息摘要进行加密来形成数字签名。如图:
并且,最后还会把原来没Hash算法之前的信息和数字签名合并在一起,形成数字证书。如图:
当小客拿到这份数字证书之后,就会用CA提供的公钥来对数字证书里面的数字签名进行解密得到消息摘要,然后对数字证书里面小服的公钥和个人信息进行Hash得到另一份消息摘要,然后把两份消息摘要进行对比,如果一样,则证明这些东西确实是小服的,否则就不是。如图:
这时可能有人会有疑问,CA的公钥是怎么拿给小客的呢?小服又怎么有CA的私钥呢?其实,(有些)服务器在一开始就向认证中心申请了这些证书,而客户端里,也会内置这些证书。如图(此图来元阮一峰的网络日志)
当客户端收到服务器返回来的数据时,就会在内置的证书列表里,查看是否有有解开该数字证书的公钥,如果有则.....否则.....
讲到这里,就大概结束了。希望对你有所帮助勒。如果有哪里写得不对的地方,欢迎大家指出。
一文看懂https如何保证数据传输的安全性的【转载、收藏】的更多相关文章
- 一文看懂https如何保证数据传输的安全性的
通过漫画的形式由浅入深带你读懂htts是如何保证一台主机把数据安全发给另一台主机的 对称加密 一禅:在每次发送真实数据之前,服务器先生成一把密钥,然后先把密钥传输给客户端.之后服务器给客户端发送真实数 ...
- HTTPS 怎样保证数据传输的安全性
大家都知道,在客户端与服务器数据传输的过程中,HTTP协议的传输是不安全的,也就是一般情况下HTTP是明文传输的.但HTTPS协议的数据传输是安全的,也就是说HTTPS数据的传输是经过加密的. 在客户 ...
- 【转】HTTPS 如何保证数据传输的安全性?
大家都知道,在客户端与服务器数据传输的过程中,HTTP协议的传输是不安全的,也就是一般情况下HTTP是明文传输的.但HTTPS协议的数据传输是安全的,也就是说HTTPS数据的传输是经过加密的. 在客户 ...
- HTTPS 如何保证数据传输的安全性
为什么需要 HTTPS? 我们知道 HTTP 是一个纯文本传输协议,对传输过程中的数据包不进行加密,是明文传输,那这样的话对于介于在发送端和接收端之间的任何 一个节点都能知道传输的内容,这些节点可能是 ...
- 一文看懂HTTPS的核心知识
1.HTTPS历史 由于HTTP的消息传输的安全隐患,于是网景公司在1994年设计了SSL(Secure Sockets Layer,安全套接字层)协议,目的是保障网上交易安全,从而就诞生了HTTPS ...
- 一文看懂HTTPS、证书机构(CA)、证书、数字签名、私钥、公钥(转)
说到https,我们就不得不说tls/ssl,那说到tls/ssl,我们就不得不说证书机构(CA).证书.数字签名.私钥.公钥.对称加密.非对称加密.这些到底有什么用呢,正所谓存在即合理,这篇文章我就 ...
- HTTPS如何保证数据传输的安全性 -- 结合加密
什么是HTTPS: HTTP就是我们平时浏览网页时候使用的一种协议 HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全.为了保证这些隐私数据能加密传输,于是网 ...
- 一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系
我们知道,不同肤色的人外貌差别很大,而双胞胎的辨识很难.有意思的是Web服务器/Web容器/Web应用程序服务器/反向代理有点像四胞胎,在网络上经常一起出现.本文将带读者对这四个相似概念如何区分. 1 ...
- [转帖]一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系
一文看懂web服务器.应用服务器.web容器.反向代理服务器区别与联系 https://www.cnblogs.com/vipyoumay/p/7455431.html 我们知道,不同肤色的人外貌差别 ...
随机推荐
- day30
作业 #__author : 'liuyang' #date : 2019/4/11 0011 下午 12:36 # 这两天 1.软件开发规范 不写 没法做新作业 #2. 认证+上传 +下载 + 校验 ...
- Selenium webdriver操作日历控件
一般的日期控件都是input标签下弹出来的,如果使用webdriver 去设置日期, 1. 定位到该input 2. 使用sendKeys 方法 比如:使用定位: driver.findElement ...
- spring深入学习(五)-----spring dao、事务管理
访问数据库基本是所有java web项目必备的,不论是oracle.mysql,或者是nosql,肯定需要和数据库打交道.一开始学java的时候,肯定是以jdbc为基础,如下: private sta ...
- 1.1初识python
1.目前大量的公司都在使用python,功能强大很是牛逼! 2.运维要懂开发,做个全栈的工程师贼牛逼 3.python是一个解释型语言,编译型和解释型的区别是: ①编译型语言由编译器(Compiler ...
- 【repost】H5总结
1.新增的语义化标签: <nav>: 导航 <header>: 页眉 <footer>: 页脚 <section>:区块 <article> ...
- FPGA的发展史及FPGA 的基础架构
通过了解早期FPGA的发展,理解FPGA究竟是干什么的,FPGA到底在电子设计领域起到了什么样的作用,下面是一张早期的设计过程 早期的设计流程过程中,只有当硬件完成了才能够得到功能的验证,随着集成电路 ...
- 团队作业第五周(HCL盐酸队)
一.Alpha版本测试报告 1.测试计划 测试项目 上下移动 左右移动 发射子弹 与敌方坦克进行攻击 2.测试过程 测试截图 错误记录(提交issues到码云团队项目) 3.测试找出的bu ...
- 一行代码实现自定义转场动画--iOS自定义转场动画集
WXSTransition 这款非常不错,力推 这是作者源码简书地址: http://www.jianshu.com/p/fd3154946919 这是作者源码github地址 https://git ...
- Android Studio 配置 androidAnnotations框架详细步骤
第一步:打开app的build.gradle文件 第二步:添加下面红色的部分 apply plugin: 'com.android.application' android { compileSdkV ...
- linux下静态链接库和动态链接库
关于链接库的知识,网上太多资料了,但是并不代表我很熟悉.今天遇到了 一个问题,就是由于静态链接库和ubuntu系统不兼容导致的,虽然花了点时间才搞定 但是,其中暴露的问题也不少. 没有区分好静态链接库 ...