Https协议到底比Http多些什么

711 阅读12分钟

Http简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是一个基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果,用于从万维网(www:World Wide Web)服务器传输超文本到本地浏览器的传送协议。

HTTP是一个属于应用层的面向对象的协议,作用于客户端-服务器架构为上。浏览器作为HTTP客户通过URL向HTTP服务端WEB服务器发送所有请求。Web服务器根据接受到的请求后,向客户端发送响应信息。

http特点:

  1.  简单快速: 客户向向服务端发送请求服务时,只需传送请求方法和路径。请求方法常用的有:GET,HEAD,POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度快。
  2. 灵活:HTTP允许传递任意类型的数据对象,使得正在传输的类型由Content-Type加以标记正在传输的类型由Content-Type加以标记。
  3. 无连接:无连接即限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  4. 无状态:HTTP协议是无状态协议。无状态指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则必须重新传输,这样就导致每次传输的信息量增大。另一方面,在服务器不需要先前的信息时,他的应答就更快。

以上简单的说了下HTTP协议的相关内容,那么关于HTTP有什么弊端呢?下面我再简单的说一下。。。

HTTP弊端:

当我们往服务器发送比较隐秘的数据(比如银行卡,身份证)时,,如果使用HTTP进行通信。那么安全性将得不到保障。

首先数据在传输的过程中,数据可能被中间人找到,那么数据就会被中间人窃取。

其次数据被中间人拿到后,中间人可能对数据进行修改或者替换,然后发往服务器。

最后服务器收到数据后,中间人可能对数据进行修改或者替换,然后发往服务器。

总结下来,HTTP存在三个弊端

  • 无法保证消息的保密性
  • 无法保证消息的完整性和准确性
  • 无法保证消息来源的可靠性

那么我们就需要解决这些弊端,这时候HTTPS就登场了。。

HTTPS:

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。其是在HTTP上建立SSL加密层,并对传输数据进行加密。HTTPS通过非对称加密算法可以使得我们传的明文信息,无法通过逆推得出明文。

HTTP 与 HTTPS 的区别

  • HTTP 是明文传输,HTTPS 通过 SSL\TLS 进行了加密
  • HTTP 的端口号是 80,HTTPS 是 443
  • HTTPS 需要到 CA 申请证书,一般免费证书很少,需要交费
  • HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

工作原理


这里把Https 建立到断开分为6个阶段,12个过程。下面来对12个过程一一做出解释

    1. 客户端---Hello: 客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本,加密组件列表(所使用的加密算法及密钥长度等)
    2. 服务器--Hello: 服务器 可进行SSL通信,会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件。服务器的加密组件加密组件内容时从接受到的客户端加密组件内筛选出来的。
    3. 服务器--发证书: 服务器发送证书报文。报文中包含公开密钥证书。
    4. 服务器--我说完了: 最后服务器发送Server Hello Done 报文通知客户端,最初阶段的SSL握手协商结束。
    5. 客户端--发送密钥: SSL第一次握手结束之后,客户端以Client Key Exchange 报文作文回应。报文包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文以用步骤3中的公钥进行加密。
    6. 客户端--就用这个密钥了:该报文会提示服务器,在此报文之后的通信会采用Pre-master secret 密钥进行加密
    7. 客户端--我说完了:该报文包含连接至今全部报文的整体校验值。这次握手协商是否成功,要以服务器是否能够正确解密该报文作为判定标准
    8. 服务器--发送Change  Cipher Spec 报文(我正在接受密钥)
    9. 服务器--发送Finished报文(我接受完密钥了)
    10. 客户端--开始发送正文:服务器发送Http请求,发送相关内容
    11. 服务器--开始接收正文:客户端接收Http请求,并开始处理相关内容
    12. 客户端--断开连接:最后由客户端断开连接。断开连接时,发送close_notify报文。上图做了一些省略,这步之后再发送Tcp Fin 报文来关闭与TCP的通信

另外,在以上流程图中,发送数据时会附加一种叫MAC(message Authentication Code)的报文摘要。MAC能够查知报文是否遭到篡改,从而保证报文的完整性。

Https的理论原理:

https采用了一些加解密,数字证书,数字签名来实现。下面介绍一个这些技术的基本概念

对称加密与非对称加密

为了保证消息的保密性,就需要用到加密和解密。加解密算法目前主流的分为对称加密和
非对称加密。 
  1. 对称加密(共享密匙加密):客户端和服务器共用一个密匙用来对消息加解密,这种方
    式称为对称加密。客户端和服务器约定好一个加密的密匙。客户端在发消息前用该密匙对
    消息加密,发送给服务器后,服务器再用该密匙进行解密拿到消息。 

图示模拟过程

 这里将小红看成客户端 男朋友看作服务器 他们公用一个密钥进行加密和解密

但是对称密钥也有很多缺点对称加密秘钥泄露风险很高,秘钥固定,导致很容易被解开那么有什么方式去进行加密传输,比如说每次用的秘钥都不相同,每次解密的秘钥也都不相同,或者其他的情况来增加安全性呢?

