Contents

计算机网络(四)---HTTP与HTTPS

本文主要介绍了HTTPHTTPS的基本概念及两者的区别,HTTPS的工作原理及优缺点,最后介绍了HTTP的响应状态码。

1. HTTP和HTTPS基本概念

HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTP--> HTTP-->TCP-->IP
HTTPS-> HTTP-->SSL-->TCP-->IP

HTTPS协议的主要作用:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

2. HTTP与HTTPS的区别

HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全

https://github.com/lixd/blog/raw/master/images/network/https-key-lvalue.jpg

HTTPS和HTTP的区别:

    1. https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
    1. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
    1. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
    1. http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

这里推荐一下https://letsencrypt.org/已经推出了免费SSL证书

有效期90天,不过可以免费续期。

不想自己弄得话https://user.vaptcha.com/ssl这里提供了比较方便的生成方式也是免费的。

3. HTTPS工作原理

我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。

SSL协议的握手过程

  • 第一步,客户端给出SSL协议版本号、一个客户端生成的随机数1(Client random),以及客户端支持的加密方法。

  • 第二步,服务端根据客服端支持的加密方法选出双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数2(Server random)。

  • 第三步,客户端确认数字证书有效,然后生成一个新的随机数3(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给服务端。

  • 第四步,服务端使用自己的私钥,获取客户端发来的随机数3(即Premaster secret)。到这里双方都拥有三个随机数了,为什么要使用三个随机数呢?这是因为 SSL/TLS 握手过程的数据都是明文传输的,并且多个随机数种子来生成秘钥不容易被暴力破解出来。

  • 第五步,客户端和服务端根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。

  • 第六步,客户端将前面的握手消息生成摘要再用协商好的秘钥加密,这是客户端发出的第一条加密消息。服务端接收后会用秘钥解密,能解出来说明前面协商出来的秘钥是一致的。

  • 第七步,服务端也会将握手过程的消息生成摘要再用秘钥加密,这是服务端发出的第一条加密消息。客户端接收后会用秘钥解密,能解出来说明协商的秘钥是一致的。

到这里,双方已安全地协商出了同一份秘钥,所有的应用层数据都会用这个秘钥加密后再通过 TCP 进行可靠传输。

https://github.com/lixd/blog/raw/master/images/network/https-ssl-connection.png

4. HTTPS的优缺点

  优点:

  (1)使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;

  (2)HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。

  (3)HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。

  (4)谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”

  缺点:

  (1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;

  (2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;

  (3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。

  (4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。

  (5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。

5. HTTP响应状态码

状态码以3位数字和原因短语组成,例如 200 OK 。

数字的第一位指定了响应类型,后两位无分类。响应类别一共有5种:

  • 1XX Informational(信息性状态码)
  • 2XX Success(成功状态码)
  • 3XX Redirection(重定向状态码)
  • 4XX Client Error(客户端错误状态码)
  • 5XX Server Error(服务器错误状态码)
200请求成功      处理方式获得响应的内容进行处理 

201请求完成结果是创建了新资源新创建资源的URI可在响应的实体中得到    处理方式爬虫中不会遇到 

202请求被接受但处理尚未完成    处理方式阻塞等待 

204服务器端已经实现了请求但是没有返回新的信 如果客户是用户代理则无须为此更新自身的文档视图    处理方式丢弃

300该状态码不被HTTP/1.0的应用程序直接使用 只是作为3XX类型回应的默认解释存在多个可用的被请求资源    处理方式若程序中能够处理则进行进一步处理如果程序中不能处理则丢弃
301请求到的资源都会分配一个永久的URL这样就可以在将来通过该URL来访问此资源    处理方式重定向到分配的URL
302请求到的资源在一个不同的URL处临时保存     处理方式重定向到临时的URL 

304 请求的资源未更新     处理方式丢弃 

400 非法请求     处理方式丢弃 

401 未授权     处理方式丢弃 

403 禁止     处理方式丢弃 

404 没有找到     处理方式丢弃 

5XX 回应代码以5开头的状态码表示服务器端发现自己出现错误不能继续执行请求    处理方式丢弃

6. HTTP长连接、短连接

在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:

Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

https加密是在传输层

https报文在被包装成tcp报文的时候完成加密的过程,无论是https的header域也好,body域也罢都是会被加密的。

当使用tcpdump或者wireshark之类的tcp层工具抓包,获取是加密的内容,而如果用应用层抓包,使用**Charels(Mac)、Fildder(Windows)**抓包工具,那当然看到是明文的。

7. 参考

https://www.cnblogs.com/qiangxia/p/5261813.html

https://www.cnblogs.com/wqhwe/p/5407468.html

http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html