[详解《图解HTTP》+ 拓展] 第七、八章:Web安全:HTTPS与认证

86 阅读4分钟

该系列博客是记录自己的学习笔记,若有错误请大佬们指出

狗头声明,本文适用于:新手学习进步,老鸟回顾消遣
该系列以《图解HTTP》为基本路线,该书有11章节,所以本系列也决定编写11篇水文技术博客进行适当的拓展和补充,希望可以帮助大家。

本系列第二章提到过HTTP的特点有无状态和不安全,无状态在第二章使用Cookie解决,而不安全则使用HTTPS加密处理

HTTPS是什么

HTTTPS = HTTP + SSL/TLS,也就是运行在 SSL/TLS 协议上的 HTTP。规定了新的协议名“https”,默认端口号 443http默认占用端口号80

image.png

image.png

由图可知,解决安全问题其实还是使用了那个计算机领域解决问题的核心思想:加个中间层。在HTTP与TCP之间加个SSL/TLS协议。从此由“HTTP over TCP/IP”变成了“HTTP over SSL/TLS”

所以,学习HTTPS就是学习SSL/TLS这个新的协议。

SSL/TLS是一个负责加密通信的安全协议,建立在 TCP/IP 之上,所以也是个可靠(这个可靠是指TCP的数据完整可靠不丢失,并不是安全,安全靠的正是SSL/TLS)的传输协议;被用作 HTTP 的下层。

SSL 发展到 3.0 时被标准化,改名为 TLS,所以历史原因很多人称之为 SSL/TLS,或者直接简称为 SSL。

SSL 利用密码学,综合了对称加密、非对称加密、摘要算法、数字签名、数字证书等技术,使得不安全的HTTP通信变得安全。

启用了安全的 HTTPS 协议后,URI中的协议名也从“http”变成了“https”。

SSL/TLS协议

目前应用普及最广的是TLS1.2,更老版本的已经停用

协议中各种加密算法原理,我并不想现在去花费精力学习,因为我真的用不到,(没错我就是能懒就懒)
感兴趣的小伙伴可以看看这篇:看完这篇 HTTPS,和面试官扯皮就没问题了 - 掘金 (juejin.cn)

实现安全需要做到哪些? 如果通信过程具备了以下四个特性,就可以认为是安全的:

  • 机密性(加密)
  • 完整性(即数据在传输过程中没有被篡改;若能被篡改,加密又有何用)
  • 身份认证(看完“信鸽”案例后更好理解)
  • 不可否认
用“信鸽”来解释HTTPS

为了更好的理解,可以参考“信鸽”:用信鸽来解释 HTTPS (qq.com)

这个案例中的“初级交流”就是不安全的HTTP,于是:

  • 使用了“对称密钥加密”和“非对称密钥加密(公钥私钥)”解决了特性一:机密性

为了确定“盒子(即公钥)”主人的身份:

  • 把“盒子”放在值得信任的认证机构只要数字证书是可信的,公钥就是可信的
SSL/TLS协议运行机制

从“信鸽”案例理解流程后,就可以学习具体的流程知识了:
大佬文章奉上:SSL/TLS协议运行机制的概述 - 阮一峰的网络日志 (ruanyifeng.com)

我并不想复制粘贴堆砌我文章的篇幅,大佬们鞭辟入里的文章已是经典,希望有学习需要的同学有耐心去点开链接学习大佬分享。

HTTPS更慢

  • 1、这是自然的,多了一个中间层SSL/TLS嘛,在之前的HTTP通信基础上多了一个SSL通信,所以通信连接变慢
  • 2、另外,在SSL/TLS的加密、解密等一系列的运算,比起HTTP直接明文传来传去不需要加密解密,需要的运行时间自然增加
解决方法:

没什么根本的解决方法,最多是一些优化,例如用更好的CPU;或者使用SSL加速,从而分担CPU压力。或者使用新版本TLS1.3,它大幅度简化了握手的过程(所以一切奇怪技巧的生命周期都不会很长,新版本一出,就是最优解。)