HTTP、HTTPS

目录

HTTP 超文本传输协议

HTTP概述

HTTP无状态的解决方案

HTTP报文

HTTP的不足

HTTPS

HTTPS的“四次握手”

HTTPS的不足

优化HTTPS协议的访问速度方法

HTTPS缓存

SSL与TLS

数字证书

数字签名


HTTP 超文本传输协议

HTTP概述

HTTP提供了一种发送和接收超文本标记语言(HTML)页面的方法。

HTTP有多个版本,目前广泛使用的是HTTP/1.1版本。

HTTP是一个基于TCP/IP通信协议来传递数据的协议,默认端口是80,一般用于B/S架构。

HTTP允许传输任意类型的数据对象,传输的数据类型用Content-type标记。

HTTP是无状态的,对事务处理没有记忆,不利于客户端和服务器保持会话连接。

HTTP无状态的解决方案

针对HTTP无状态的解决方案有:

1.使用Cookie。

(1).Cookie通过在客户端记录信息确定用户身份,存储在用户的浏览器上。

(2).Cookie具有不可跨域名性,根据Cookie规范,一个网站不能访问另一个网站存储在客户端浏览器里的Cookie信息。

(3).Cookie的处理在开发中没有Session方便。单个Cookie保存的数据不能超过4k,有些浏览器限制一个站点保存的cookie数不能超过20。

(4).Cookie可以通过设置较长的有效期,较长地存储在客户端浏览器里。如果设置Cookie时不设置Cookie的过期时间,则会默认为关闭浏览器时该Cookie就过期了。

(5).cookie不是很安全,因为别人可以分析本地存储的Cookie并进行Cookie欺骗,所以为了安全,会话信息里的重要数据建议用Session存储,非重要数据可以进行加密处理后以Cookie形式存储在客户端浏览器里。

2.使用Session。

(1).Session通过在服务器端记录信息确定用户身份,存储在服务器上。

(2).Session机制决定了当前客户只会获取到自己的Session,而不会获取到别人的Session。各个客户端的Session彼此独立,互不可见。

(3).Session的大小以硬件为限制,可以存储很复杂的结构,但Session里的信息应该尽量精简,如果网站访问量大的话过多的Session放在内存里,会对服务器造成压力,这时可以设置更短的Session超时时间,同时进一步精简Session里存储的信息,看能否把一部分信息通过Cookie的保存形式分到客户端存储。

(4).Session的过期时间是从Session不活动的时候开始计算,从该Session未被访问时开始计时,一旦Session被访问,则计时清零。Session在Web服务器里设置的默认过期时间一般较短,例如30分钟。Session的运行依赖于Session id,而Session id一般是存放在Cookie里的。如果客户端浏览器禁用了Cookie,那么Session也会失效,可以通过在url里保存Session id来弥补这个缺陷。

(5).默认情况下,关闭浏览器后,Session并不是立刻过期,而是等到Session对象失效后才能清除,为了考虑系统安全性,可以在用户退出登录时,即刻清除Session对象。

3.使用HTTP1.1协议的持久连接方法(HTTP Keep-Alive),只要任意一方没有明确提出断开连接,则保持TCP连接状态,在请求头里将Connection设置为Keep-Alive即表明使用持久连接。

HTTP报文

HTTP请求报文由请求行(包括请求方法、URL、协议/版本)、请求头、请求体组成。HTML的form表单只支持GET和POST方法提交表单数据。

HTTP响应报文由状态行、响应头、响应报文组成。

对于HTTP请求方法有两个概念,一个是安全性,另一个是幂等性。

安全性是指不会改变资源状态,可以理解为是只读的。

幂等性是指执行1次和执行N次,对资源状态的改变效果是等价的。

HTTP 1.0定义了三种请求方式:GET、POST、HEAD。

HTTP 1.1定义了六种请求方式:PUT、PATCH、DELETE、CONNECT、TRACE、OPTIONS。

(1) GET:向服务器请求资源数据,数据存放在请求行里。

      GET方法具备安全性和幂等性。

(2) POST:向服务器提交资源数据进行请求处理,数据存放在请求体里。

      POST方法不具备安全性和幂等性。

(3) HEAD:获取HTTP头信息,返回结果不含有呈现数据。可用来检查请求的链接或资源是否有效、网站是否被篡改或更新。

(4) PUT:完整替换更新指定资源数据,没有就新增。

      PUT方法不具备安全性但具备幂等性。

(5) PATCH:部分更新指定资源数据,默认的content-type是application/x-www-form-urlencoded,数据存放在请求体里。

      PATCH方法不具备安全性和幂等性。

(6) DELETE:删除指定资源数据。

      DELETE方法不具备安全性但具备幂等性。

(7) OPTIONS:获取服务器所支持的HTTP请求方法,允许客户端查看服务器的性能,如ajax跨域时的预检等。

