图解http读书笔记二——安全的https

http的缺点

通信使用明文,内容可能被窃听
http本身不具备加密功能,使用明文进行发送,所以窃听并非难事,只要收集网上流动的数据包即可(抓包工具)

解决方法
- 通信的加密:通过和ssl(secure socket layer,安全套接层)或者tls组合使用,加密http通信内容。用ssl建立安全通信线路之后,就可以在这条线路上进行http通信![这里写图片描述](https://img-blog.csdn.net/20180804131653890?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODcxOTM0Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

- 内容的加密:即对http报文内容本身进行加密处理![这里写图片描述](https://img-blog.csdn.net/20180804131901973?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODcxOTM0Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
前提要求服务端需要有解密机智,且如果不再ssl通道中,加密的内容仍然能被窃取
  • 不验证通信方信息,因此可能遭到伪装
    因为http协议的请求和响应不会对通信方确认。所以存在“服务器是否就是发送请求中uri真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端“

    • 对于无意义的请求会照单全收,即dos攻击(denial of service 拒绝服务攻击)
    • 查明对手证书:ssl不仅提供加密处理,还使用了证书,可用于确定通信方,由第三方颁发,确定服务端和客户端
  • 无法验证报文的完整性,所以有可能被篡改
    http无法证明通信报文完整,即无法证明发出的请求/响应和接收到的是否前后相同

    • 常用md5和sha-1等散列值校验的方法:但是也无法保证,因为算法本身被改,用户也无法知道。

为了以上的弊端 有必要采用https

https

  • https=http+通信加密+证书+完整性保护
  • https是身披ssl的http
    这里写图片描述
  • 钥匙加密技术(看下面安全通信的图即可明白)
  • https的安全通信机制
    这里写图片描述
    步骤解析:
    1.客户端发送client hello报文 开始ssl通信。报文中包含客户端支持的ssl版本,加密组件、算法、密钥长度等
    2.服务器发送 sever hello报文作为应答。其中包含各种支持的版本和组件(从客户端支持的内容中筛选)
    3.服务器发送certificate报文。(报文中包含公开密钥证书)
    4.服务器发送server hello done 报文通知客户端,最初阶段的ssl握手协商部分结束
    5.第一次握手结束,客户端生成pre-master secret随机数,然后使用步骤3中的公开密钥对其加密处理,作为client key exchange报文 进行回应。
    6.客户端继续发送change cipher spec报文,会提示服务器,此报文之后的通信会采用pre-master secret进行加密
    7.客户端发送finished报文。包含连接至今全部报文的整体校验值。此次握手能否成功,取决于服务器能否正确解密改报文作为判定
    8.服务器同样发送change cipher spec报文
    9.服务器同样发送finished报文
    10.服务器和客户端的finished报文交换完毕后,ssl连接建立。此处开始进行应用层协议的通信,即发送http请求。
    11.发送http响应
    12.最后由客户端断开连接,发送close_notify报文
    注意:以上流程,应用层发送数据会附加一种叫做mac的报文摘要,mac能够查知报文是否被篡改。
    https通信很慢很占资源

猜你喜欢

转载自blog.csdn.net/weixin_38719347/article/details/81410124