HTTP + 通信加密 + 认证机制 + 保护报文完整型 = HTTPS

4,057 阅读5分钟

前言

作为开发,前后端交互离不开网络通信,我们日常使用的HTTP(S),你真的了解吗?尝试回答下面的问题,看看有没有遇到你的短板。如果还有问题不明白,就请继续阅读本文,我来为你答疑解惑。

  • 什么是HTTP,它有哪些缺陷?
  • TCP/IP是什么,有哪些协议层,几次握手?
  • 什么是公钥、私钥,为什么需要公钥私钥,以及什么是(非)对称密钥加密?
  • 什么是证书,为什么需要证书,证书是个什么东西?
  • 什么是HTTPS,跟HTTP有什么区别?

HTTP

HTTP(超文本传输协议)最初是作为 Web 文档传输协议。它出现的主要目的是为了解决文本传输的难题。由于协议本身非常简单,于是在此基础上加了很多应用方法投入了实际使用。

HTTP相当方便,然而 HTTP 并非只有好的一面,它也有不足之处。 主要不足如下:

  • 通信使用明文可能会被窃听
  • 不验证通信方的身份可能遭遇伪装
  • 无法证明报文的完整型,可能已遭篡改

TCP/IP

TCP/IP 是个协议族,TCP和IP是两种协议, 通常我们称 TCP/IP 为TCP/IP协议。最重要的一点是它是分层的:应用层、传输层、网络层和数据链路层。

层.jpeg

3次握手.jpeg

HTTPS

今天的大BOSS来了,解决完HTTP的缺陷问题,就是HTTPS(超文本传输安全协议)了。睁大眼睛往下看。

加密处理防止被窃听

针对HTTP的 问题一:通信使用明文可能会被窃听,设计加密,加密的对象有那么几个:通信的加密 + 内容加密。

通信的加密

HTTP协议中没有加密机制,和SSL(Secure Socket Layer)组合使用,加密HTTP的通信内容。用SSL建立安全通信线路,就可以在这条线路上通信了。与SSL组合使用的HTTP就被称为 HTTPS(超文本传输安全协议)。

安全通信图

内容加密

针对HTTP协议传输的内容本身加密。HTTP报文:报文首部 + 报文主体,报文首部不做加密处理,报文主体的内容会被加密处理。前提需要客户端和服务器同时具备加密和解密机制。

内容加密.jpeg

验证通信方的身份,查明对方的证书

HTTP协议中的请求和响应不会对通信方进行确认。任何人都可以发起请求。无法确定目标客户端和目标服务器。HTTP不可以,但是SSL可协议通过证书的手段可以确定对方。

证书:是值得信任的第三方机构颁发的,用以证明服务器和客户端是实际存在的。

为什么证书就能确认呢?因为伪造证书从技术角度来异常困难,所以只要能够确认通信方持有的证书,就可以判断通信方的真实意图,

证书.jpeg

确认报文的完整性

请求或者响应的内容遭到篡改,HTTP是没办法确认的。

请求或者响应在传播途中,遭攻击者拦截并篡改内容的攻击称为中间人。

HTTP直接和TCP通信,当使用了SSL时,则演变成先和SSL通信,再由SSL和TCP通信。所谓的HTTPS,其实就是身披SSL协议的外壳的HTTP。就目前来说,SSL是当今世界上应用最为广泛的网络安全技术。

加密技术

共享密钥加密

加密和界别同用一个密钥的方式称为共享密钥加密,也叫做对称密钥加密。只要拿到密钥,任何人都能破解密钥。

存在的问题:

  • 发送密钥有被监听的风险,不发送,对方就不能解密;
  • 怎样安全的发送密钥,保管密钥。

使用两把密钥的公开密钥加密

公开密钥使用一对非对称加密的密钥。一把叫做私有密钥,一把叫做公开密钥。公开密钥可以随意的公开,私有密钥不能让别人知道。

使用公开密钥进行加密,通信对方收到被加密的密文,用私钥进行解密,这就就不用将密钥发送来发送去了。

HTTPS 采用混合加密机制

HTTPS使用了两者并用的混合加密机制,利用两者的优势,组合起来用户通信。在交换密钥环节使用开发密钥加密方法,之后的建立通信交换报文阶段则使用共享密钥加密方式。

https混合加密.jpeg

如何证明公开密钥的正确性呢

公开密钥加密存在一些问题,无法证明公开密钥就是货真价实的公开密钥。为了解决这个问题,可以是使用由数字证书认证机构和其它相关机关颁发的公开密钥证书。

由公开密钥申请,数字证书认证机构会对公开密钥做数字签名。公钥证书也叫做数字证书或证书。客户端通过私钥来进行验证。一旦验证通过,客户端便可明确了两件事:

  1. 认证服务器的公开密钥是真实有效的数字证书认证机构。
  2. 服务器的开发密钥值得信赖。

我们自己给浏览器安装的证书 — 自签名证书

通常我们开发HTTPS的项目的时候,浏览器访问就会提示:无法确认连接安全性 或者 该网站的安全证书存在问题。影响我们开发,我们采用自签名证书来解决这个问题。

自签名证书大家都会生成安装吧,这里就不赘述了。

现在回头看看上面问题,都能解答了吧。笔者最近在阅读《图解HTTP》,这次将 HTTPS 相关知识进行梳理总结,方便以后查看,文中插图均来自此书。此书图文结合,浅显易懂,推荐大家也读一下。