美文网首页iOS网络
网络协议补完计划--HTTPS

网络协议补完计划--HTTPS

作者: kirito_song | 来源:发表于2018-07-24 11:26 被阅读223次

    目录

    • 前言
    • HTTPS概述
    • 一些需要提前科普的
      • TLS/SSL协议
      • 对称加密
      • 非对称加密
    • 客观的理解HTTPS工作的每个过程
      • 如何保证安全传输?
      • 对称加密的算法(秘钥)如何确定?
      • 如何安全的协商加密的算法(秘钥)?
      • 使用公钥加密协商一定是安全的?
      • 如何保证公钥发布者的身份?
    • HTTPS实际的工作过程
    • HTTPS到底做了什么?
    • 参考资料

    前言

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


    HTTPS概述

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

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

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


    一些需要提前科普的

    • TLS/SSL协议

    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的过程和原理

    相关文章

      网友评论

      本文标题:网络协议补完计划--HTTPS

      本文链接:https://www.haomeiwen.com/subject/izejmftx.html