初识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实现自己的图片缓存,到后来做电商项目自己的实 ...
随机推荐
- Java相关英语单词
day1 Java概述 掌握 .JDK abbr. Java开发工具包(Java Developer's Kit) (abbr.缩写) .JRE abbr. Java运行环境(Java Runtime ...
- Strom在本地运行调试出现的错误
1.错误日志 31385 [main] WARN backtype.storm.daemon.nimbus - Topology submission exception. (topology nam ...
- Python3.X 安装Scrapy
安装Scrapy有两种方法: 1.pip install Scrapy 这种方式按道理来说是最简洁最快速的,但是有的时候安装不成功,只能更换一种方式,下载源文件安装的方式,详见下面一步. 2.下载文件 ...
- 如何在VS Code中进行golang编程
在VS Code中编程 使用Visual Studio Code的Go扩展,您可以获得诸如IntelliSense,代码导航,符号搜索,括号匹配,片段等语言功能,这些功能将帮助您进行Golang开发. ...
- Burp Suite之爬网模块(二)
Spider功能 Burp Spider爬网介绍 Burp Spider 是一个映射 web 应用程序的工具.它使用多种智能技术对一个应用程序的内容和功能进行全面的清查. 通过跟踪 HTML 和 Ja ...
- Android获取网络状态
Android获取网络状态 学习自 https://developer.android.google.cn/reference/android/net/ConnectivityManager http ...
- SQL 游标 Cursor 基本用法
/* table1结构如下 id int name varchar(50) */ declare @id int ) declare cursor1 cursor for --定义游标cursor1 ...
- Windows 下安装 swoole 具体步骤(php)
Windows 下安装 swoole 具体步骤: Swoole,原本不支持在Windows下安装的,所以我们要安装Cygwin来使用.在安装Cygwin下遇到了很多坑,百度经验上的文档不是很全,所以我 ...
- Python数据可视化系列-01-快速绘图
快速绘图 数据图绘制 matplotlib的字库pyplot提供了快速绘制2D图标的API接口. import numpy as np import matplotlib.pyplot as plt ...
- socket的几大异常以及其出现的原因
1:我是模拟了一个客户端不断的向服务器发送消息,但是当某一时刻我把服务端断掉,客户端就出现了写异常 java.net.SocketException: Connection reset by peer ...