2.非对称加密(公有密匙加密):既然对称加密中,密匙那么容易泄露,那么我们可以采用一种非对称加密的方式来解决。

  采用非对称加密时,客户端和服务端均拥有一个公有密匙和一个私有密匙。公有密匙可以
对外暴露,而私有密匙只有自己可见。使用公有密匙加密的消息,只有对应的私有密匙才能解开。反过来,使用私有密匙加密的消息,只有公有密匙才能解开。这样客户端在发送消息前,先用服务器的公匙对消息进行加密,服务器收到后再用自己的私匙进行解密


这里小红与她的男友采用非对称加密 即 使用男友向外公开的公钥(图中描述有误)进行加密,男友可用自己的私钥进行解密。即在服务器这一次生成公钥 以及私钥 ,私钥自己留存。然后将公钥 进行对外公开,想与服务器端通信的客户端用公钥 进行加密发送给具有私钥的服务器,服务器用自己的私钥就可以进行密文解密,最终拿到明文。 

简单的介绍一下非对称加密RSA加密算法:

RSA 是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被 ISO 推荐为公钥数据加密标准。 今天只有短的 RSA 钥匙才可能被强力方式解破。到 2008 年为止,世界上还没有任何可靠的攻击 RSA 算法的方式。只要其钥匙的长度足够长,用 RSA 加密的信息实际上是不能被解破的。但在分布式计算和量子计算机理论日趋成熟的今天,RSA 加密安全性受到了挑战。

非对称加密的优点:

非对称加密采用公有密匙和私有密匙的方式,解决了 http 中消息保密性问题,而且使得私有密匙泄露的风险降低。因为公匙加密的消息只有对应的私匙才能解开,所以较大程度上保证了消息的来源性以及消息的准确性和完整性.

非对称加密的缺点:

非对称加密时需要使用到接收方的公匙对消息进行加密,但是公匙不是保密的,任
  • 何人都可以拿到,中间人也可以。那么中间人可以做两件事,第一件是中间人可以
    在客户端与服务器交换公匙的时候,将客户端的公匙替换成自己的。这样服务器拿
    到的公匙将不是客户端的,而是服务器的。服务器也无法判断公匙来源的正确性。
    第二件是中间人可以不替换公匙,但是他可以截获客户端发来的消息,然后篡改,
    然后用服务器的公匙加密再发往服务器,服务器将收到错误的消息。 
  • 非对称加密的性能相对对称加密来说会慢上几倍甚至几百倍,比较消耗系统资源。
    正是因为如此,https 将两种加密结合了起来。
对于非对称加密的性能慢的解决方案是:用一个密钥来加密通信,那个对称加密算法是非
常快的,但是苦于密钥无法安全传输, 现在有了 RSA ,可以结合一下, 分两步走 (1)生成一个对称加密算法的密钥, 用 RSA 的方式安全发给对方, (2) 随后就不用 RSA了, 只用这个密钥,利用对称加密算法来通信。对于中间人劫持的方式,我们需要考虑到使用数字证书与数字签名。

数字证书与数字签名

为了解决非对称加密中公匙来源的不安全性。我们可以使用数字证书和数字签名来解决。

1.数字证书的申请

在现实生活中,有一些专门的权威机构用来颁发数字证书,我们称这些机构为认证中心(CA Certificate Authority),我们(服务器)可以向这些CA来申请数字证书

申请的过程大致是:

自己本地生成一对密钥,然后拿着自己的公钥以及其他信息去CA申请数字证书。

CA在拿到这些信息后,会生成一种单向Hash算法(比如常见的MD5)对这些信息进行加密,加密之后我们称之为摘要。

单向Hash算法有一种特点就是单向不可逆,只要原始内容有一点变化,加密后的数据都将会是千差万别,这样就防止了信息被篡改。

生成摘要后还不算完,CA 还会用自己的私匙对摘要进行加密,摘要加密后的数据我们称之为数字签名。 

最后,CA 将会把我们的申请信息(包含服务器的公匙)和数字签名整合在一起,由此而
生成数字证书。然后 CA 将数字证书传递给我们。

2.数字证书怎么起作用 

  服务器在获取到数字证书后,服务器会将数字证书发送给客户端,客户端就需要用 CA 的
公匙解密数字证书并验证数字证书的合法性。那我们如何能拿到 CA 的公匙呢?我们的电
脑和浏览器中已经内置了一部分权威机构的根证书,这些根证书中包含了 CA 的公匙。            
之所以是根证书,是因为现实生活中,认证中心是分层级的,也就是说有顶级认证中心,
也有下面的各个子级的认证中心,是一个树状结构,计算机中内置的是最顶级机构的根证
书,不过不用担心,根证书的公匙在子级也是适用的。
客户端用 CA 的公匙解密数字证书,如果解密成功则说明证书来源于合法的认证机构。解
密成功后,客户端就拿到了摘要。
此时,客户端会按照和 CA 一样的 Hash 算法将申请信息生成一份摘要,并和解密出来的那份做对比,如果相同则说明内容完整,没有被篡改。最后,客户端安全的从证书中拿到服务器的公匙就可以和服务器进行安全的非对称加密通信了。服务器想获得客户端的公匙也可以通过相同方式。