(8) CONNECT:HTTP 1.1协议中预留给能够将连接改为管道方式的代理服务器。可理解为是将服务器作为跳板去访问别的服务器,然后返回数据回来。连接成功后,就可以用GET方式和POST请求方式来向目标服务器发起请求了。

(9) TRACE:追踪服务器收到的请求,主要用于测试和诊断。一般是禁用的,以防止被恶意攻击或者盗取信息。

关于GET、POST这两种请求方式的详细对比,可以参考文档《请求方式GET和POST的区别》

HTTP响应状态码

200 客户端请求成功。

301 资源(网页等)被永久转移到别的URL。搜索引擎会在抓取新的内容的同时更新旧地址为新地址。301请求会被缓存。文件后缀名修改后也会导致301。

302 临时跳转。搜索引擎会抓取新的内容而保留旧的地址。例如未登录用户访问需登录的页面则跳往登录页面,例如访问404页面则跳转到首页。

400 客户端请求有语法错误,不能被服务器端所理解。

401 请求未经授权。

404 请求资源不存在。

500 服务器内部发生了不可预期的错误。

502 Bad Gateway【网关错误】,可能是应用服务问题导致的。

503 服务器当前不能处理客户端的请求,过一段时间可能会恢复处理。

504 Gateway Time-out【网关超时】,可能是配置出错导致的。

HTTP的不足

HTTP数据传输是明文的,这样客户端发出的请求很容易被窃听、利用,因此HTTP不适合传输一些敏感信息(如账号、密码等)。

HTTP不验证通信方身份,因此可能遭遇伪装。

HTTP不验证报文的完整性,可能传输的报文遭受到了篡改也不知道。

HTTPS

HTTPS一般可理解为HTTP+SSL/TLS(数据加密、身份认证、保障数据完整性),是具有安全性的网络传输协议,HTTPS默认端口是443。

HTTPS协议是现行架构下相比较HTTP协议更安全的解决方案,虽然不是绝对安全,但大幅增加了中间人攻击的成本。

对于数据传输安全性要求不高的大型网站,可以把网站配成HTTP和HTTPS都可以访问的,方法就是去掉页面链接的HTTP和HTTPS头部,例如“//www.a.com"。

对于数据传输安全性要求高的大型网站,因为HTTPS协议握手阶段比较费时,相比较网站页面全部用HTTPS协议访问,可以考虑采用纯内容展示页(如去掉用户页面内直接提交信息功能的网站首页)使用HTTP协议,用户信息类页面则使用HTTPS协议的办法,进一步增强用户信息安全保障的同时保持尽量好的用户体验感。

使用HTTPS,预防“中间人攻击”可以采取的措施有:

  1. 必须对认证过程中的传输者/认证过程的本身真实性进行认证。也就是说不要轻易相信收到的证书,因为收到的证书也有可能是来自于“中间人”的。
  2. APP可以提前预埋证书在本地,让收到的伪装证书失效。

HTTPS的“四次握手”

1.客户端生成一个客户端随机数,带上客户端这边支持的加密套件(很多种不同的加密方法)传输到服务器。

2.服务器端拿到了客户端提交的随机数后先存着,然后生成一个服务器端随机数,连同服务器端生成的证书公钥传输给客户端。

3.客户端通过服务器端传过来的证书公钥生成一个新的随机数(预主密钥),然后将这个新的随机数(预主密钥)通过服务器端传过来的证书公钥加密后发送给服务器端。

4.服务器端通过私钥解密拿到第三个随机数(预主密钥),然后客户端和服务器端就同时通过对这三个随机数进行算法操作生成一个主密钥。有了这个主密钥后,服务器端和客户端都通过这个主密钥对传输数据进行加密解密,而中间人因为不知道主密钥,所以就算截取到数据包也不能用主密钥进行解密。

HTTPS的不足

  1. HTTPS协议导致多次“握手”,延长了页面的加载时长,移动端页面加载时长可能延长得更明显。
  2. HTTPS连接缓存不如HTTP高效,流量成本高。
  3. 免费的HTTPS证书较少,一般要收费,功能强大的证书收费会很高。
  4. SSL证书涉及到的加密算法会消耗CPU资源,导致服务器资源消耗较大,能增加10%至20%的耗电。
  5. SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名。
  6. HTTPS的加密协议在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到作用。SSL证书的信用链并不完全安全,特别是在有人可以控制CA根证书的情况下,中间人攻击一样可行。

