HTTPS加密那点事--轻松秒懂HTTPS非对称加密
本文转载自微信公众号(苦逼的码农),原文地址:
https://mp.weixin.qq.com/s/j-ss95ItMnWsZHLpUGBMkQ
用漫画的形式解释技术问题是不是有眼前一亮的感觉呢?以后自己的文章也会尝试加一些漫画的元素。
背景
不知道从哪天开始,一禅也陷入了编程这条道路.....
对称加密
在每次发送真实数据之前,服务器先生成一把密钥,然后先把密钥传输给客户端。之后服务器给客户端发送真实数据的时候,会用这把密钥对数据进行加密,客户端收到加密数据之后,用刚才收到的密钥进行解密。如图:
当然,如果客户端要给服务器发送数据,也是采用这把密钥来加密,这里为了方便,我采用单方向传输的形式。
那万一密钥在传输的过程中被别人截取了怎么吧?
例如:
假如服务器用明文的方式传输密钥给客户端,然后密钥被中间人给捕获了,那么在之后服务器和客户端的加密传输过程中,中间人也可以用他捕获的密钥进行解密。这样的话,加密的数据在中间人看来和明文没啥两样。
非对称加密
这种方法就是,让客户端和服务器都拥有两把钥匙,一把钥匙是公开的(全世界知道都没关系),我们称之为公钥;另一把钥匙则是保密的(只有自己本人才知道),我们称之为私钥。这且,用公钥加密的数据,只有对应的私钥才能解密;用私钥加密的数据,只有对应的公钥才能解密。
这样,服务器在给客户端传输数据的过程中,可以用客户端明文给他的公钥进行加密,然后客户端收到后,再用自己的私钥进行解密。客户端给服务器发送数据的时候也一样采取这样的方式。这样就能保持数据的安全传输了。画个图理解一下:
处理方式就是结合 对称加密+非对称加密这两种方式,我们可以用非对称加密的方式来传输对称加密过程中的密钥,之后我们就可以采取对称加密的方式来传输数据了。具体是这样子的:
服务器用明文的方式给客户端发送自己的公钥,客户端收到公钥之后,会生成一把密钥(对称加密用的),然后用服务器的公钥对这把密钥进行加密,之后再把密钥传输给服务器,服务器收到之后进行解密,最后服务器就可以安全着得到这把密钥了,而客户端也有同样一把密钥,他们就可以进行对称加密了。
例如:
服务器以明文的方式给客户端传输公钥的时候,中间人截取了这把属于服务器的公钥,并且把中间人自己的公钥冒充服务器的公钥传输给了客户端。
之后客户端就会用中间人的公钥来加密自己生成的密钥。然后把被加密的密钥传输给服务器,这个时候中间人又把密钥给截取了,中间人用自己的私钥对这把被加密的密钥进行解密,解密后中间人就可以获得这把密钥了。
最后中间人再对这把密钥用刚才服务器的公钥进行加密,再发给服务器。如图:
毫无疑问,在这个过程中,中间人获取了对称加密中的密钥,在之后服务器和客户端的对称加密传输中,这些加密的数据对中间人来说,和明文没啥区别。
数字证书登场
在刚才的讲解中,我们知道,之所以非对称加密会不安全,是因为客户端不知道这把公钥是否是服务器的,因此,我们需要找到一种策略来证明这把公钥就是服务器的,而不是别人冒充的。
解决这个问题的方式就是使用数字证书,具体是这样的:
我们需要找到一个拥有公信力、大家都认可的认证中心(CA)。
服务器在给客户端传输公钥的过程中,会把公钥以及服务器的个人信息通过Hash算法生成信息摘要。如图
为了防止信息摘要被人调换,服务器还会用CA提供的私钥对信息摘要进行加密来形成数字签名。如图:
并且,最后还会把原来没Hash算法之前的个人信息以及公钥 和 数字签名合并在一起,形成数字证书。如图
当客户端拿到这份数字证书之后,就会用CA提供的公钥来对数字证书里面的数字签名进行解密来得到信息摘要,然后对数字证书里服务器的公钥以及个人信息进行Hash得到另外一份信息摘要。最后把两份信息摘要进行对比,如果一样,则证明这个人是服务器,否则就不是。如图:
这样,就可以保证服务器的公钥安全着交给客户端了。
其实,(有些)服务器一开始就向认证中心申请了这些证书了(有没有看过没有证书的网站在地址栏会被标出警告?),而客户端是,也会内置这些证书。如图:
当客户端收到服务器传输过来的数据数字证书时,就会在内置的证书列表里,查看是否有解开该数字证书的公钥,如果有则...,如果没有则....
希望通过这种漫文的方式,能够让你更加轻松的读懂某些知识。
转载于:https://www.cnblogs.com/xywq/p/10520179.html
HTTPS加密那点事--轻松秒懂HTTPS非对称加密相关推荐
- http协议与https协议+UDP协议和TCP协议+WebSocket协议下服务端主动去发送信息+对称加密与非对称加密+get和post请求方式区别详解+浏览器内核以及jsj解析引擎
TCP和UDP协议是TCP/IP协议的核心. 在TCP/IP网络体系结构中,TCP(传输控制协议,Transport Control Protocol).UDP(用户数据报协议,User Data P ...
- HTTPS加密原理,搞懂什么是对称加密、非对称加密、证书、数字签名
众所周知,http协议是一种未加密的协议,我们未加密的数据,在传输的过程中会经过一个又一个的物理节点,如果被人通过抓包的方式拿到了我们的数据,将会给我们造成无法估量的损失. 为了解决解决这个问题,ht ...
- 【上】安全HTTPS-全面详解对称加密,非对称加密,数字签名,数字证书和HTTPS
此文章转载来源于http://blog.csdn.net/tenfyguo/article/details/40922813点击打开链接 一,对称加密 所谓对称加密,就是它们在编码时使用的密钥e和解码 ...
- HTTPS之SSL处理过程,对此加密和非对称加密
https://www.cnblogs.com/xiohao/p/9054355.html 一,对称加密 所谓对称加密,就是它们在编码时使用的密钥e和解码时一样d(e=d),我们就将其统称为密钥k. ...
- 对称加密、非对称加密、RSA、消息摘要、数字签名、数字证书与 HTTPS 简介
文章目录 1.加密算法简介 1.1 对称加密(Symmetric Key Algorithms) 1.2 非对称加密(Asymmetric Key Algorithms) 1.3 非对称加密 RSA ...
- (二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!
引言 在上篇文章中,已经讲明了当下计算机网络的基础知识,其中对网络体系结构.分层模型.TCP/IP协议簇.....等多方面内容进行了阐述,而在本章会分析到网络知识中另外两个大名鼎鼎的协议:HTTP/H ...
- 安全HTTPS-全面详解对称加密,非对称加密,数字签名,数字证书和HTTPS
一,对称加密 所谓对称加密,就是它们在编码时使用的密钥e和解码时一样d(e=d),我们就将其统称为密钥k. 对称加解密的过程如下: 发送端和接收端首先要共享相同的密钥k(即通信前双方都需要知道对应的密 ...
- 细数非对称加密与对称加密的区别
2019独角兽企业重金招聘Python工程师标准>>> 有两种加密方法常常在SSL生态系统中被提及--非对称加密与对称加密. SSL握手期间的非对称加密 当你浏览一个使用SSL证书的 ...
- [转载] 对称加密与非对称加密
标签 PostgreSQL , 对称加密 , 非对称加密 , Symmetric , ASymmetric , public , private , pgcrypto , 区块链 背景 转载: htt ...
最新文章
- 通过rsync+inotify实现数据的实时备份
- mysql数据库 web asp.net,使用基于asp.net web的应用程序的mysql数据库
- PHP JSON_ENCODE 不转义中文汉字的方法
- 困扰程序员的30种软件开发问题,你是否时曾相识?
- Django框架(20.Django的视图函数的request参数以及QueryDict对象)
- 优动漫PAINT-草地教程
- C#Socket文件传输(发送与接收代码)
- 如何测定拼色染液中,各染料在不同染色时间时,染液中残留染料量及织物上吸附上染的染料量?
- vlan 优科r500_ruckus 常用配置方法
- Unity中设置Transform的forward/up/right旋转异常问题
- 1.2、获取、创建 ApplicationContextInitializer
- CoolFire系列讲座 第3讲:如何连接ISP并且对其解码
- 重点人员动态管控系统开发,公安情报研判分析平台建设
- 如何让你的程序员不要厌倦工作?
- 该网站安全证书有问题 宝塔面板配置ssl中遇到的“坑”
- Ping IPv6在线测试检测 testipv6 加速镜像
- 积分商城该如何帮助商家盈利
- MYSQL UNION 同列类型不同时的处理方法
- 信息系统项目管理师(2022年)—— 重点内容:项目质量管理(8)
- 无验证码不扫码拼多多微信批量登陆思路
热门文章
- centos 6.5 搭建lnmp环境
- 使用HMSegmentedControl实现分段控件
- JQuery中serialize()、serializeArray()和param()方法
- js获取网页的各种高度
- 设计模式学习(六):重构与模式,推荐书籍(完)
- java中的抽象类和抽象方法
- 【跃迁之路】【636天】程序员高效学习方法论探索系列(实验阶段393-2018.11.09)...
- python字符串27种常见的方法
- BugkuCTF web基础$_GET
- P1726 上白泽慧音