计算机网络-002-HTTP 和HTTPS的区别

HTTP与HTTPS介绍

  • 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息

为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密

HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全

HTTPS协议的主要作用可以分为两种:

  • 一种是建立一个信息安全通道,来保证数据传输的安全;
  • 另一种就是确认网站的真实性。

HTTPS和HTTP的主要区别
1、https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用

​ 2、http是超文本传输协议,信息是明文传输https则是具有安全性的SSL/TLS加密传输协议

​ 3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443

​ 4、http的连接很简单,是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

HTTPS的流程

1.什么是HTTP协议?

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议),位于TCP/IP模型当中的应用层。HTTP协议通过请求/响应的方式,在客户端和服务端之间进行通信。HTTP协议的信息传输完全以明文的方式,不做任何加密,相当于在网络上“裸奔”,所以容易遭受中间人的恶意截获甚至篡改(中间人攻击)。

img

2.什么是HTTPS协议?

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

3.对称加密和非对称加密

对称加密

对称加密采用了对称密码编码技术,它的特点是文件加密和解密都是使用相同的密钥。这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,而且对计算机功能要求也没有那么高。

非对称加密

与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。

公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

4.HTTPS流程

1.服务端首先把自己的公钥(Key1)发给证书颁发机构,向证书颁发机构申请证书。

img

2.证书颁发机构自己也有一对公钥私钥。机构利用自己的私钥来加密Key1,并且通过服务端网址等信息生成一个证书签名,证书签名同样经过机构的私钥加密。证书制作完成后,机构把证书发送给了服务端。

img

3.当客户端向服务端请求通信的时候,服务端不再直接返回自己的公钥(Key1)而是把自己申请的证书返回给客户端。

4.客户端收到证书以后,要做的第一件事情是验证证书的真伪。需要说明的是,各大浏览器和操作系统已经维护了所有权威证书机构的名称和公钥。所以客户端只需要知道是哪个机构颁布的证书,就可以从本地找到对应的机构公钥,解密出证书签名

客户端对证书验证成功后,就可以放心地再次利用机构公钥,解密出服务端的公钥Key1

客户端本地如何验证证书呢?
证书本身就已经告诉客户端怎么验证证书的真伪,也就是证书上写着如何根据证书上的方法自己生成一个证书编号,如果生成的证书编号与证书上的证书编号相同,那么证明这个证书是真实的。同时,为避免证书编号本身又被调包,所以使用第三方机构的私钥进行加密。
证书就是HTTPS中的数字证书,证书编号就是数字签名,而第三方机构就是指数字证书签发机构(CA)

img

5.客户端生成自己的对称加密密钥Key2,并且用服务端公钥Key1加密Key2,发送给服务端。

img

6.服务端用自己的私钥解开加密,得到对称加密密钥Key2。于是客户端与服务端开始用Key2进行对称加密的通信。

img

5、HTTP通过什么保证安全传输?

目前大多数网站和app的接口都是采用http协议,但是http协议很容易就可以通过[抓包工具]监听到内容,甚至篡改内容,为了保证数据不被别人看到和修改,可以通过以下几个方面避免:

  • 重要数据加密 比如用户名和密码,我们需要加密,这样即使被抓包监听,他们也不知道原始数据是什么。简单的md5是可以暴力破解的,所以加密方式越复杂就越安全,可以根据需要自由组合 常见的是 md5(不可逆),aes(可逆)

  • 非重要数据要签名 签名的目的是防止篡改,比如http://www.xxx.com/getnews?id=1,获取 id=1的内容,如果不签名通过 id=2,就可以获取 id=2的内容。怎样签名呢?通常使用sign,比如原链接请求的时候加一个sign参数,sign=md5(id=1),服务器接受到请求,验证sign是否等于md5(id=1),如果等于说明正常请求。这会有个弊端,假如规则被发现,那么就会被伪造,所以适当复杂一些,还是能够提高安全性的。

  • 登录态怎么做 http是无状态的,也就是服务器没法自己判断两个请求是否有联系,那么登录之后,以后的接口怎么判断是否登录呢?简单的做法在数据库中存一个token(名字随意),当用户调用登录接口成功的时候就将该字段设一个值,(比如aes(过期时间)),同时返回给前端,以后每次前端请求带上该值,服务器首先校验是否过期,其次校验是否正确,不通过就不让登录

  • 那看来你了解的不错,现在主流的是https,你来说说https是什么

    • HTTP+SSL(TLS)

SSL握手的过程

  1. 客户端发送请求 Client Hello 向服务端传输自己支持的加密套件、SSL版本信息和一个随机生成数Random1
  2. 服务端发送响应 Server Hello 从客户端的套件中确认一个加密方案然后生成一个随机数Random2,将加密方案和随机数Random2返回给客户端。
  3. 服务端再发送自己的证书和公钥给客户端.
  4. 客户端接收到证书后,验证该证书的合法性,如果验证通过会取出证书中的服务端公钥,并且生成一个随机数Random3,通过公钥加密后返回给服务端
  5. 服务端用自己的私钥解密获得Random3,此时服务器和客户端都有了三个随机数,根据Random1+Random2+Random3,还有前面确定的加密方案生成一个密钥
  6. 后续的传输就使用该密钥进行对称加密就可以了。

