漫画:什么是 HTTPS 协议?
点击上方“方志朋”,选择“置顶公众号”
技术文章第一时间送达!
本文转载于公众号 程序员小灰
什么是HTTP协议?
HTTP协议全称Hyper Text Transfer Protocol,翻译过来就是超文本传输协议,位于TCP/IP四层模型当中的应用层。
HTTP协议通过请求/响应的方式,在客户端和服务端之间进行通信。
这一切看起来很美好,但是HTTP协议有一个致命的缺点:不够安全。
HTTP协议的信息传输完全以明文方式,不做任何加密,相当于是在网络上“裸奔”。这样会导致什么问题呢?让我们打一个比方:
小灰是客户端,小灰的同事小红是服务端,有一天小灰试图给小红发送请求。
但是,由于传输信息是明文,这个信息有可能被某个中间人恶意截获甚至篡改。这种行为叫做中间人攻击。
如何进行加密呢?
小灰和小红可以事先约定一种对称加密方式,并且约定一个随机生成的密钥。后续的通信中,信息发送方都使用密钥对信息加密,而信息接收方通过同样的密钥对信息解密。
这样做是不是就绝对安全了呢?并不是。
虽然我们在后续的通信中对明文进行了加密,但是第一次约定加密方式和密钥的通信仍然是明文,如果第一次通信就已经被拦截了,那么密钥就会泄露给中间人,中间人仍然可以解密后续所有的通信内容。
这可怎么办呢?别担心,我们可以使用非对称加密,为密钥的传输做一层额外的保护。
非对称加密的一组秘钥对中,包含一个公钥和一个私钥。明文既可以用公钥加密,用私钥解密;也可以用私钥加密,用公钥解密。
在小灰和小红建立通信的时候,小红首先把自己的公钥Key1发给小灰:
收到小红的公钥以后,小灰自己生成一个用于对称加密的密钥Key2,并且用刚才接收的公钥Key1对Key2进行加密(这里有点绕),发送给小红:
小红利用自己非对称加密的私钥,解开了公钥Key1的加密,获得了Key2的内容。从此以后,两人就可以利用Key2进行对称加密的通信了。
在通信过程中,即使中间人在一开始就截获了公钥Key1,由于不知道私钥是什么,也无从解密。
是什么坏主意呢?中间人虽然不知道小红的私钥是什么,但是在截获了小红的公钥Key1之后,却可以偷天换日,自己另外生成一对公钥私钥,把自己的公钥Key3发送给小灰。
小灰不知道公钥被偷偷换过,以为Key3就是小红的公钥。于是按照先前的流程,用Key3加密了自己生成的对称加密密钥Key2,发送给小红。
这一次通信再次被中间人截获,中间人先用自己的私钥解开了Key3的加密,获得Key2,然后再用当初小红发来的Key1重新加密,再发给小红。
这样一来,两个人后续的通信尽管用Key2做了对称加密,但是中间人已经掌握了Key2,所以可以轻松进行解密。
是什么解决方案呢?难道再把公钥进行一次加密吗?这样只会陷入鸡生蛋蛋生鸡,永无止境的困局。
这时候,我们有必要引入第三方,一个权威的证书颁发机构(CA)来解决。
到底什么是证书呢?证书包含如下信息:
为了便于说明,我们这里做了简化,只列出了一些关键信息。至于这些证书信息的用处,我们看看具体的通信流程就能够弄明白了。
流程如下:
1.作为服务端的小红,首先把自己的公钥发给证书颁发机构,向证书颁发机构申请证书。
2.证书颁发机构自己也有一对公钥私钥。机构利用自己的私钥来加密Key1,并且通过服务端网址等信息生成一个证书签名,证书签名同样经过机构的私钥加密。证书制作完成后,机构把证书发送给了服务端小红。
3.当小灰向小红请求通信的时候,小红不再直接返回自己的公钥,而是把自己申请的证书返回给小灰。
4.小灰收到证书以后,要做的第一件事情是验证证书的真伪。需要说明的是,各大浏览器和操作系统已经维护了所有权威证书机构的名称和公钥。所以小灰只需要知道是哪个机构颁布的证书,就可以从本地找到对应的机构公钥,解密出证书签名。
接下来,小灰按照同样的签名规则,自己也生成一个证书签名,如果两个签名一致,说明证书是有效的。
验证成功后,小灰就可以放心地再次利用机构公钥,解密出服务端小红的公钥Key1。
5.像之前一样,小灰生成自己的对称加密密钥Key2,并且用服务端公钥Key1加密Key2,发送给小红。
6.最后,小红用自己的私钥解开加密,得到对称加密密钥Key2。于是两人开始用Key2进行对称加密的通信。
在这样的流程下,我们不妨想一想,中间人是否还具有使坏的空间呢?
注:最新推出的TLS协议,是SSL 3.0协议的升级版,和SSL协议的大体原理是相同的。
-更多文章-
《复联 4》上映,来看看 GitHub 上这几个漫威项目!
彻底理解cookie,session,token
IDEA中用好Lombok,撸码效率至少提升5倍
Java 必须掌握的 20+ 种 Spring 常用注解
为什么一定要前后端分离?
-关注我-
感谢搓一下“在看”
漫画:什么是 HTTPS 协议?相关推荐
- 程序员小灰 什么是HTTPS协议
漫画:什么是 HTTPS 协议?
- loadrunner支持https协议的操作方法-经验总结
问题:用户portal支持https协议,用loadrunner录制登陆脚本时发现未录制到用户名和密码 录制到的脚本如下: login() { lr_think_time(10); web_url(& ...
- https协议原理过程
https协议原理过程 https概念 https是基于安全目的的Http通道,其安全基础由SSL层来保证.最初由netscape公司研发,主要提供了通讯双方的身份认证和加密通信方法.现在广泛应用于互 ...
- HTTP和HTTPS协议的区别
什么是HTTPS: HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息 ...
- 大型网站的 HTTPS 实践(1):HTTPS 协议和原理
转自:http://op.baidu.com/2015/04/https-s01a01/ 1 前言 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS.本文重 ...
- 02.Python网络爬虫第二弹《http和https协议》
一.HTTP协议 1.官方概念: HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文 ...
- iOS ASIHTTPRequest用https协议加密请求
iOS 终端请求服务端数据时,为了保证数据安全,我们一般会使用https协议加密,而对于iOS的网络编程,我们一般会使用开源框架:ASIHTTPRequest,但是如果使用传统的http方式,即使忽略 ...
- Fiddler中安装证书进行https协议的抓取
Fiddler目前默认安装对http协议进行抓取但是对手机以及其他一些是https协议的通讯抓取需要配置. 首先我们要在fiddler中找到菜单栏的Tools > Options,打开" ...
- Https协议/SSL协议
前言 Https协议是以安全为目标的Http通道,也就是Http的升级安全版.主要是在Http下加入了SSL层(现在主流SSL/TLS),SSL是Https协议的安全基础,Https默认端口号443 ...
- curl提示不支持https协议解决方法
curl提示不支持https协议解决方法 参考文章: (1)curl提示不支持https协议解决方法 (2)https://www.cnblogs.com/biaopei/p/8669810.html ...
最新文章
- 解决X64操作系统PL/SQL连接报错问题 make sure you have the 32 bits oracle client installed
- ActiveRecord是啥意思?
- 锁定计算机的mad命令,本次操作由于这台计算机的限制而被取消
- C#:向C++封送结构体数组
- CAN笔记(11) 位时序
- python入门实践19章_求助贴,python编程才能够入门到实践 第19章 19.2.2 代码出错
- python怎么读数据库_Python如何读写SQLite数据库
- Java对Internet为什么这么重要?
- Google推出中文图书搜索简体中文试用版(zz)
- 内核进程回调遍历【记录】
- 最新彩虹DS仿小储云模板源码
- Android编程随机抽奖,js抽奖实现随机抽奖代码效果
- 宝塔面板无法卸载php,宝塔面板如何卸载
- 服务器里面mbr稳定转gpt,Win7系统MBR转GPT分区方法(无损数据MBR转UEFI+GPT)
- C语言中的scanf、getchar、putchar、gets、puts
- 盲盒app源码,可搭建部署二开.模式功能介绍.
- 对华锐风电的一些看法
- 转贴(电脑报):VBA开发实用指南
- 华为大队入职培训记(1)
- 用74HC165读8个按键状态
热门文章
- windows远程桌面如果超出最大连接数, 使用命令行mstsc /console登录即可
- 利用闭包实现多次ajax请求只执行最后一次
- js原型链prototype与__proto__以及new表达式
- 转帖 开源游戏服务器调研
- 【Whalepaper】CV论文研读 - OneNet:Towards End-to-End One-Stage Object Detection
- 如何做中文文本的情感分析?
- LeetCode实战:二叉树的最大深度
- Strategy_Level1
- 工程师文化:BAT 为什么不喊老板
- 石锤!谷歌排名第一的编程语言,死磕这点,程序员都收益