HTTP基础与HTTPS加密过程

1、前言

这篇文章主要是对HTTP/HTTPS的部分总结,由HTTP协议基础知识引入HTTP协议的缺陷,进而描述HTTPS是如何解决HTTP的缺陷以及HTTPS的工做原理html

2、HTTP基础

一、HTTP协议请求响应模型:

HTTP协议永远都是客户端发起请求,服务器回送响应算法

二、HTTP协议特色

  • 支持客户/服务器模式
  • 简单快速
  • 无链接:无链接的含义是每一次HTTP请求都要经历TCP的链接的创建和断开;(为解决TCP链接问题,HTTP/1.1提出了持久链接的方法)
  • 无状态:HTTP协议对请求处理没有记忆能力,服务器不知道客户端的状态。即客户端发送HTTP请求,服务器作出回应,返回数据,可是服务器不作任何记录;
    • 优势:若是服务器不须要先前传送的信息时,服务端应答就快;
    • 缺点:若是后续处理须要前面的信息,则它必须重传,这样可能致使每次链接传送的数据量增大;(能够经过Session/Cookie技术解决)

HTTP协议无状态的特色致使了:没法实如今客户端没有发起请求的时候,服务器将消息推送给客户端。 服务器之因此没法主动发送消息,是由于HTTP协议是一个无状态的协议,同一个客户端的此次请求和上次请求是没有对应关系。 这个缺陷能够用WebSocket协议解决,但这不在本文讨论范围。安全

三、HTTP协议格式

(1) 请求部分

HTTP请求由三部分组成,分别是:请求行请求头部请求正文服务器

  • 请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本。如:GET /index.html HTTP/1.1
  • 请求头部按照头部字段名称: 头部字段值的格式每行一条;
  • 请求正文请求头部之间存在一个空行;

(2) 响应部分

HTTP响应由三部分组成,分别是:响应行响应头部响应正文网络

  • 响应行以HTTP协议版本、响应状态码、响应状态描述三部分组成 如:HTTP/1.1 200 OK
  • 响应头部格式同请求头部,但字段名称略有不一样;
  • 响应正文响应头部之间存在一个空行;

状态码归类session

状态码 状态描述
1xx 指示信息--表示请求已接收,继续处理
2xx 成功--表示请求已被成功接收、理解、接受
3xx 重定向--要完成请求必须进行更进一步的操做
4xx 客户端错误--请求有语法错误或请求没法实现
5xx 服务器端错误--服务器未能实现合法的请求

经常使用状态码解释函数

状态码 状态解释
200 OK 客户端请求成功
400 Bad Request 客户端请求有语法错误,不能被服务器所理解
401 Unauthorized 请求未经受权,这个状态代码必须和WWW-Authenticate头部一块儿使用
403 Forbidden 服务器收到请求,可是拒绝提供服务
404 Not Found 请求资源不存在,eg:输入了错误的URL
500 Internal Server Error 服务器发生不可预期的错误
503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

四、HTTP协议请求方法

目前使用最普遍的HTTP1.1版本,支持如下几个请求方法: post

五、HTTP缺点

  1. 通讯使用明文,内容可能会被窃听
  2. 没法证实报文的完整性,有可能遭到篡改
  3. 不验证通讯方的身份,有可能遭遇假装

以上这些问题不只是HTTP协议独有,其余未加密的明文传输协议一样也会存在这类问题。网站

3、HTTPS基础

HTTPS并不是是应用层的一种新协议。只是HTTP通讯接口部分用SSL(Secure Scket Layer)和TLS(Transport Layer Security)协议代替而已。HTTP直接和TCP通讯。当使用SSL时,则演变成先和SSL通讯,再由SSL和TCP通讯了。所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP。加密

HTTPS 协议的主要功能基本都依赖于TLS/SSL协议,TLS/SSL的功能实现主要依赖于三类基本算法:非对称加密对称加密散列函数

  • 非对称加密实现身份认证和密钥协商;
  • 对称加密算法采用协商的密钥对数据加密;
  • 基于散列函数验证信息的完整性。

一、对称加密、非对称加密、CA和证书

了解HTTPS工做原理以前,须要先有关于对称加密非对称加密CA和证书的知识。

(1) 对称加密与非对称加密

  1. 对称加密 这种方式加密和解密同用一个密钥。加密和解密都会用到密钥。没有密钥就没法对密码解密,反过来讲,任何人只要持有密钥就能解密了。

对称加密有个明显的缺陷就是秘钥自己如何进行保密和安全传输呢?只要第三方窃取到秘钥,则能够轻易破解密文。解决办法就是经过非对称加密。

  1. 非对称加密 不一样于对称加密,非对称加密有一对秘钥,一个是保密的,称为私钥,一个是公开的,称为公钥。私钥加密的数据只有公钥才能解开,公钥加密的数据只有私钥才能解开,这个特性很是重要,由于不须要传输私钥了,而公钥是公开的,能够随便传播。常见的算法实现包括:RSA、DSA等。

