前言

以下是我对《图解HTTP》这本书阅读后的知识梳理,为了加深印象和忘了的时候能不瞎找

一、http缺点

1. 通信使用明文,不加密,内容可能会被窃听


TCP/IP协议族工作机制,通信内容在所有的通信线路上都有可能遭到窥视
其实加密也会被窥视,只不过通信经过加密,报文信息无法被破解,但还是能看到的,用抓包工具Wireshark等

窃听
窃听

2. 不验证通信方身份,可能遭遇伪装


http协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求,另外,服务器只要接收到请求,不管对方是谁都会返回一个相应

窃听
窃听

1. 伪装服务器(无法确定请求来自何方、出自谁手)
2. 伪装客户端
3. 无法阻止海量请求,DOS攻击

3. 无法证明报文完整性,篡改报文


无法证明信息的准确度,无法确认发出的请求/相应和接受的请求/相应是前后相同的

无法确定准确度
无法确定准确度

中间人攻击
中间人攻击

二、SSL


SSL: 安全套接层

用SSL建立安全通信线路后,就可以在这条线路进行HTTP通信,与SSL组合使用的HTTP称为HTTPS

安全的通信线路
安全的通信线路

1.证书


使用HTTP协议无法确定通信方,但是SSL则可以,SSL不仅提供加密,还使用称为 证书的手段,用于确定通信双方。
证书由值得信任的第三方机构颁发,用来 证明服务器和客户端是实际存在的

证书
证书

2.加密(公开密钥加密)


SSL采用公开密钥加密的加密方式

使用一对非对称的密钥,一个叫私有秘钥(不能让别人知道),一个叫公有密钥(受任何人都可以知道)


𝟙.流程

发送密文一方使用对方的公开密钥进行加密,对方收到加密的信息后,再用自己的私钥解密

不需要发送密钥了
加密算法公开,密钥保密
密钥被窃取,加密也就没有意义了(因为不需要发送密钥,也就不懂担心密钥被窃取了)

加密
加密

𝟚.存在的问题—无法证明公开密钥本身就是货真价实的公开密钥

当然也存在解决办法,那就是使用由数字证书认证机构和其相关机构办法的公开密钥和证书

数字证书认证机构(CA),处于客户端与服务器双方都可信赖的第三方机构,颁发的数字证书为最终用户数据加密的公共密钥。在这个过程中,CA的责任是确保公司或用户接收一个唯一的证书是一个有效的身份的认证

流程

  1. 服务器运营人员向数字证书认证机构提出公开密钥的申请
  2. 机构在判明提出申请者身份后,会对已申请的公开密钥数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定一起
  3. 服务器会将这个公钥证书发送给客户端,公钥证书也叫数字证书或证书
  4. 接收到证书的客户端使用数字证书认证机构的公开密钥对证书上的数字签名进行验证,一旦通过,就能确定这个公开密钥真实有效且值得信赖
    加密
    加密

2.加密(共享密钥加密)

加密和解密用同一个密钥的方式称为共享密钥加密也叫对称密钥加密

3.两种加密方式的对比

公开密钥加密处理速度慢于共享密钥加密

公开密钥优势 不需要交换共享密钥,所以不用担心共享密钥会暴露
公开密钥劣势 耗费资源,必须经过数字证书验证

共享密钥优势 不需要经过数字证书验证,速度优于公开密钥
共享密钥劣势 需要发送共享密钥,有暴露的风向

三、HTTP+加密+认证+完整性保护=HTTPS

HTTPS使用SSL和TLS两种协议

证书
证书

HTTPS
HTTPS

问题:共享密钥的方式加密时必须将密钥也发给对方,那怎么安全发送呢?

1.https的加密(混合加密)

两个步骤

  1. 交换密钥环节:使用公开密钥加密(主要是为了传递共享秘钥加密方式里的密钥)
  2. 通信:确保密钥是安全的前提下,使用共享密钥进行通信

2.https的通信机制

通信步骤
通信步骤

步骤1. 客户端发送Client Hello 报文开始SSL通信。报文中含客户端支持的SSL的指定版本、加密组件列表(使用的加密算法和秘钥长度)

步骤2. 服务器可进行SSL通信时,会以server Hello报文作为应答,报文中包含SSL版本和加密组件,加密组件内容是从接收到的客户端加密组件内筛选出来的

步骤3. 服务器发送certificate报文,报文中含有公开密钥证书

步骤4. 服务器发送 server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束

步骤5. SSL第一次握手结束后,客户端以Client Key Exchange 报文最为回应,报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文用步骤3中的公开密钥加密(告知服务端共享秘钥)

步骤6. 接着客户端发送change cipher spec报文,该报文会提示服务器,在此报文之后的通信会采用Pre-master secret 密钥加密

步骤7. 客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值,这次握手协商是否能成功,要以服务器是否能够正确解密该报文作为判定标准 (如果服务器能正确解密,则这次握手协商成功)

步骤8. 服务器同样发送Change cipher spec 报文

步骤9. 服务器发送Finished报文

步骤10. 服务器和客户端的Finished报文交换完毕后,SSL连接就算建立完成,当然,通信会受到SSL保护,从此处开始进行应用层协议的通信,即发送HTTP相求

步骤11. 应用层协议通信,即发送HTTP响应

步骤12。 最后由客户端断开连接,断开连接时,发送close_notify 报文

再发送TCP FIN报文来关闭与TCP的通信

应用层发送数据时会附加一种加MAC(Message Authentication Code)的报文摘要。MAC能够查知报文是否遭到篡改,从而保护报文的完整新

共享秘钥的生成过程

3.HTTPS通信过程总结

  1. 客户端和服务端协商决定加密组件
  2. 服务端发送公开密钥证书(当然服务器也存在配对的私有秘钥)
  3. 客户端确认这个证书的有效性,然后取出公开密钥
  4. 客户端生成一个 pre-master secret (随机数),然后用刚刚的公开密钥加密
  5. 客户端发送加密好的pre-master secret ,服务端用私有秘钥解密
  6. 上面的pre-master secret 就是共享秘钥,现在两边都有了
  7. 进行正常的http通信

4.客户端认证

  1. basic jwt等这种认证
  2. SSL客户端认证,一般登录个人网银时,需要下载证书安装
  3. 表单认证,就是开始登录网站需要输入的账号密码

四、HTTPS的缺点

HTTPS比HTTP要慢2到100倍
HTTPS比HTTP要慢2到100倍

因为使用了SSL,它的处理速度会变慢

SSL慢分两种

  • SSL通信慢
  • 由于大量消耗CPU及内存资源,导致处理速度变慢

消耗资源

加密通信会消耗更多的CPU内存和资源,那么计算机能够处理的请求数量就会减少,所以在传递一些敏感数据时采用HTTPS

费钱

购买证书要花钱的

五、想法

关于http我觉得还有些不足,比如不具备服务端主动推送供,每次想知道服务器内容是否更新等都需要客户端轮询做http请求等功能,所以我也总结了别的常用的通信方式,通信方式