iOS网络

网络协议补完计划--HTTPS

2018-07-24  本文已影响223人  kirito_song

目录


前言

HTTPS现在几乎已经无人不知无人不晓。
各大手机平台也相继要求使用HTTPS进行请求。
问起什么是HTTPS、所有人都会回答《安全》
那么、HTTPS是如何做到安全的。这是本篇想要谈的东西。


HTTPS概述

随着HTTP的应用越来越广泛、一些问题便随之而来。
其中首当其冲的就是安全性、例如:
1. 窃听风险
由于HTTP本身并不具备加密属性、所有的信息都等于在互联网上裸奔。

2. 身份伪装
用户不知道自己的需求是否发送给了目标服务器、有可能被钓鱼。

HTTPS、正致力于解决这些安全性问题。


一些需要提前科普的

TLS/SSL协议提供了身份验证、信息加密和完整性校验的功能。
说白点,就是在明文的上层和TCP层之间加上一层加密,这样就保证上层信息传输的安全

HTTPS在正常传输时、使用的对称加密算法、保证传输效率。

对称加密

如图、对称加密中A/B双方都持有相同的秘钥。发送数据时加密、接收数据时解密。

HTTPS在握手时使用非对称加密、保证协商私钥时的私密性。

非对称加密

如图、B持有(无数个)锁、每次发送数据时都把数据锁好。A接到盒子后、用手里的钥匙解密。
这样做的好处是、即使客户端B的锁泄漏了、攻击者也无法获知真正的信息、因为他并没法解密。

如果想更多的了解对称/非对称加密、强推李永乐老师的科普视频《B站链接》


客观的理解HTTPS工作的每个过程

这里、我先不从网上复制HTTPS的工作过程、因为感觉并不好理解。
而是通过一些问题以及解决方案来尝试更好的理解HTTPS为什么这么设计。

既然HTTPS的关键是安全传输、那么什么是安全。
让第三者无法拦截?这在物理上暂时不可实现。(当然不排除未来的可能性、但那时也就不需要HTTPS了
所以我们退而求其次:

让第三者即使截获、也无法解密(获得)里面的真正内容。

我们只要利用之前提到的《对称加密》的方式、就可以达到这个效果。

如果客户端都用同一个私钥、自然不可能。
试想、你会将你的密码公布给100个人么?只要其中一个人泄漏了你的秘钥、将会满盘皆输。

我们希望服务器与每一个人的加密算法、都是不固定的。

但服务器再和每个用户协商算法的时候、依旧没有加密、仍旧存在被截获的危险。

这里需要引出刚才提到的另一个加密算法:《非对称加密》

忘了的同学可以翻上去重新看一下、套用到HTTPS里是这样:

  1. 服务器自己持有私钥
  2. 服务器将公钥分发给所有想要与自己链接的用户
  3. 用户将加密的核心算法用公钥加密之后传给服务器
  4. 服务器用私钥对加密的核心算法进行解密并确认使用该算法。

经过这个步骤、我们达成了以下效果

每个客户通过安全渠道确定加密的不同核心算法

上面我们解决了安全渠道协商算法的问题、但是如果公钥被篡改了、无异于从一开始就功亏一篑。

公钥被中间者篡改

如上图所示、红色的秘钥已经被攻击者获得、攻击者可以随意解密甚至串改二者的通讯信息。

其实如果只是一对一、我们完全可以在APP或者浏览器预装服务器的公钥、让公钥不通过网络传输。

但在现实中不可行、因为域名/服务器太多了、我们预装不过来。
于是可以转变一下思路、求助一下有公信力的第三者。
我们需要有一个人告诉我们、服务器发过来的这个私钥、没有被篡改。

使用数字签名的方式进行身份认证

数字证书与签名

上图中、蓝色部分(公钥、数字证书)都是由第三方机构提供的。公钥提供给客户端、数字证书提供给服务器。而红色部分(数字签名)也是在服务器申请证书的时候由第三方机构书写。用户只需要信任第三方机构并集成即可。

当然这里还有个问题、就是万一我连证书签发机构的公钥都被篡改了呢?
能做到这一步时、只能说你的客户端/浏览器已经被攻破了、已经不属于HTTPS保护的范畴了~


HTTPS实际的工作过程

其实理解了之前说的HTTPS设计思路、已经不太需要背这张图了。
具体每个步骤的数据包、可以参阅《Https原理浅析》

大概有下面几部:

  1. 客户端发送自己支持的加密规则给服务器,代表告诉服务器要进行连接了
  2. 服务器从中选出一套加密算法和hash算法以及自己的身份信息(地址等)以证书的形式发送给浏览器,证书中包含服务器信息,加密公钥,证书的办法机构
  3. 客户端收到网站的证书之后要做下面的事情:
    (1). 验证证书的合法性
    (2). 如果验证通过证书,浏览器会生成一串随机数,并用证书中的公钥进行加密
    (3). 用约定好的hash算法计算握手消息,然后用生成的密钥进行加密,然后一起发送给服务器
  4. 服务器接收到客户端传送来的信息,要求下面的事情:
    (1). 用私钥解析出密码,,用密码解析握手消息,验证hash值是否和浏览器发来的一致
    (2). 使用密钥加密消息,回送
  5. 如果计算法hash值一致,握手成功

HTTPS到底做了什么?

他负责《帮助服务器和客户端在安全的环境下协商出一个秘钥》《进行加密传输》


参考资料

Https原理浅析
搞懂HTTPS的过程和原理

上一篇下一篇

猜你喜欢

热点阅读