非对称加密有个重大缺陷就是计算速度远慢于对称加密

(2) CA和证书

CACertificate Authority的缩写,也叫“证书受权中心”。它是负责管理和签发证书的第三方机构。

能够经过如下方式查看证书内的内容:

证书内至少包含 数字签名签名算法公钥有效时间等信息;

二、HTTPS如何解决HTTP存在的缺点

(1) 如何防止窃听

HTTP的一个缺陷就是明文传输,数据包被别人捕获以后就可获取其中的信息。但通过HTTPS传输的数据是通过加密的,而解密用的秘钥是通过双方协商的一次性秘钥,只有通讯双方持有。因此其余人即便抓到了HTTPS数据包,也没法看到其中的内容,从而起到防止窃听的做用。

(2) 如何防止假装

非对称加密方式存在的问题:就是没法证实公开密钥自己就是货真价实的公开密钥。HTTPS经过数字证书认证的方式防止假装

(3) 如何识别内容已被篡改

网络传输过程当中须要通过不少中间节点,虽然数据没法被解密,但可能被篡改。HTTPS经过校验数字签名来识别内容是否被篡改

所谓数字签名,就是对报文进行散列算出的数字摘要。即: 明文 -> 散列运算 -> 摘要 -> 私钥加密 -> 数字签名

服务器在发送报文以前作了3件的事

  • 用哈希算法对报文提取定长摘要;
  • 用私钥对摘要进行加密,做为数字签名;
  • 将数字签名附加到报文末尾发送给客户端;

客户端接收到报文后

  • 用公钥对服务器的数字签名进行解密;
  • 用一样的算法从新计算出报文的数字签名;
  • 比较解密后的签名与本身计算的签名是否一致,若是不一致,说明数据被篡改过;

一样,客户端发送数据时,经过公钥加密报文摘要,服务器用私钥解密,用一样的方法校验数据的完整性。

三、SSL/TLS 握手

SSL/TLS 握手:经过⾮对称加密协商出一次性对称加密的密钥,握手完成之后就经过协商出的对称加密的秘钥加密传输数据。因此HTTPS采用非对称加密对称加密并用的混合加密机制

之因此这样作,是出于对速度和安全性的折中考虑

  1. 非对称加密速度远远慢与对称加密,没法在以后的整个通讯中使用非对称加密;
  2. 若是使用服务器中保存的公钥和私有进行非对称加密,由于若是客户端使用公钥加密,只有服务端私有才可解密;若是在服务端使用私钥加密,则任何拥有公钥的人均可解密,没有安全可言。
方法 结构图 描述 优缺点
方案1
采⽤用对称加密来交换密钥 缺点:
1.若是不公开秘钥,对方没法解密;
2.若是公开秘钥,全部人均可以解密,没有安全可言;
方案2
单纯采⽤用⾮非对称加密算法 缺点:
1.没有认证过程,容易出现中间人攻击;
方案3
基于CA 和⾮非对称加密算法 优势:
1.由于校验证书的存在,防止了中间人攻击;
2.使用证书中的公钥完成非对称加密,保证数据安全;
方案4
基于⽅方案3,增长session key复杂度 缺点:
1.客户端与服务器在加密算法选择、算法实现等选择上,兼容性很差;
方案5
基于⽅方案4,增长加密算法协商,增长兼容性 优势:
1.防止中间人攻击;
2.非对称加密协商出对称加密的秘钥,既达到加密传输的目的,也保证了双方秘钥的惟一性;
3.协商过程当中的加密算法、版本号、加密套件等参数增长了兼容性;

一次完整的协商过程:

参考 这篇文章

从Server Hello到Server Done,有些服务端的实现是每条单独发送,有服务端实现是合并到一块儿发送。Sever Hello和Server Done都是只有头没有内容的数据。

4、有了HTTPS,为何有些网站仍是HTTP?

上面的内容解释了HTTPS是怎么解决HTTP缺点的,既然HTTPS是安全可靠的,为何不是全部的Web网站全都使用HTTPS呢?缘由至少有:

  1. 由于须要握手协商秘钥等信息,页面加载时间比使用HTTP要长;
  2. 加密和解密会消耗更多的CPU和内存资源
  3. 购买HTTPS所需证书也是一项开销;

因此,仅仅在包含我的信息等敏感数据时,才会使用HTTPS,尤为是企业提供的对外服务。若是是内网通讯时,HTTP会是更好的选择。

相关文章
相关标签/搜索