Http&Https

Http&Https

什么是协议?

  • 计算机之间为了实现网络通信而达成的一种“约定”或者“规则”。

HTTP协议是什么?

  • 超文本传输协议,它是从WEB服务器传输超文本标记语言(HTML)到本地浏览器的传送协议。HTPP有多个版本,目前广泛使用的是HTTP/1.1版本。
  • 用于客户端和服务器端之间的通信

TCP/IP 协议族

  • TCP/IP 是互联网相关的各类协议族的总称
  • HTTP协议属于TCP/IP 协议族的子集
TCP/IP 的分层管理
  • 应用层: 决定了向用户提供应用服务时通信的活动。

  • 传输层: 提供处于网络连接中的两台计算机之间的数据传输

  • 网络层: 处理在网络上流动的数据包,在众多的路径中选择一条传输路线。

  • 数据链路层: 用来处理连接网络的硬件部分。

  • TCP/IP层次化的好处: 如果互联网只由一个协议统筹,某个地方需要改变设计时,就必须把所有部分整体替换掉。而分层之后只需把变动的层替换掉即可。把各层之间的接口部分规划好之后,每个层次内部的设计就能够自由改动了。

HTTP特点

  • http协议支持客户端/服务端模式,也是一种请求/响应模式的协议。
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。
  • 灵活:HTTP允许传输任意类型的数据对象。传输的类型由Content-Type加以标记。
  • 无连接:限制每次连接只处理一个请求。服务器处理完请求,并收到客户的应答后,即断开连接,但是却不利于客户端与服务器保持会话连接,为了弥补这种不足,产生了两项记录http状态的技术,一个叫做Cookie,一个叫做Session。(HTTP/1.1 和一部分的 HTTP/1.0 想出了持久连接, 持久连接的特点是,只要任意一端 没有明确提出断开连接,则保持TCP连接状态。HTTP/1.1 中,所有的连接默认都是持久连接)
  • 无状态:HTTP 协议自身不对请求和响应之间的通信状态进行保存。这是为了 更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设 计成如此简单的。于是引入了Cookie技术,使得Http具有保持状态功能。(客户端发起请求后, 服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。)

HTTP报文

请求报文
  • 请求行(包含请求方法,请求URI和HTTP 版本)
  • 请求头(包含表示请求各种条件和属性的各类首部。)
  • 请求体
响应报文
  • 响应行(HTTP 版本,状态码,状态文字)
  • 响应头包含表示响应的各种条件和属性的各类首部。
  • 响应体
状态码

1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错

Https

  • HTTP+ 加密(SSL) + 认证(CA证书) + 完整性保护(MD5加盐散列) =HTTPS
  • HTTPS 是身披 SSL 外壳的 HTTP
  • HTTPS 并非是应用层的一种新协议。只是HTTP通信接口部分用SSL和TLS协议替而已。
HTTP 的缺点:
  • 通信使用明文(不加密),内容可能会被窃听
  • 不验证通信方的身份,因此有可能遭遇伪装(CA证书)
  • 无法证明报文的完整性,所以有可能已遭篡改;请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击(MD5 和 SHA-1 等散列值校验的方法)
数据的加密
  • 对称加密:加密和解密数据使用同一个密钥。这种加密方式的优点是速度很快。
  • 非对称加密:加密和解密使用不同的密钥,叫公钥和私钥。数据用公钥加密后必须用私钥解密,数据用私钥加密后必须用公钥解密。一般来说私钥自己保留好,把公钥公开给别人,让别人拿自己的公钥加密数据后发给自己,这样只有自己才能解密。 这种加密方式的特点是速度慢,CPU 开销大,常见非对称加密算法有RSA。
  • Hash:hash是把任意长度数据经过处理变成一个长度固定唯一的字符串,但任何人拿到这个字符串无法反向解密成原始数据(解开你就是密码学专家了),Hash常用来验证数据的完整性。常见Hash算法有MD5、SHA1、SHA256。
HTTPS的原理
  • 思路一(采用非对称加密):
    A和B通信, B有一对密钥(公钥和私钥),B把公钥公开;
    A可以用B的公钥对信息进行加密,B收到信息后用私钥解密;
    同理,A也有一对密钥(公钥和私钥),A把公钥公开;
    B可以用A的公钥对信息进行加密,B收到信息后用私钥解密;
    这样A和B可以愉快的交流;但是非对称加密的效率特别低下;

  • 思路二(对称加密+非对称加密):
    A和B通信,A有对称密钥;
    B有一对密钥(公钥和私钥),B把公钥公开;
    A用B的公钥对自己的对称密钥进行加密,B收到加密后的密钥后用私钥解密,然后得到对称密钥;
    接下来,A和B就可以用对称密钥进行交流了;

  • HTTPS 采用了混合加密机制(对称加密+非对称加密)

证明公开密钥正确性的证书
  • 公钥加密方式还是存在着一些问题, 那就是无法证明公钥本身就是货真价实的公钥。比如,正准备和某台服务器建立非对称加密方式下的通信时,如何证明收到的公钥就是原本预想的那台服务器发行的公钥。或许在公钥传输途中,真正的公钥已经被攻击者替换掉了。 为了解决上述问题,可以使用由数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公钥证书。

  • C(数字证书认证机构) 处于A与B双方都可信赖的第三方机构的立场上。

  • C公开了自己的公钥。B找C做了一个证书,证书上有自己的名字、公钥、公证人C的名字,同时把这些信息通过 Hash (sha256)处理后请求 C用自己的私钥进行加密(为什么用 Hash 处理?因为东西太多非对称加密很费时)得到数字签名,也放到证书上。于是B把证书(B的公钥+C认证后的数字签名)通报给所有人。A这次得到了证书,发现上面的公证人是C,于是先用C的公钥对证书上被C 的私钥加密后的字段进行解密,得到元素数据的 Hash。再对证书上的公钥进行 Hash和刚刚解密的 Hash 进行比对。如果比对成功表示证书上的信息无误,且是由C担保的。这时候A确信证书上的公钥就是B的。任何人因为没有C的私钥都无法伪造证书。

为什么不一直使用 HTTPS ?
  • 与纯文本通信相比,加密通信会消耗更多的CPU及内存资源。如果每次通信都加密,会消耗相当多的资源。因此,非敏感信息则使用 HTTP 通信,包含个人信息等敏感数据时,才利用 HTTPS 加密通信。
  • 证书必须向认证机构(CA)购买,价格高昂。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值