HTTP协议与HTTPS 协议

HTTP 协议

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

  • HTTP 是一个标准的客户端服务器模型(B/S)。客户机连接到服务器,然后向服务器发送请求,服务器回送响应,然后关闭连接。
  • HTTP是一个无状态的协议。无状态是指客户机(Web浏览器)和服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息。

HTTP工作原理

  一次HTTP操作称为一个事务,其工作整个过程如下:

1、地址解析
  如果一个HTTP客户端(通常是浏览器)请求这个页面:http://www.joes-hardware.com:80/tools.html。从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:

  • 协议名:http
  • 主机名:www.joes-hardware.com(之后需要域名系统DNS解析域名www.joes-hardware.com,得主机的IP地址。)
  • 端口:80
  • 对象路径:/tools.html

2、封装HTTP请求数据包
  把以上部分结合本机自己的信息,封装成一个HTTP请求数据包。

3、封装成TCP包,建立TCP连接(TCP的三次握手)
  在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接,因此,首先要建立TCP连接,TCP连接的默认端口号是80。

4、客户机发送HTTP请求命令
  建立连接后,客户端向Web服务器发送一个文本的请求报文(request),一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

5、服务器接受请求并返回HTTP响应
  Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应(response)由状态行、响应头部、空行和响应数据4部分组成。

6、释放连接TCP连接
  若connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求。

7、客户端浏览器解析HTML内容
  客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。空行表示头信息的发送到此结束。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

请求报文示例

  一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

POST /index.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/
Content-Length:25
Content-Type:application/x-www-form-urlencoded
 
username=aa&password=1234

请求行:请求方法 + URI协议 + 协议和协议的版本版本

  请求的第一行请求行,由请求方法、统一资源标识符(URI:Uniform Resource Identifier)协议和协议/协议版本组成,以空格分隔,并以回车换行作为结尾。

POST /index.php HTTP/1.1
  • 请求方法:POST
  • URI协议:/index.php
  • 协议/协议版本:HTTP/1.1
请求方法

  在 HTTP 协议中,HTTP 请求可以使用多种请求方法,这些方法指明了要以何种方式来访问 Request-URI 所标识的资源。常用的请求方法有:

  • GET:请求指定的文档
  • HEAD: 仅请求文档的标头信息
  • POST: 在这种请求中,服务器会接受客户机的某些数据,例如 CGI 程序的表单输入
  • PUT:使用客户机数据替换服务器文档的内容

请求头

  每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

HTTP常用的请求头信息:

  • User-Agent:请求载体的身份标识。客户机软件的名称和版本。
  • Connection:请求完毕后,是断开连接(close)还是保持连接(keep alive)。
  • Accept:客户机可以接受的文件类型。
  • Authorization:客户机向服务器证明其身份时使用,其中包含用户名和密码等信息。
  • Referer:用户单击链接时所链接文档的 URL。
  • Host:所请求资源的 Internet 主机和端口号。

请求数据

  如果客户机发送 POST 或 PUT 请求,则可以在请求标头和空白行之后发送数据。如果客户机发送 GET 或 HEAD 请求,则不发送数据;客户机将等待服务器的响应。

HTTP响应示例

  在接收和解释请求消息后,服务器会返回一个 HTTP 响应消息。与 HTTP 请求类似,HTTP 响应也是由三个部分组成,分别是:状态行、消息报头和响应正文。

HTTP/1.1 200 OK
Date: Sun, 17 Mar 2013 08:12:54 GMT 
Server: Apache/2.2.8 (Win32) PHP/5.2.5 
X-Powered-By: PHP/5.2.5 
Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/ 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Content-Length: 4393 
Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 
Content-Type: text/html; charset=utf-8

<html> <head> <title>HTTP响应示例<title> </head> <body> Hello HTTP! </body> </html>

状态行

  状态行由协议版本、数字形式的状态代码,及相应的状态描述组成,各元素之间以空格分隔,结尾时回车换行符。

状态码

  当客户机发出请求时,服务器将返回状态码,这是一个三位数字的代码。共有四类状态码:

  • 100 - 199 范围内的状态码表示临时响应。
  • 200 - 299 范围内的状态码表示事务成功。
  • 300 - 399范围内的状态码表示所请求的文档已被移走,因而无法检索到其 URL。
  • 400 - 499 范围内的状态码表示客户机发生错误。
  • 500 及500 以上的状态码表示服务器无法执行请求,或者发生错误。

常用的 HTTP 状态码:

  • 200:很好;传输成功。这不是错误。
  • 302:已找到。重定向到新的 URL。原来的 URL已被移除。这不是错误;大多数浏览器将显示新的页面。
  • 304:使用本地副本。如果一个页面已经位于浏览器的高速缓存中,当再次请求该页面时,某些浏览器(例如 Netscape Navigator)会将浏览器高速缓存副本的“last-modified”时间标记转发给 Web服务器。如果服务器上的副本没有浏览器上的副本新,服务器将返回 304 代码,而不是返回请求的页面,以减少不必要的网络通信流量。这不是错误。
  • 401:未授权。用户请求了一个文档,但未提供有效的用户名或口令。
  • 403:禁止。禁止访问此 URL。
  • 404:未找到。请求的文档不在服务器上。返回此代码的另外一种情况是,管理员对服务器进行了保护文档的设置,当未经授权的用户请求该文档时,将返回该文档不存在的信息。
  • 500:服务器错误。服务器发生了错误。服务器管理员应查看服务器错误日志,了解具体原因。