请添加图片描述

http1.x 和http2.0的区别

1、二进制分帧(Binary Framing)

HTTP2.0和HTTP1.X都是基于TCP/IP进行通信的。但是HTTP2.0通过在传输层(TCP)之上增加了二进制分帧层,简单来说就是把之前HTTP1.X的Header和body分成一个或者多个二进制帧进行传输,这样做有什么好处呢?首先HTTP1.X要识别首行、头部和body这3部分就要做协议解析,解析是基于文本,而文本的形式有多样性,解析考的场景多,而采用二进制只有0和1的组合,解析方便。而且多帧传输配合可以并发的多路复用提高性能

2、多路复用(MultiPlexing)

几个前提概念

  • 流(stream):已建立连接上的双向字节流。
  • 消息:与逻辑消息对应的完整的一系列数据帧。
  • 帧(frame):HTTP2.0通信的最小单位,每个帧包含帧头部,至少也会标识出当前帧所属的流(stream id)。

多路复用也叫连接共享。多路复用实际上就是多个HTTP请求复用一个TCP链接通道,在这个通道里面传输以帧为单位的流数据,这些流数据是可以并发的而且数量不限。实际上就是一个TCP通道里面实现多个HTTP并发请求。

多路复用也有可能会导致关键请求阻塞。通过设置HTTP数据流的优先级,提高关键请求的优先级,优先级高会被服务器优先处理和给客户端发送响应。

这种单连接多资源的方式,减少服务端的链接压力,内存占用更少,连接吞吐量更大;而且由于 TCP 连接的减少而使网络拥塞状况得以改善,同时慢启动时间的减少,使拥塞和丢包恢复速度更快。

3、问题:HTTP2.0的多路复用和HTTP1.1的长链接有什么不同?

长连接:同一个域名访问同一个文件的多个请求都可以复用一个tcp连接(不用像1.0一样 每次请求都需要重新建立连接)
依然存在的问题:

1.多个请求只能被串行处理(数据基于文本,只能按顺序传输);
2.访问多个不同的文件依然会建立多个请求。

多路复用:同一个域名访问多个文件的请求也可以复用一个tcp连接,且多个请求可以被并行处理。
并行实现原理:http2.0引入二进制数据帧和流的概念(数据帧对每一个数据进行标识,可以不按顺序传输,从而实现并行)

4、Header压缩

HTTP 2.0 采用Hpack算法对请求的Header进行压缩,服务器和客户端双方各自维护一份Header表,这个表由静态表和动态表组成.静态表由一个预定义的头部字段静态列表组成。 动态表格由按先入先出顺序维护的头部字段列表组成。 动态表中的第一个和最新条目处于最低索引处,并且动态表的最旧条目处于最高索引处。

5、服务端推送

同SPDY一样,HTTP2.0也具有server push功能。服务器推送是在客户端之前发送数据的机制。在HTTP/2中,服务端可以对客户端的一个请求发送多个响应。

Server Push的功能前面已经提到过,http2.0能通过push的方式将客户端需要的内容预先推送过去,所以也叫“cache push”。另外有一点值得注意的是,客户端如果退出某个业务场景,出于流量或者其它因素需要取消server push,也可以通过发送RST_STREAM类型的frame来做到。

6、更安全的SSL

HTTP2.0使用了TLS的拓展ALPN来做协议升级,除此之外加密这块还有一个改动,HTTP2.0对TLS的安全性做了近一步加强,通过黑名单机制禁用了几百种不再安全的加密算法,一些加密算法可能还在被继续使用。如果在SSL协商过程当中,客户端和server的cipher suite没有交集,直接就会导致协商失败,从而请求失败。在server端部署http2.0的时候要特别注意这一点。

7、重置连接表现更好

很多app客户端都有取消图片下载的功能场景,对于http1.x来说,是通过设置tcp segment里的reset flag来通知对端关闭连接的。这种方式会直接断开连接,下次再发请求就必须重新建立连接。http2.0引入RST_STREAM类型的frame,可以在不断开连接的前提下取消某个request的stream,表现更好>。

链接:https://www.jianshu.com/p/82d66f4795e5

SSL是什么

SSL即Secure Sockets Layer,翻译成中文是安全套接字协议SSL及其TLS是为网络通信提供安全及数据完整性的一种安全协议。SSL证书是遵守SSL协议的一种数字证书,由正规的数字证书颁发机构签发主要用来数据加密传输和服务器身份认证,是实现网站https加密传输的唯一途径。

网站部署SSL证书的好处:

1、保护访问者的数据

SSL证书的主要工作是保护访问者发送给您的数据。在没有这种加密的情况下,网络罪犯可以通过数据包嗅探攻击在用户的计算机和Web服务器之间传输数据时窃取用户的数据。

2、防止您的网站被打上不安全的烙印

您可能已经看到,对于所有未通过HTTPS的网站,Google都会在地址栏中显示“不安全”标签。这会向所有访问者发送关于您的网站的错误消息,并使他们感到他们正在处理一些伪劣业务。通过安装SSL证书,您可以从中保存您的网站。
链接:https://www.zhihu.com/question/327064588/answer/2372279019

猜你喜欢

转载自blog.csdn.net/weixin_43673156/article/details/124336604