网络协议补完计划--HTTPS
目录
- 前言
- 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里是这样:
- 服务器自己持有私钥
- 服务器将公钥分发给所有想要与自己链接的用户
- 用户将
加密的核心算法用公钥加密
之后传给服务器 - 服务器
用私钥对加密的核心算法进行解密
并确认使用该算法。
经过这个步骤、我们达成了以下效果
由
每个客户
通过安全渠道确定
加密的不同核心算法
-
使用公钥加密协商一定是安全的?
上面我们解决了安全渠道协商算法的问题、但是如果公钥被篡改了、无异于从一开始就功亏一篑。
公钥被中间者篡改如上图所示、红色的秘钥已经被攻击者获得、攻击者可以随意解密甚至串改二者的通讯信息。
-
如何保证公钥发布者的身份?
其实如果只是一对一、我们完全可以在APP或者浏览器预装服务器的公钥、让公钥不通过网络传输。
但在现实中不可行、因为域名/服务器太多了、我们预装不过来。
于是可以转变一下思路、求助一下有公信力的第三者。
我们需要有一个人告诉我们、服务器发过来的这个私钥、没有被篡改。
数字证书与签名使用数字签名的方式进行身份认证
上图中、蓝色部分(公钥、数字证书
)都是由第三方机构提供
的。公钥提供给客户端、数字证书提供给服务器。而红色部分(数字签名
)也是在服务器申请证书的时候由第三方机构书写
。用户只需要信任第三方机构并集成即可。
当然这里还有个问题、就是万一我连证书签发机构的公钥
都被篡改了呢?
能做到这一步时、只能说你的客户端/浏览器已经被攻破了、已经不属于HTTPS保护的范畴了~
HTTPS实际的工作过程
其实理解了之前说的HTTPS设计思路、已经不太需要背这张图了。
具体每个步骤的数据包、可以参阅《Https原理浅析》
大概有下面几部:
- 客户端发送自己支持的加密规则给服务器,代表告诉服务器要进行连接了
- 服务器从中选出一套加密算法和hash算法以及自己的身份信息(地址等)以证书的形式发送给浏览器,证书中包含服务器信息,加密公钥,证书的办法机构
- 客户端收到网站的证书之后要做下面的事情:
(1). 验证证书的合法性
(2). 如果验证通过证书,浏览器会生成一串随机数,并用证书中的公钥进行加密
(3). 用约定好的hash算法计算握手消息,然后用生成的密钥进行加密,然后一起发送给服务器 - 服务器接收到客户端传送来的信息,要求下面的事情:
(1). 用私钥解析出密码,,用密码解析握手消息,验证hash值是否和浏览器发来的一致
(2). 使用密钥加密消息,回送 - 如果计算法hash值一致,握手成功
HTTPS到底做了什么?
他负责《帮助服务器和客户端在安全的环境下协商出一个秘钥》以《进行加密传输》。