分分钟让你理解HTTPS

以前我有写过http相关的文章,在看本文前若是不了解http能够先看 《5分钟让你明白HTTP协议》。本文主要参考内容来自 用信鸽来解释 HTTPShtml

1、HTTP存在的问题

1.1 可能被窃听

  1. HTTP 自己不具有加密的功能,HTTP 报文使用明文方式发送
  2. 因为互联网是由联通世界各个地方的网络设施组成,全部发送和接收通过某些设备的数据均可能被截获或窥视。(例如你们都熟悉的抓包工具:Wireshark)

1.2 认证问题

  1. 没法确认你发送到的服务器就是真正的目标服务器(可能服务器是假装的)
  2. 没法肯定返回的客户端是不是按照真实意图接收的客户端(多是假装的客户端)
  3. 没法肯定正在通讯的对方是否具有访问权限,Web 服务器上某些重要的信息,只想发给特定用户即便是无心义的请求也会照单全收。没法阻止海量请求下的 DoS 攻击(Denial of Service,拒绝服务攻击)。

1.3 可能被篡改

1.请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击被称为中间人攻击(Man-in-the-Middle attack,MITM)。算法

2、HTTPS介绍

2.1 什么是HTTPS

超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种经过计算机网络进行安全通讯的传输协议。HTTPS经由HTTP进行通讯,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。浏览器

2.2 HTTPS怎么解决上述问题

HTTPS是在通讯接口部分用 TLS(Transport Layer Security 传输层安全性协议),TLS协议采用主从式架构模型,用于在两个应用程序间经过网络建立起安全的链接,防止在交换数据时受到窃听及篡改。安全

https和https

2.3 SSL和TLS的关系

  1. 传输层安全性协议(英语:Transport Layer Security,缩写做 TLS),及其前身安全套接层(Secure Sockets Layer,缩写做 SSL)是一种安全协议,目的是为互联网通讯,提供安全及数据完整性保障。
  2. 网景公司(Netscape)在1994年推出首版网页浏览器,网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。
  3. IETF将SSL进行标准化,1999年公布初版TLS标准文件。随后又公布RFC 5246 (2008年8月)与 RFC 6176 (2011年3月)。在浏览器、电子邮件、即时通讯、VoIP、网络传真等应用程序中,普遍支持这个协议。

2.4 TLS/SSL 协议

HTTPS 协议的主要功能基本都依赖于 TLS/SSL 协议,TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数对称加密非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。 bash

TLS/SSL协议

SSL/TLS协议运行机制 能够看阮老师的SSL/TLS协议运行机制的概述服务器

RSA加密算法原理能够看阮老师的这两篇文章 RSA算法原理(一)RSA算法原理(二)网络

2.5 用信鸽来解释

密码学是一门难以理解的学科,提及来也很抽象,而在互联网上任何活动均可以认为是从某台服务器上发送和接受信息。咱们能够假设这些消息是用信鸽来传递的。架构

在谈以前咱们先说一下爱丽丝、鲍勃和马洛里。他们是普遍地代入密码学和物理学领域的通用角色。这些名称是为了方便说明议题,若是句子相似“甲想发送消息给乙”,当议题变得越复杂,将越难理解及容易混乱。而在典型的协议运行中,这些人物不必定是一个“人类”,而多是一个可信赖的自动式代理人(如电脑程序)。使用这些名称有助说明的结构,有时也会用做幽默。并发

2.5.1 初步交流

若是爱丽丝想要给鲍勃发送一段信息,她会把信息绑在信鸽的腿上而后送往鲍勃那里。鲍勃收到了信息,并阅读了信息,很是完美。函数

但若是马洛里拦截了爱丽丝的鸽子而且篡改了信息呢?鲍勃就没有办法去知道爱丽丝发出的信息在传递过程当中遭到了修改。

这就是 HTTP 如何运做的。看起来很可怕对吧?我是不会经过 HTTP 来发送个人银行资信证实的,而且你也不该如此。

2.5.2 隐蔽的密码

那么若是爱丽丝和鲍勃都很是的机智。他们一致认同使用一种隐蔽的密码来书写他们的信息。他们会将信息中的每一个字母按照字母表中的顺序前移三位。好比,D→A,E→B,F→C。如此一来,原文为 “secret message” 的信息就变成了 “pbzobq jbppxdb” 。