响应头

  响应标头包含有关服务器的信息,以及有关随附文档的信息。常用的响应头信息:

  • Context-Type:服务器响应回客户端的数据类型。
  • Server:Web 服务器的名称和版本。
  • Date:当前日期(格林威治标准时间)。
  • Last-modified:上次修改文档的日期。
  • Expires:文档到期的日期。
  • Content-length:随附数据的长度(以字节为单位)。
  • Content-type:随附数据的 MIME 类型。
  • WWW-authenticate:在验证时使用,其中的内容用于告诉客户机软件需要提供哪些验证信息(例如用户名和密码)。

响应正文

  服务器在最后一个标头字段后发送一个空白行,然后发送文档数据。

Http工作原理 | 超文本传输协议 | http的工作原理


HTTPS协议

  HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

  HTTPS 并非是应用层的一种新协议,只是 HTTP 通信接口部分用 SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。通常,HTTP 直接和 TCP 通信。当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL 和 TCP 通信了。

数据加密的方式

  HTTP是属于应用层的协议,它是基于TCP/IP的,所以它只是规定一些要传输的内容,以及头部信息,然后通过TCP协议进行传输,依靠IP协议进行寻址。
在这里插入图片描述
客户端发出请求,服务端进行响应。在整个过程中,没有任何加密的东西,所以它是不安全的,中间人可以进行拦截,获取传输和响应的数据,造成数据泄露。

1. 对称密钥加密

在这里插入图片描述
  加密和解密用同一个秘钥的加密方式叫做对称加密。

  • 密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES,RC5,3DES等。
  • 对称加密主要问题是共享秘钥,除你的计算机(客户端)知道另外一台计算机(服务器)的私钥秘钥,否则无法对通信流进行加密解密。可究竟怎样才能安全的转交?互联网上转发密钥时,如果通信被监听那么密钥就可会落入攻击者之手,同时也就失去了加密的意义。

2. 非对称密钥加密

  非对称加密会有一对秘钥:公钥和私钥。公钥加密的内容,只有私钥可以解开,私钥加密的内容,所有的公钥都可以解开,且根据公钥无法推知私钥,根据私钥也无法推知公钥。

  • 相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。
  • 私钥只保存在服务器端,公钥可以发送给所有的客户端。
    在这里插入图片描述

  在传输公钥的过程中,肯定也会有被中间人获取的风险,但在目前的情况下,至少可以保证客户端通过公钥加密的内容,中间人是无法破解的,因为私钥只保存在服务器端,只有私钥可以破解公钥加密的内容。

  现在我们还存在一个问题,如果公钥被中间人拿到篡改呢:

3.证书密钥加密

  非对称密钥公钥被掉包,是因为客户端无法分辨传回公钥的到底是中间人,还是服务器,这也是密码学中的身份验证问题。在HTTPS中,使用 数字证书 + 数字签名 来解决这个问题。数字证书可以保证数字证书里的公钥确实是服务器的,数字签名可以确保信息未被篡改。

数字签名

  • 鲍勃给苏珊写信,写完后,,鲍勃先用hash函数生成信件的摘要(digest),然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature),最后,鲍勃将这个签名,附在信件下面,一起发给苏珊。
  • 苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。
  • 苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。
数字证书

  数字签名有效的一个重要前提是,苏珊拿到的公钥确实是鲍勃的。这一点可以通过数字证书保证,数字证书由可信任的第三方机构证书授权(Certificate Authority, CA)中心发行。

  • 鲍勃去找证书中心为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。
    在这里插入图片描述
  • 苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。

数字签名、数字证书是什么?

HTTPS工作原理

在这里插入图片描述
客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤,如图所示。

1、客户端发起 HTTPS 请求
  客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。

2、服务端的配置
  采用 HTTPS 协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥,如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。

3、传送证书
  Web服务器收到客户端请求后,会将网站的证书信息(证书中包含服务器端的公钥)传送一份给客户端。这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。

4、客户端解析证书
  这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。

5、传送加密信息
  这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

6、服务端解密信息
  服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。

7、传输加密后的信息
  这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。

8、客户端解密信息
  客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容,整个过程第三方即使监听到了数据,也束手无策。

为什么需要数字签名

  在通信过程中,在检查完证书后,客户端发送一个随机的字符串给服务器去用私钥加密,以便判断对方是否真的持有私钥。但是有一个问题,黑客也可以发送一个字符串给服务器去加密并且得到加密后的内容,这样对于服务器来说是不安全的,因为黑客可以发送一些简单的有规律的字符串给服务器加密,从而寻找加密的规律,有可能威胁到私钥的安全。所以说,服务器随随便便用私钥去加密一个来路不明的字符串并把结果发送给对方是不安全的。

  事实上,每次收到客户端发来的要加密的的字符串时,服务器并不是真正的加密这个字符串本身,而是把这个字符串进行一个hash计算,加密这个字符串的hash值(不加密原来的字符串)后发送给客户端,客户端收到后解密这个hash值并自己计算字符串的hash值然后进行对比是否一致。也就是说,服务器不直接加密收到的字符串,而是加密这个字符串的一个hash值,这样就避免了加密那些有规律的字符串,从而降低被破解的机率。客户端自己发送的字符串,因此它自己可以计算字符串的hash值,然后再把“服务器”发送过来的加密的hash值和自己计算的进行对比,同样也能确定对方是否是服务器。

HTTPS整套加密机制是如何实现的? | 数字证书原理,公钥私钥加密原理


HTTP与HTTPS的区别

  • HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
  • 使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
  • HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
  • http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
  • HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。

HTTP 与 HTTPS 的区别

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值