初识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的:

  1. 服务端在发送消息之前先用RSA技术生成了一对密钥k1和k2。
  2. 服务端把k1用明文发送给了客户端,中间人也许会截取,但是没有用,k1加密的数据需要k2才可以破解,而k2在服务端手中。
  3. k1传到了客户端,客户端会去生成一个接下来准备用于对称加密(AES)的传输密钥key,然后用收到的k1把key加密,传给你。
  4. 服务端用手上的k2解出key后,此时只有服务端和客户端知道这个对称加密的key。
  5. 接下来的消息使用对称加密的方式进行即可,即非对称加密解决了之前我们的问题,即如何安全的把密匙key传递出去。

这里也许你会有问题,为什么不直接用非对称加密来加密信息,而是加密 AES 的 key 呢?

因为非对称加密和解密的平均消耗时间比较长,为了节省时间提高效率,我们通常只是用它来交换密钥,而非直接传输数据。

HTTPS证书

我们之前通过加密技术已经解决了消息安全传递的问题了,那么是不是从此就万无一失了呢?答案当然不是。

我们设想一下,如果我们服务端(S)和客户端(C)中间会途经一个黑客服务器,暂且就称为H吧,下面我们看看H如何操作可以破解掉我们的加密防范。

  1. S生成了k1,使用明文发送给C;
  2. H接收到k1之后,并没有转发给C,而是先自己生成一个key,使用k1加密后发送给S,即对S来说,H伪装成了C;
  3. 同时,H生成了新的一个k1,使用明文发送给C,C会把加密后的key告诉H,即对C来说,H伪装成了S;
  4. 这样一来,实际上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”安全在哪里?

HTTPS 小白知识(一)

初识HTTPS的更多相关文章

  1. [转帖]Hive学习之路 (一)Hive初识

    Hive学习之路 (一)Hive初识 https://www.cnblogs.com/qingyunzong/p/8707885.html 讨论QQ:1586558083 目录 Hive 简介 什么是 ...

  2. 超哥mysql数据库部分blog整理:

    总目录:mysql数据库阶段学习目录 https://www.cnblogs.com/clschao/articles/10065275.html Day1. 1.数据库初识 https://www. ...

  3. MySQL、Hive以及MySQL Connector/J安装过程

    MySQL安装 ①官网下载mysql-server(yum安装) wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch. ...

  4. [web][nginx] 初识nginx -- 使用nginx搭建https DPI解码测试环境

    环境 CentOS 7 X86 文档: https://nginx.org/en/docs/ 安装: [root@dpdk ~]# cat /etc/yum.repos.d/nginx.repo [n ...

  5. HTTP与HTTPS初识

    HTTP HTTP是一个属于应用层的协议,特点是简介.快速   HTTP客户端发起请求,创建端口HTTP服务器在端口监听客户端请求HTTP服务器向客户端返回状态和内容 网络请求,页面渲染 1.域名解析 ...

  6. 网络爬虫深究-初识HTTP和https常识

    网络爬虫专题--HTTP基本原理 URI和URL.URN的关系 超文本 HTTP和HTTPS URI和URL 首先,我们来了解一下URI和URL,URI,即统一资源标志符,URL,即统一资源定位符. ...

  7. Redis初识、设计思想与一些学习资源推荐

    一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...

  8. MongoDB【第一篇】MongodDB初识

    NoSQL介绍 一.NoSQL简介 NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库. 非关系型数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的. 原始的目的是为 ...

  9. Android图片缓存之初识Glide

    前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...

随机推荐

  1. Sensor传感器(摇一摇)

    <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content ...

  2. 条件随机场之CRF++源码详解-训练

    上篇的CRF++源码阅读中, 我们看到CRF++如何处理样本以及如何构造特征.本篇文章将继续探讨CRF++的源码,并且本篇文章将是整个系列的重点,会介绍条件随机场中如何构造无向图.前向后向算法.如何计 ...

  3. 你了解ECMAScript吗?

    一.基本概念ECMA,European Computer Manufacturers Association,欧洲计算机制造协会. TC39,Technical Committee 39,ECMA的第 ...

  4. python在使用MySQLdb模块时报Can't extract file(s) to egg cacheThe following error occurred while trying to extract file(s) to the Python eggcache的错误。

    这个是因为python使用MySQLdb模块与mysql数据库交互时需要一个地方作为cache放置暂存的数据,但是调用python解释器的用户(常常是服务器如apache的www用户)对于cache所 ...

  5. VMware虚拟机安装CentOS6.4、部署web项目全过程(设置固定IP、安装JDK、Tomcat、Redis、部署项目)

    概述:该篇随笔介绍了在VMware上安装centOS.在centOS上安装JDK.安装Tomcat.安装Redis并部署项目的全过程,虽然参考了很多优秀的文章,但实践.整理.补充都很用心,若要复制粘贴 ...

  6. js 停止事件冒泡 阻止浏览器的默认行为(比如阻止超连接 # )

      在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到“停止事件冒泡”和“阻止浏览器默认行为”. 1..停止事件冒泡 JavaScript代码 //如果提供了事件对象,则这是一个非IE浏览器if ...

  7. HDU.6155.Subsequence Count(线段树 矩阵)

    题目链接 首先考虑询问[1,n]怎么做 设 f[i][0/1]表示[1,i]以0/1结尾的不同子序列个数 则 \(if(A[i]) f[i][1] = f[i-1][0] + f[i-1][1] + ...

  8. fastJson解析复杂的json字符串,经测试已经成功解析

    要解析的json数据格式为: HTTP/1.1 200 OK Content-Type: text/jsv Content-Length: length { ResponseStatus: { }, ...

  9. 小学生四则运算出题软件-基于java控制台的实现

    .题目描述: 1. 使用 -n 参数控制生成题目的个数,例如 Myapp.exe -n 10 -o Exercise.txt 将生成10个题目. 2. 使用 -r 参数控制题目中数值(自然数.真分数和 ...

  10. URL中可以出现的字符

    http://blog.csdn.net/hejisan/article/details/51786969