情人节快到了,谈一场恋爱来搞懂https原理吧

311 阅读4分钟

HTTPS工作原理

设定一个场景,白银和辉夜在谈恋爱,但是由于辉夜被禁足在家了,所以只能通过写情书的方式联系,而书记则是唯一可以帮两人送信的中间人,白银写给辉夜的情书都需要通过书记来转交,很明显书记作为转达人是可以随意偷看和篡改情书的内容的。这样很可能会导致白银和辉夜的感情出现误会从而感情破裂的,所以白银和辉夜为了谈一场安全的恋爱需要解决两个问题及

  1. 中间人偷看问题
  2. 中间人篡改问题

image.png

密文传情书 HTTP+对称加密

为了解决这两个问题辉夜想了个办法,她要白银在发情书之前对情书进行加密加锁,我们两个每人个一把钥匙。这样中间人就不能在偷看和篡改了。这就是对称加密,然而由于辉夜过于优秀小优也想要追求辉夜,那么辉夜也得和小优一人一把钥匙,那么假如所有的男生都想要追求辉夜那么辉夜将有无数把钥匙,所以在这个阶段辉夜需要解决两个问题,

  1. 密钥泄漏问题
  2. 密钥保存问题

image.png

对称加密与非对称加密

对称加密: 指的就是加、解密使用的同是一串密钥,所以被称做对称加密。对称加密只有一个密钥作为私钥。
常见的对称加密算法:DES,AES等。

非对称加密: 指的是加、解密使用不同的密钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。反之,私钥加密的信息,只有公钥才能解密。

密文传情书 HTTP+非对称加密

当辉夜了解到有这么一个非对称加密,就准备了两把钥匙,公钥和私钥,给了白银一个公钥,白银拿到公钥后先对明文+公钥加密,然后在发送密文,这样辉夜就只需要一把私钥就可以了。

sequenceDiagram
白银->>书记: 请求公钥
书记->>辉夜: 请求公钥
辉夜-->>书记: 返回公钥
书记-->>白银: 返回公钥
白银->>白银: 明文+公钥加密
白银->>书记: 发送密文
书记->>辉夜: 发送密文
辉夜->>辉夜: 密文+私钥解密

密文传情书 HTTP+对称加密+非对称加密

但是由于使用了非对称加密,而非对称加密计算量很大,所以加密速度是很慢的,对比对称加密速度相差了几百倍,而且内容越多复杂度会呈几何上升,性能非常慢辉夜又想了一个办法将对称加密与非对称加密结合起来。及增加一个RandKey的随机数使用非对称加密生成私钥与公钥,同时使用RandKey+内容信息使用对称加密来进行密文请求。这样非对称加密就只需要计算RandKey的值,情书的内容通过对称加密计算,即保证了安全性又保证了性能。

sequenceDiagram
白银->>书记: 请求公钥
书记->>辉夜: 请求公钥
辉夜-->>书记: 返回公钥
书记-->>白银: 返回公钥
白银->>白银: RandKey+公钥加密
白银->>书记: 发送RandKey密文
书记->>辉夜: 发送RandKey密文
辉夜->>辉夜: 解密得到RandKey
白银->>白银: 明文+RandKey加密
白银->>书记: 发送密文
书记->>辉夜: 发送密文
辉夜->>辉夜: 密文通过(对称加密方式)RandKey解密

虽然这种方式看起来相当完美,但是作为书记的千花就不能愉快的偷看情书了,觉得没意思了,于是千花想起了鬼主意,书记自己制作了一套公钥和私钥,自己伪装成白银和辉夜请求公钥和发送信息,又伪装成辉夜给白银发送公钥获取情书内容。这时候出现了两个问题及

  1. 中间人私发公钥
  2. 中间人伪装身份
sequenceDiagram
白银->>书记: 请求公钥
书记->>辉夜: 伪装白银请求公钥
辉夜-->>书记: 返回公钥
书记-->>白银: 返回伪装的公钥

https之CA证书

随着时间的过去,辉夜逐渐感觉到了不对劲,发现了书记伪装身份和私发公钥的问题,辉夜苦思冥想深深的感觉到了谈一场安全的恋爱太难了,在这时辉夜突然想到解决此问题的一个办法,我不去自己生成公钥和私钥了,把这块内容交给第三方的权威机构(CA机构),辉夜直接找到ca机构获得一套ca机构的公钥和私钥生成数字证书,当白银请求公钥时,返回ca颁发的数字证书,同时白银自己也需要提前从CA机构获取到CA根证书,通过对比辉夜返回的数字证书可以确认返回的公钥确实是辉夜返回的,而不是书记自己生成的,即使书记也去CA机构获取了一套公钥和私钥,返回的数字证书也能发现所属人是书记而不是辉夜,具体流程如下。

image.png

sequenceDiagram
白银-->>书记: 
白银->>辉夜: 请求公钥
书记-->>白银: 伪装辉夜返回公钥
白银->>白银: 通过与CA根证书比对校验公钥发现是书记伪装的公钥
辉夜-->>白银: 返回公钥
白银->>白银: 通过与CA根证书比对校验公钥确认是辉夜的公钥

http VS https

HTTP

graph TD
应用层/http --> 传输层/TCP --> 网络层/IP --> 链路层/网络接口

HTTPS

graph TD
应用层/http --> 安全层SSL/TSL --> 传输层/TCP --> 网络层/IP --> 链路层/网络接口

HTTPS协议SSL/TSL

关于SSL/TSL相关原理推荐阮一峰老师的这篇文章 SSL/TLS协议运行机制的概述

HTTPS安全性总结

  1. 保密性:信息不透露
  2. 完整性:防篡改注入
  3. 身份确认性:确认服务器归属