zoukankan      html  css  js  c++  java
  • HTTP 与 HTTPS 的区别

    1. 基本概念

    1.1 HTTP

    HTTP(HyperText Transfer Protocol:超文本传输协议)是一种应用层协议。HTTP协议是Web工作的核心,常用于在 Web 浏览器和网站服务器之间传递信息,以 http:// 打头的网站都是标准 HTTP 服务。它建立在TCP协议之上,一般采用TCP的80端口。它是一个请求-响应协议,即客户端发出一个请求,服务器响应这个请求(发起请求的只能是客户端,服务器不能主动联系客户端)。

    HTTP协议是无状态的,也就是说,同一个客户端的这次请求和上次请求没有对应关系,对HTTP服务器来说,它并不知道这两个请求是否来自同一个客户端。为了解决这个问题, Web程序引入了Cookie机制来维护连接的可持续状态。此外,HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等支付信息。

    1.2 HTTPS

    HTTPS(HyperText Transfer Protocol Secure:超文本传输安全协议)在HTTP的基础上加入了SSL(安全套接层)协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。HTTPS 的主要目的是提供对网站服务器的身份认证保护交换数据的隐私与完整性

    补充:

    SSL(Secure Socket Layer,安全套接字层):SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:

    • SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
    • SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

    TLS(Transport Layer Security,传输层安全协议):用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。

    TLS是在SSL的基础上标准化的产物,可以说SSL和TLS是同一事物的不同阶段。

    2. HTTPS工作原理(请求过程)

    HTTPS的请求过程如下图所示:

    步骤详解:

    1. 客户端发起 HTTPS 请求。
    2. 服务端生成证书:采用 HTTPS 协议的服务器必须要有一套数字证书,这套证书其实就是一对公钥和私钥。这里说明一下“数字证书”,我们可以自己制作,也可以向机构申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。(对于公钥和私钥的理解,以及对称加密和非对称加密,主要参考这篇文章
    3. 传送证书:服务端向客户端返回公钥,其中包含了很多的信息,如证书的颁发机构、过期时间等等。
    4. 客户端解析证书:这部分工作由客户端的TLS来完成,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值key,然后使用公钥对这个key进行加密(这个key作为后续对称加密算法的私钥)。
    5. 客户端向服务器发送对称密钥:客户端向服务端发送上一步中经过加密的key。
    6. 服务端解密信息:服务端通过私钥解密后,即可得到客户端发过来的对称密钥,然后使用这个密钥对待传输的明文数据进行对称加密。
    7. 服务器端向客户端传输对称加密后的数据。
    8. 客户端使用本地保留的密钥key进行对称解密,从而拿到真实的数据。

    总的来说,HTTPS 请求的过程就是对称加密非对称加密相结合的过程。

    3. HTTP与HTTPS的区别

    • HTTP 是明文传输,数据都是未加密的,安全性较差;HTTPS(即HTTP+SSL) 的数据传输过程是加密的,安全性较好;
    • 使用 HTTPS 需要使用 CA 证书(Certificate Authority,数字证书认证机构)。证书有免费的(免费的证书较少);也有付费的,证书颁发机构有如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
    • 使用 HTTP 协议的响应速度更快,而HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议。HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包;而 HTTPS 除了 TCP 的三个包,还要加上 SSL 握手需要的 9 个包,所以一共是 12 个包。(这里关于 SSL 的握手过程没有深究,具体可参考这篇文章
    • 两者默认使用的端口不一样,HTTP 使用80端口,而 HTTPS 使用443端口。

    (全文完)


    参考:

    1. https://www.runoob.com/w3cnote/http-vs-https.html
    2. 对称加密与非对称加密:https://www.cnblogs.com/jfzhu/p/4020928.html
  • 相关阅读:
    Django之搭建学员管理系统
    数据库查询操作(fetchone,fetchall)
    HTTP 方法:GET与 POST
    初识django框架
    Memcached的批量删除方案总结
    centos5.5 下面 lnmp环境遇到的小问题
    CentOS 5.5 --学习(1)
    HTTP请求方法及响应码详解(http get post head)
    codeigniter注意点
    htaccess 伪静态的规则
  • 原文地址:https://www.cnblogs.com/kkbill/p/13198479.html
Copyright © 2011-2022 走看看