初识HTTPS
初识HTTPS
HTTPS也被叫做“基于TLS的HTTP,基于SSL的HTTP,HTTP安全“,它是一个在Internet上广泛使用的计算机网络安全通信协议。
即HTTPS是HTTP的安全版本,在了解HTTPS为何安全之前,那么我们首先应该要知道HTTP为什么不安全。
HTTP为什么不安全
通过 HTTP 协议传输的信息是明文的。网络包从客户端/浏览器到服务器的这段过程中,需要经过多个网络设备。我们的登录帐号、密码等信息可以轻易被其中任何一个网络设备获取。
如果其中的一个网络设备被黑客控制,除了可以获取我们发送的数据以外,还可以将我们发送的数据进行伪造后再进行发送。
这就是 HTTP 传输所面临的问题之一:中间人攻击,指消息传递的过程中,处在传递路径上的攻击者可以嗅探或者窃听传输数据的内容。
HTTPS加密
HTTPS针对这个问题,采用了“加密”的方式来解决。
使用对称加密算法(AES)
我们最先想到的应该就是对称加密算法了,如果HTTPS使用的是对称加密算法会是怎样的情况呢?
对称加密算法既指加密和解密需要使用的密钥key是一样的。
如果客户端和服务端都有一个相同的密匙key,那么客户端先使用密匙key加密数据之后再发送到服务端,此时中间人获取到的数据是无法解密的。服务端使用key解密后,执行完毕返回同样由该key加密的数据到客户端。
整个过程看起来没有问题,但是忽略了一个点,即密匙key如果是服务端生成的该如何告诉客户端呢?实际上,无论采用什么样的方式告诉客户端,都有可能导致密匙key泄露,一旦密匙泄露,则整个加密的工作都显得没有意义了。
所以实际上HTTPS的加密并不是用的对称加密算法这种方式。
使用非对称加密算法(RSA)
HTTPS使用了另一种聪明的加密算法,非对称加密算法。
非对称加密算法会生成两个密钥(key1 和 key2)。凡是 key1 加密的数据,key1 自身不能解密,需要 key2 才能解密;凡事 key2 加密的数据,key2 自身不能解密,只有 key1 才能解密。
HTTPS实现
下面我们看看HTTPS中是如何使用RSA的:
- 服务端在发送消息之前先用RSA技术生成了一对密钥k1和k2。
- 服务端把k1用明文发送给了客户端,中间人也许会截取,但是没有用,k1加密的数据需要k2才可以破解,而k2在服务端手中。
- k1传到了客户端,客户端会去生成一个接下来准备用于对称加密(AES)的传输密钥key,然后用收到的k1把key加密,传给你。
- 服务端用手上的k2解出key后,此时只有服务端和客户端知道这个对称加密的key。
- 接下来的消息使用对称加密的方式进行即可,即非对称加密解决了之前我们的问题,即如何安全的把密匙key传递出去。
这里也许你会有问题,为什么不直接用非对称加密来加密信息,而是加密 AES 的 key 呢?
因为非对称加密和解密的平均消耗时间比较长,为了节省时间提高效率,我们通常只是用它来交换密钥,而非直接传输数据。
HTTPS证书
我们之前通过加密技术已经解决了消息安全传递的问题了,那么是不是从此就万无一失了呢?答案当然不是。
我们设想一下,如果我们服务端(S)和客户端(C)中间会途经一个黑客服务器,暂且就称为H吧,下面我们看看H如何操作可以破解掉我们的加密防范。
- S生成了k1,使用明文发送给C;
- H接收到k1之后,并没有转发给C,而是先自己生成一个key,使用k1加密后发送给S,即对S来说,H伪装成了C;
- 同时,H生成了新的一个k1,使用明文发送给C,C会把加密后的key告诉H,即对C来说,H伪装成了S;
- 这样一来,实际上H就成为了S和C之间的一个消息转发者了,不旦可以知道S和C之间发送的消息,还可以伪造消息进行发送;
这么看来,我们之前的努力貌似又功亏一篑了。
所以此时我们需要引入一个非常权威的第三方,一个专门用来认证网站合法性的组织,可以叫做 CA(Certificate Authority)。各个网站服务商可以向 CA 申请证书,使得他们在建立安全连接时可以带上 CA 的签名。而 CA 得安全性是由操作系统或者浏览器来认证的。
你的 Windows、Mac、Linux、Chrome、Safari 等会在安装的时候带上一个他们认为安全的 CA 证书列表,只有和你建立安全连接的网站带有这些CA的签名,操作系统和浏览器才会认为这个链接是安全的,否则就有可能遭到中间人攻击。
一旦某个 CA 颁发的证书被用于的非法途径,那么这个 CA 之前颁发过的所有证书都将被视为不安全的,这让所有 CA 在颁发证书时都十分小心,所以 CA 证书在通常情况下是值得信任的。
总结
使 HTTP 后面增加一个S(Security)的技术,正是 对称加密 + 非对称加密 + CA 认证 这三种技术的混合体。当然这个主要是 HTTPS 的基本原理,真正实际中的 HTTPS 的协议是比以上的描述更为复杂一些的,并且其中任何一步稍有闪失,整个流程都将不再安全。
这也是为什么 HTTPS 协议从 SSL 1.0升级到 SSL 3.0,再被 TLS 1.0 现在被 TLS 1.3取代,其背后都是一个个细节上的优化,以防有任何闪失。
TLS 协议相比 SSL 协议增加了传输层的安全保证。
参考链接
初识HTTPS的更多相关文章
- [转帖]Hive学习之路 (一)Hive初识
Hive学习之路 (一)Hive初识 https://www.cnblogs.com/qingyunzong/p/8707885.html 讨论QQ:1586558083 目录 Hive 简介 什么是 ...
- 超哥mysql数据库部分blog整理:
总目录:mysql数据库阶段学习目录 https://www.cnblogs.com/clschao/articles/10065275.html Day1. 1.数据库初识 https://www. ...
- MySQL、Hive以及MySQL Connector/J安装过程
MySQL安装 ①官网下载mysql-server(yum安装) wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch. ...
- [web][nginx] 初识nginx -- 使用nginx搭建https DPI解码测试环境
环境 CentOS 7 X86 文档: https://nginx.org/en/docs/ 安装: [root@dpdk ~]# cat /etc/yum.repos.d/nginx.repo [n ...
- HTTP与HTTPS初识
HTTP HTTP是一个属于应用层的协议,特点是简介.快速 HTTP客户端发起请求,创建端口HTTP服务器在端口监听客户端请求HTTP服务器向客户端返回状态和内容 网络请求,页面渲染 1.域名解析 ...
- 网络爬虫深究-初识HTTP和https常识
网络爬虫专题--HTTP基本原理 URI和URL.URN的关系 超文本 HTTP和HTTPS URI和URL 首先,我们来了解一下URI和URL,URI,即统一资源标志符,URL,即统一资源定位符. ...
- Redis初识、设计思想与一些学习资源推荐
一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...
- MongoDB【第一篇】MongodDB初识
NoSQL介绍 一.NoSQL简介 NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库. 非关系型数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的. 原始的目的是为 ...
- Android图片缓存之初识Glide
前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...
随机推荐
- 洛谷 P1359 租用游艇【dp】(经典)
题目链接:https://www.luogu.org/problemnew/show/P1359 题目描述 长江游艇俱乐部在长江上设置了n 个游艇出租站1,2,…,n.游客可在这些游艇出租站租用游艇, ...
- 使用starUML一步一步画顺序图
顺序图:是UML中能表现出一个过程中各个详细步骤的模型图,过程可以理解为一个功能的执行过程. 下面我们以一个简单的影院管理系统中售票功能为例来一步一步完成顺序图的构建. 建模工具:starUML 版本 ...
- [NOIP2017]逛公园 最短路+拓扑排序+dp
题目描述 给出一张 $n$ 个点 $m$ 条边的有向图,边权为非负整数.求满足路径长度小于等于 $1$ 到 $n$ 最短路 $+k$ 的 $1$ 到 $n$ 的路径条数模 $p$ ,如果有无数条则输出 ...
- 卡特兰数 Catalan 笔记
一.公式 卡特兰数一般公式 令h(0)=1,h(1)=1,catalan数满足递推式.h(n) = h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>= ...
- 我的 Sublime Text 2 笔记
作为aptana死忠粉的我,最近由于工作需要最近开始使用sublime,初次使用,就被其秒开的启动速度,简洁的界面设计,无干扰的信息提示所这幅. 俗话说,工欲善其事必先利其器,作为码农,在开始编码之前 ...
- Phone漂亮的动画
//此处标明非原创 实现iPhone漂亮的动画效果主要有两种方法, 一种是UIView层面的, 一种是使用CATransition进行更低层次的控制, 第一种是UIView,UIView方式可能在低层 ...
- 应用栈解决迷宫问题的C语言实现
题目来自于严蔚敏<数据结构>,参考伪代码实现的程序: #include <stdio.h> #include <malloc.h> //记录通道块在迷宫矩阵当中的横 ...
- android:ListView 的简单用法
首 先新 建 一个 ListViewTest 项 目, 并 让 ADT 自 动帮 我 们创 建 好 活动 . 然后 修 改 activity_main.xml 中的代码,如下所示: <Linea ...
- .net里Release的pdb文件有什么用 是否可以删除
程序数据库 (PDB) 文件保存着调试和项目状态信息,使用这些信息可以对程序的调试配置进行增量链接. 在使用 /debug 生成时,会创建一个 PDB 文件. 可以使用 /debug:full 或 / ...
- HTML:Browser 对象
ylbtech-HTML:Browser 对象 1.返回顶部 1. Window 对象 Window 对象表示浏览器中打开的窗口. 如果文档包含框架(frame 或 iframe 标签),浏览器会为 ...