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

    HTTP和HTTPS的基本概念

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

      HTTPS:HTTPS (基于安全套接字层的超文本传输协议 或者是 HTTP over SSL) 是一个 Netscape 开发的 Web 协议。

    是以安全为目标的HTTP通道,简单讲是HTTP的安全版,你也可以说:HTTPS = HTTP + SSL,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

     

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

      HTTPS 在 HTTP 应用层的基础上使用安全套接字层作为子层。

    关于SSL/TLS 

    一、作用

    不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。

    (1) 窃听风险(eavesdropping):第三方可以获知通信内容。

    (2) 篡改风险(tampering):第三方可以修改通信内容。

    (3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。

    SSL/TLS协议是为了解决这三大风险而设计的,希望达到:

    (1) 所有信息都是加密传播,第三方无法窃听。

    (2) 具有校验机制,一旦被篡改,通信双方会立刻发现。

    (3) 配备身份证书,防止身份被冒充。

      互联网是开放环境,通信双方都是未知身份,这为协议的设计带来了很大的难度。而且,协议还必须能够经受所有匪夷所思的攻击,这使得SSL/TLS协议变得异常复杂。

    二、历史

    互联网加密通信协议的历史,几乎与互联网一样长。

      1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。

      1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。

      1996年,SSL 3.0版问世,得到大规模应用。

      1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。

      2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变动是2011年TLS 1.2的修订版

      目前,应用最广泛的是TLS 1.0,接下来是SSL 3.0。但是,主流浏览器都已经实现了TLS 1.2的支持。TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。

    三、基本的运行过程

      SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

    但是,这里有两个问题。

    (1)如何保证公钥不被篡改?

    解决方法:将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。

    (2)公钥加密计算量太大,如何减少耗用的时间?

      解决方法:每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。

    因此,SSL/TLS协议的基本过程是这样的:

    (1) 客户端向服务器端索要并验证公钥。

    (2) 双方协商生成"对话密钥"。

    (3) 双方采用"对话密钥"进行加密通信。

    上面过程的前两步,又称为"握手阶段"(handshake)。

    四、握手阶段的详细过程

    "握手阶段"涉及四次通信,我们一个个来看。需要注意的是,"握手阶段"的所有通信都是明文的。

    4.1 客户端发出请求(ClientHello)

      首先,客户端(通常是浏览器)先向服务器发出加密通信的请求,这被叫做ClientHello请求。

    在这一步,客户端主要向服务器提供以下信息。

    (1) 支持的协议版本,比如TLS 1.0版。

    (2) 一个客户端生成的随机数,稍后用于生成"对话密钥"。

    (3) 支持的加密方法,比如RSA公钥加密。

    (4) 支持的压缩方法。

      这里需要注意的是,客户端发送的信息之中不包括服务器的域名。也就是说,理论上服务器只能包含一个网站,否则会分不清应该向客户端提供哪一个网站的数字证书。这就是为什么通常一台服务器只能有一张数字证书的原因。

      对于虚拟主机的用户来说,这当然很不方便。2006年,TLS协议加入了一个Server Name Indication扩展,允许客户端向服务器提供它所请求的域名。

    4.2 服务器回应(SeverHello)

    服务器收到客户端请求后,向客户端发出回应,这叫做SeverHello。服务器的回应包含以下内容。

    (1) 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。

    (2) 一个服务器生成的随机数,稍后用于生成"对话密钥"。

    (3) 确认使用的加密方法,比如RSA公钥加密。

    (4) 服务器证书。

      除了上面这些信息,如果服务器需要确认客户端的身份,就会再包含一项请求,要求客户端提供"客户端证书"。比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书。

    4.3 客户端回应

      客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。

    如果证书没有问题,客户端就会从证书中取出服务器的公钥。然后,向服务器发送下面三项信息。

    (1) 一个随机数。该随机数用服务器公钥加密,防止被窃听。

    (2) 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

    (3) 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。

      上面第一项的随机数,是整个握手阶段出现的第三个随机数,又称"pre-master key"。有了它以后,客户端和服务器就同时有了三个随机数,接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把"会话密钥"。

    至于为什么一定要用三个随机数,来生成"会话密钥",dog250解释得很好:

      "不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性。

      对于RSA密钥交换算法来说,pre-master-key本身就是一个随机数,再加上hello消息中的随机,三个随机数通过一个密钥导出器最终导出一个对称密钥。

      pre master的存在在于SSL协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么pre master secret就有可能被猜出来,那么仅适用pre master secret作为密钥就不合适了,因此必须引入新的随机因素,那么客户端和服务器加上pre master secret三个随机数一同生成的密钥就不容易被猜出了,一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的可不是一。"

      此外,如果前一步,服务器要求客户端证书,客户端会在这一步发送证书及相关信息。

    4.4 服务器的最后回应

    服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的"会话密钥"。然后,向客户端最后发送下面信息。

    (1)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

    (2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

    至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。

    为什么需要HTTPS?

      超文本传输协议 (HTTP) 是一个用来通过互联网传输和接收信息的协议。HTTP 使用请求/响应的过程,因此信息可在服务器间快速、轻松而且精确的进行传输。当你访问 Web 页面的时候你就是在使用 HTTP 协议,但 HTTP 是不安全的,可以轻松对窃听你跟 Web 服务器之间的数据传输。在很多情况下,客户和服务器之间传输的是敏感歇息,需要防止未经授权的访问。为了满足这个要求,网景公司(Netscape)推出了HTTPS,也就是基于安全套接字层的 HTTP 协议。

     

    HTTP与HTTPS有什么区别?

      HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。

    HTTPS加密、加密、及验证过程,如下图所示:

    简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

    HTTP和HTTPS的相同点

      大多数情况下,HTTP 和 HTTPS 是相同的,因为都是采用同一个基础的协议,作为 HTTP 或 HTTPS 客户端——浏览器,设立一个连接到 Web 服务器指定的端口。当服务器接收到请求,它会返回一个状态码以及消息,这个回应可能是请求信息、或者指示某个错误发送的错误信息。系统使用统一资源定位器 URI 模式,因此资源可以被唯一指定。而 HTTPS 和 HTTP 唯一不同的只是一个协议头(https)的说明,其他都是一样的。

    HTTP和HTTPS的不同之处

    1. HTTP 的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头
    2. HTTP 是不安全的,而 HTTPS 是安全的
    3. HTTP 标准端口是 80 ,而 HTTPS 的标准端口是 443
    4. 在 OSI 网络模型中,HTTP 工作于应用层,而 HTTPS 工作在传输层
    5. HTTP 无需加密,而 HTTPS 对传输的数据进行加密
    6. HTTP 无需证书,而 HTTPS 需要认证证书

    HTTPS如何工作?

      使用 HTTPS 连接时,服务器要求有公钥和签名的证书。

      当使用 HTTPS 连接,服务器响应初始连接,并提供它所支持的加密方法。作为回应,客户端选择一个连接方法,并且客户端和服务器端交换证书验证彼此身份。完成之后,在确保使用相同密钥的情况下传输加密信息,然后关闭连接。为了提供 HTTPS 连接支持,服务器必须有一个公钥证书,该证书包含经过证书机构认证的密钥信息,大部分证书都是通过第三方机构授权的,以保证证书是安全的。

    换句话说,HTTPS 跟 HTTP 一样,只不过增加了 SSL

    HTTP 包含如下动作:

    1. 浏览器打开一个 TCP 连接
    2. 浏览器发送 HTTP 请求到服务器端
    3. 服务器发送 HTTP 回应信息到浏览器
    4. TCP 连接关闭

    SSL 包含如下动作:

    1. 验证服务器端
    2. 允许客户端和服务器端选择加密算法和密码,确保双方都支持
    3. 验证客户端(可选)
    4. 使用公钥加密技术来生成共享加密数据
    5. 创建一个加密的 SSL 连接
    6. 基于该 SSL 连接传递 HTTP 请求

    什么时候该使用HTTPS?

    银行网站、支付网关、购物网站、登录页、电子邮件以及一些企业部门的网站应该使用 HTTPS,例如:

    • PayPal: https://www.paypal.com
    • Google AdSense: https://www.google.com/adsense/

    如果某个网站要求你填写信用卡信息,首先你要检查该网页是否使用 HTTPS 加密连接,如果没有,那么请不要输入任何敏感信息如信用卡号。

     

    浏览器集成

      多数浏览器在收到一个无效证书的时候都会显示警告信息,而一些老的浏览器会弹出对话框让用户选择是否继续浏览。新的浏览器一般在整个窗口显示横幅的警告信息,同时在地址栏上显示该网站的安全信息。如果网站中包含加密和非加密的混合内容,多数浏览器会提示警告信息。

    =======================================================

      在URL前加https://前缀表明是用SSL加密的。你的电脑与服务器之间收发的信息传输将更加安全。 Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定。 HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

      HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议要比HTTP协议安全。

      HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议,它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。

      它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的安全全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。
    HTTPS和HTTP的区别:
    1.HTTPS协议需要到ca申请证书,一般免费证书很少,需要交费。
    2.HTTP是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的ssl加密传输协议
    3.HTTP和HTTPS使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
    4.HTTP的连接很简单,是无状态的
    5.HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比HTTP协议安全
    HTTPS解决的问题:
      1 . 信任主机的问题. 采用HTTPS 的server 必须从CA 申请一个用于证明服务器用途类型的证书. 改证书只有用于对应的server 的时候,客户度才信任次主机. 所以目前所有的银行系统网站,关键部分应用都是HTTPS 的. 客户通过信任该证书,从而信任了该主机. 其实这样做效率很低,但是银行更侧重安全. 这一点对我们没有任何意义,我们的server ,采用的证书不管自己issue 还是从公众的地方issue, 客户端都是自己人,所以我们也就肯定信任该server.
      2 . 通讯过程中的数据的泄密和被窜改


      1. 一般意义上的HTTPS, 就是 server 有一个证书.
    a) 主要目的是保证server 就是他声称的server. 这个跟第一点一样.
    b) 服务端和客户端之间的所有通讯,都是加密的.
    i. 具体讲,是客户端产生一个对称的密钥,通过server 的证书来交换密钥. 一般意义上的握手过程.
    ii. 加下来所有的信息往来就都是加密的. 第三方即使截获,也没有任何意义.因为他没有密钥. 当然窜改也就没有什么意义了.
      2. 少许对客户端有要求的情况下,会要求客户端也必须有一个证书.
    a) 这里客户端证书,其实就类似表示个人信息的时候,除了用户名/密码, 还有一个CA 认证过的身份. 应为个人证书一般来说上别人无法模拟的,所有这样能够更深的确认自己的身份.
    b) 目前少数个人银行的专业版是这种做法,具体证书可能是拿U盘作为一个备份的载体.
    HTTPS 一定是繁琐的.
    a) 本来简单的HTTP协议,一个get一个response. 由于https 要还密钥和确认加密算法的需要.单握手就需要6/7 个往返.
    i. 任何应用中,过多的round trip 肯定影响性能.
    b) 接下来才是具体的HTTP协议,每一次响应或者请求, 都要求客户端和服务端对会话的内容做加密/解密.
    i. 尽管对称加密/解密效率比较高,可是仍然要消耗过多的CPU,为此有专门的SSL 芯片. 如果CPU 信能比较低的话,肯定会降低性能,从而不能serve 更多的请求.
    ii. 加密后数据量的影响. 所以,才会出现那么多的安全认证提示.

    参考文章:

    http://blog.csdn.net/whatday/article/details/38147103

    http://www.mahaixiang.cn/internet/1233.html

    http://blog.csdn.net/he90227/article/details/52034629

  • 相关阅读:
    Python Revisited Day 13 (正则表达式)
    Python Revisited Day 06 (面向对象程序设计)
    Python Revisited (变量)
    Python Revisited Day 05(模块)
    Python Revisited Day 04 (控制结构与函数)
    Python Revisited Day 03 (组合数据类型)
    Numpy
    Python Revisited Day 01
    Python3使用openpyxl读写Excel文件
    Python3操作YAML文件
  • 原文地址:https://www.cnblogs.com/WiliamF/p/6248613.html
Copyright © 2011-2022 走看看