那如今若是马洛里再截获了信鸽,她既不能作出有意义的修改同时也不会知道信息的内容,由于她不知道隐蔽的密码究竟是什么。然而鲍勃却能够很容易反转密码,依靠 A → D, B → E, C → F 之类的规则破译信息的内容。加密后的信息 “pbzobq jbppxdb” 会被破解还原为 “secret message” 。

这就是对称密匙加密,由于若是你知道如何加密一段信息那么你一样能够解密这段信息。 上述的密码一般被称为凯撒码。在现实生活中,咱们会使用更为奇特和复杂的密码,但原理相同。

2.5.3 咱们如何决定密匙?

若是除了发信者和收信者以外没有人知道使用的是什么密匙,对称密匙加密是很是安全的。在凯撒加密中,密匙就是每一个字母变到加密字母须要移动多少位的偏移量。我以前的距离中,使用的偏移量是 3 ,可是也能够用 4 或者 12 。

问题是若是爱丽丝和鲍勃在开始用信鸽传信以前没有碰过头,他们没有一个安全的方式来确立密匙。若是他们本身来在信中传递密匙,马洛里就会截获信息并发现密匙。这就使得马洛里能够在爱丽丝和鲍勃开始加密他们的信息以前或以后,阅读到他们信息的内容并按照她的意愿来篡改信息。

这是一个中间人攻击的典型例子,避免这个问题的惟一方法就是收发信的两方一块儿修改他们的编码系统。

2.5.4 经过信鸽传递盒子

因此爱丽丝和鲍勃就想出了一个更好的系统。当鲍勃想要给爱丽丝发送信息时,他会按照以下的步骤来进行:

鲍勃向爱丽丝送一只没有携带任何信息的鸽子。

爱丽丝给鲍勃送回鸽子,而且这只鸽子带有一个有开着的锁的盒子,爱丽丝保管着锁的钥匙。

鲍勃把信放进盒子中,把锁锁上而后把盒子送给爱丽丝。

爱丽丝收到盒子,用钥匙打开而后阅读信息。
复制代码

这样马洛里就不能经过截获鸽子来篡改信息了,由于她没有打开盒子的钥匙。当爱丽丝要给鲍勃发送消息的时候一样按照上述的流程。

爱丽丝和鲍勃所使用的流程一般被称为非对称密钥加密。之因此称之为非对称,是由于即便是你把信息编码(锁上盒子)也不能破译信息(打开锁住的盒子)。

在术语中,盒子被称为公匙而用来打开盒子的钥匙被称为私匙

2.5.5 如何信任盒子

可是会发现仍是存在问题。当鲍勃收到盒子时他如何能肯定这个盒子来自爱丽丝而不是马洛里截获了鸽子而后换了一个她有钥匙能打开的盒子呢?

爱丽丝决定签名标记一下盒子,这样鲍勃收到盒子的时候就能够检查签名来肯定是爱丽丝送出的盒子了。

那么鲍勃如何打一开始就能识别出爱丽丝的签名呢?这是个好问题。爱丽丝和鲍勃也确实有这个问题,因此他们决定让泰德代替爱丽丝来标记这个盒子。

那么谁是泰德呢?泰德颇有名的,是一个值得信任的家伙。他会给任何人签名而且全部人都信任他只会给合法的人签名标记盒子。

若是泰德能够确认索要签名的人是爱丽丝,他就会在爱丽丝的盒子上签名。所以马洛里就不可能搞到一个有着泰德表明爱丽丝签了名的盒子,由于鲍勃知道泰德只会给他确认过的人签名,从而识破马洛里的诡计。

泰德的角色在术语中被称为认证机构。而你阅读此文时所用的浏览器打包存有许多认证机构的签名。

因此当你首次接入一个网站的时候你能够信任来自这个站点的盒子由于你信任泰德而泰德会告诉你盒子是合法的。

2.5.6 沉重的盒子

如今爱丽丝和鲍勃有了一个可靠的系统来进行交流,然他们也意识到让鸽子携带盒子比本来只携带信件要慢一些。

所以他们决定只有在选择用对称加密来给信息编码(还记得凯撒加密法吧?)的密匙时,使用传递盒子的方法(非对称加密)。

这样就能够两者的优势兼具了,非对称加密的可靠性和对称加密的高效性。

现实世界中咱们不会用信鸽这样慢的送信手段,但用非对称加密来编码信息仍要慢于使用对称加密技术,因此咱们只有在交换编码密匙的时候会使用非对称加密技术。

那么相信如今的你已经了解了HTTPS是如何工做的了~

参考:

  1. 用信鸽来解释 HTTPS
  2. 超文本传输安全协议
  3. 传输层安全性协议