从HTTP到HTTPS,原来这么简单

一、HTTP Begin1、什么是 HTTP
HTTP 是基于文本传输的协议 , 它位于 OSI 七层模型的应用层(Application), HTTP 是通过客户端向服务器发送请求 , 服务器响应请求来进行通讯 , 截止到目前位置 HTTP 协议分别由 6 个独立的协议说明组成 , 这 6 个协议说明分别是 RFC 7230 、 RFC 7231 、 RFC 7232 、 RFC 7233 、 RFC 7234 、 RFC 7235。
从HTTP到HTTPS,原来这么简单文章插图
说到 HTTP 就不得不说通讯报文 , 下面我们来看看 HTTP 通讯报文 。 通讯报文分为 请求报文 和 响应报文。
①请求报文
HTTP请求报文通常由请求行(request line)、请求头部(header)、空行和请求数据4个部分组 , 如下图所示:
从HTTP到HTTPS,原来这么简单文章插图
请求行包含请求方法、URL 和 HTTP 协议版本三个字段组成 , 在这里需要说的是 请求方法可以实 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT , 但是常见的经常用到的就是 GET、POST、DELETE和 PUT 。
请求头部由大量键值对组成 , 请求头部的数据都是向服务器告知客户端的信息 , 比较常见的请求头有 User-Agent 浏览器类型 , Accept 客户端可识别的内容类型列表 , Host 请求的主机名 。 接下来是一个空行 , 它主要用来通知服务器从当前行开始往下就不再是请求头了 。
请求数据主要是在 POST 和 PUT 方法中使用 , 用来向服务器提交客户端的表单信息 , 一般需要配合着 Content-Type和Content-Length 使用 。
②响应报文
响应报文也是由三部分组成 , 状态行、消息报头和响应正文 。 状态行用来告知客户端所请求资源的情况 , 状态行由 HTTP 版本、服务器回发响应状态码和状态码文本描述组成 。 这里要说一下响应状态码 , 状态码类型如下表所示:
从HTTP到HTTPS,原来这么简单文章插图
上表看着响应状态码很多 , 但是大部分在实际运用中很少遇到 , 经常遇到的状态码一共 7 中 , 如下表所示:
从HTTP到HTTPS,原来这么简单文章插图
2、HTTP 致命缺点
HTTP 有一个致命的缺点 , 就是 HTTP 的报文都是以明文的方式进行传输 , 这样就会导致中间人攻击问题 。 什么是中间人攻击了 , 下面我们通过图文的形式讲一下 。
A 在客户端向服务器发送了一句话“我今天很好” , 这时在数据还没有到达服务器的时候被 B 拦截到 , B 将发送的内容改为“我昨天很好”并发送给服务器 , 最后服务器接收到的信息就是“我昨天很好”而不是“我今天很好” 。
在这里 B 就是中间人 , B 所执行的所有操作就叫做中间人攻击 , 一图胜千言我们来看图 。
从HTTP到HTTPS,原来这么简单文章插图
3、HTTP 预防致命缺点手段
要想预防中间人攻击我们就需要对发送的报文信息进行加密处理 , 一般来说我们会采用两种加密手段来预防中间人攻击:对称加密和非对称加密 。
①对称加密
首先 A 发送一条信息告诉服务器我要和你通讯了 , 服务器收到这条信息后响应一条信息告诉 A 的加密方式(例如 AES 加密)和密钥 , 最后 A 用和服务器协商好的加密方式对信息进行加密并发送 , 服务器收到信息后利用密钥进行解密即可 。
从HTTP到HTTPS,原来这么简单文章插图
从HTTP到HTTPS,原来这么简单文章插图
通过上图看出点什么没?发送的内容虽然已经加密了 , 但是加密方式和密钥依然是明文 , 中间人如果拦截到第一次通信的话 , 它就可以拿着拦截到的加密方式和密钥就可以对后面的通信进行解密 , 修改内容后再以同样的加密方式和密钥进行加密后发送个服务器 。
从HTTP到HTTPS,原来这么简单文章插图
从HTTP到HTTPS,原来这么简单文章插图
②非对称加密
针对前面所说的情况我们可以使用非对称加密对密钥进行加密处理 。 同样首先 A 发送一条信息告诉服务器我要和你通讯了 , 服务器收到这条信息后先利用非对称加密(例如RSA)生成一个公钥和一个私钥 , 然后服务器将公钥发发送给 A, A 在本地生成一个密钥并利用服务器发回的公钥进行加密 , 完成后发送给服务器 , 服务器收到后利用私钥进行解密得到对称加密的密钥 , 最后双方利用约定好的加密方式和密钥进行通信 。