这篇文章主要是对HTTP/HTTPS
的部分总结,由HTTP协议基础知识
引入HTTP协议的缺陷
,进而描述HTTPS是如何解决HTTP的缺陷
以及HTTPS的工做原理
。html
HTTP协议永远都是客户端发起请求,服务器回送响应。算法
HTTP/1.1
提出了持久链接的方法)Session/Cookie
技术解决)HTTP协议无状态
的特色致使了:没法实如今客户端没有发起请求的时候,服务器将消息推送给客户端。 服务器之因此没法主动发送消息,是由于HTTP协议是一个无状态
的协议,同一个客户端的此次请求和上次请求是没有对应关系。 这个缺陷能够用WebSocket
协议解决,但这不在本文讨论范围。安全
HTTP请求由三部分组成,分别是:请求行
、请求头部
、请求正文
。服务器
请求行
以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本。如:GET /index.html HTTP/1.1
;请求头部
按照头部字段名称: 头部字段值
的格式每行一条;请求正文
与请求头部
之间存在一个空行;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 | 服务器当前不能处理客户端的请求,一段时间后可能恢复正常 |
目前使用最普遍的HTTP1.1版本,支持如下几个请求方法: post
以上这些问题不只是HTTP协议独有,其余未加密的明文传输协议
一样也会存在这类问题。网站
HTTPS并不是是应用层的一种新协议。只是HTTP通讯接口部分用SSL
(Secure Scket Layer)和TLS
(Transport Layer Security)协议代替而已。HTTP直接和TCP通讯。当使用SSL时,则演变成先和SSL通讯,再由SSL和TCP通讯了。所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP。加密
HTTPS 协议的主要功能基本都依赖于TLS/SSL协议
,TLS/SSL的功能实现主要依赖于三类基本算法:非对称加密
、对称加密
和散列函数
:
了解HTTPS工做原理以前,须要先有关于
对称加密
、非对称加密
、CA和证书
的知识。
对称加密有个明显的缺陷就是秘钥自己如何进行保密和安全传输呢?只要第三方窃取到秘钥,则能够轻易破解密文。解决办法就是经过非对称加密。
非对称加密有个重大缺陷就是计算速度远慢于对称加密。
CA是Certificate Authority
的缩写,也叫“证书受权中心”。它是负责管理和签发证书的第三方机构。
能够经过如下方式查看证书内的内容:
数字签名
、
签名算法
、
公钥
、
有效时间
等信息;
HTTP的一个缺陷就是明文传输
,数据包被别人捕获以后就可获取其中的信息。但通过HTTPS传输的数据是通过加密的
,而解密用的秘钥是通过双方协商的一次性秘钥,只有通讯双方持有。因此其余人即便抓到了HTTPS数据包,也没法看到其中的内容,从而起到防止窃听的做用。
非对称加密方式存在的问题:就是没法证实公开密钥自己就是货真价实的公开密钥
。HTTPS经过数字证书认证的方式防止假装
。
网络传输过程当中须要通过不少中间节点,虽然数据没法被解密,但可能被篡改。HTTPS经过校验数字签名来识别内容是否被篡改
。
所谓
数字签名
,就是对报文进行散列算出的数字摘要
。即:明文
->散列运算
->摘要
->私钥加密
->数字签名
服务器在发送报文以前作了3件的事:
客户端接收到报文后:
一样,客户端发送数据时,经过公钥加密报文摘要,服务器用私钥解密,用一样的方法校验数据的完整性。
SSL/TLS 握手:经过
⾮对称加密
协商出一次性对称加密
的密钥,握手完成之后就经过协商出的对称加密的秘钥加密传输数据
。因此HTTPS采用非对称加密
和对称加密
并用的混合加密机制
。
之因此这样作,是出于对速度和安全性的折中考虑:
非对称加密速度远远慢与对称加密
,没法在以后的整个通讯中使用非对称加密;方法 | 结构图 | 描述 | 优缺点 |
---|---|---|---|
方案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都是只有头没有内容的数据。
上面的内容解释了HTTPS是怎么解决HTTP缺点的,既然HTTPS是安全可靠的,为何不是全部的Web网站全都使用HTTPS呢?缘由至少有:
协商秘钥
等信息,页面加载时间比使用HTTP要长;因此,仅仅在包含我的信息等敏感数据时,才会使用HTTPS,尤为是企业提供的对外服务。若是是内网通讯时,HTTP会是更好的选择。