优化HTTPS协议的访问速度方法

  1. 使用HSTS(HTTP Strict Transport Security,HTTP严格传输安全)重定向技术。启用HSTS后,能保证浏览器访问网站时自动将HTTP协议链接转为HTTPS协议链接,减少301重定向。
  2. TLS握手优化,采用False Start(抢先开始)技术,使浏览器在与服务器完成TLS握手前,就开始发送请求数据,服务器在收到这些数据后,完成TLS握手的同时,开始发送响应数据。
  3. 会话标识符(Session Identifier)复用,有两种实现类型,Session ID(会话记录保存在服务器端),Session Ticket(会话记录保存在客户端)。
  4. 开启OCSP装订(OCSP Stapling)。服务器模拟浏览器向CA发起请求,并将带有CA机构签名的OCSP(Online Certificate Status Protocol,在线证书状态协议)响应结果保存到本地,在与客户端握手阶段,将OCSP响应下发给浏览器,省去浏览器的在线验证过程。由于这样做,浏览器不需要直接向CA站点查询证书状态了,所以开启OCSP装订功能后,对访问速度的提升会有明显效果。
  5.  使用更好的完全前向加密(PFS)技术。例如使用ECODE算法(具有前向安全性质,运算速度快、安全性高、支持False Start)。ECODE算法在每次握手时都会产生一对临时的公钥和私钥,每次通信的密钥对都是不同的,就算黑客花大力气破解了某一次的会话密钥,这次会话之前的历史消息不会因此被破解,仍然是信息安全的。现在有些主流浏览器和服务器在HTTPS握手阶段已经不用RSA算法,而是使用ECODE算法。

HTTPS缓存

出于安全考虑,浏览器一般不会在本地保存HTTPS缓存。但是在HTTP请求头中使用特定命令,则是可以实现本地保存HTTPS缓存的。例如,Firefox只允许在内存里保存HTTPS缓存,但是如果HTTP请求头里加上Cache-Control:Public,HTTPS缓存就能写到硬盘上。

SSL与TLS

SSL(安全套接字层)位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持。

TLS(传输层安全,前身是SSL)。SSL3.0和TLS1.0由于存在安全漏洞,现在很少使用。TLS的一大目标就是使SSL更加安全,TLS目前广泛使用的版本是TLS1.1和TLS1.2。

SSL/TLS协议作用:

(1).认证用户和服务器,确保数据发送到正确的用户机和服务器。

(2).加密数据以提高数据传输的安全性。

(3).验证信息的完整性,可知信息在传输过程中是否被修改。

SSL协议在握手阶段使用的是非对称加密,在传输阶段使用的是对称加密。

数字证书

在虚拟世界里,数字证书就像是身份证,和现实生活不同,不是每个上网用户都有数字证书,往往只有当有人需要在虚拟世界里证明自己的身份时才需要用到数字证书。普通用户一般不需要数字证书,因为一般的网站关注的是流量,而不是访问网站的每个人的真实身份认证。而网站则需要在虚拟世界里证明自己的身份,以避免浏览者需要访问自己时,访问到欺诈用户的虚假伪造网站。

数字证书有专门的发证机关(Certificate Authority,简称CA),数字证书的发证机关会对自己发放的证书加上自己的数字签名,以保证自己的证书不被伪造。

数字证书里,一般包含有:

(1).证书颁发机构的名称。

(2).证书本身的数字签名。

(3).证书持有者公钥。

(4).证书签名用到的Hash算法。

(5).验证证书的有效性,例如有效日期。

管理人员对服务器设置公钥和私钥,将设置的公钥交给CA认证机构,并请求给予一份数字证书。CA认证机构认证通过后会生成一份数字证书,然后管理人员将这份数字证书配置到服务器上。当客户端向服务器端请求HTTPS连接时,就开始了HTTPS的“四次握手”过程。

浏览器默认会内置CA根证书,其中根证书包含了CA的公钥。

数字签名

数字签名可以理解为是对”非对称密钥加解密“和”数字摘要“两项技术的应用。

非对称加密又称作”公开密钥加密“,采用一对非对称的密钥,一把叫公有密钥,一把叫私有密钥。服务器的私有密钥是保存在服务器端的。

数字签名的过程如下:

         明文->Hash算法->摘要->私钥加密->数字签名

        上面的“摘要”是指明文信息经过Hash算法“摘要”后生成的一串密文,这一串密文又被称作数字指纹,它有固定的长度(128位),同样的明文经过Hash算法产生的密文是一致的,而不同的明文“摘要”成密文其结果是不一致的。数字签名技术将摘要信息用发送者的私钥加密后,与原文一同发送给接收者。接收者只有用发送者的公钥才能正确解密出被加密的摘要信息,然后接收者通过对原文进行Hash算法运算生成一个摘要信息与解密出来的摘要信息比对,如果结果相同,就表明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改了。以上就是对数字签名能够保障数据完整性验证的原理概述。

数字签名有两种功效:

1.能确定消息确实是由发送者签名发送过来的,因为别人难以假冒发送者的签名。

2.能保障信息的完整性验证。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值