【计算机网络】HTTP 与 HTTPS

    技术2022-07-11  64

    HTTP 与 HTTPS

    HTTP (HyperText Transfer Protocol)协议为超文本传输协议,常用在 Web 浏览器和网站服务器之间的通信,http 协议以明文发送内容,并不会提供任何加密功能。如果攻击者截取了http 传输报文,就可以获取到其中的信息,甚至恶意修改内容。因此,http 协议不适用于传输一些敏感信息,如密码、信用卡号等支付信息。

    为了解决 http 协议的这个缺陷,在实际应用中常常使用 HTTPS (HyperText Transfer Protocol Secure)协议,即安全套接字层超文本传输协议。https 在 http 的基础上加入了 安全套接字层(SSL,Secure Socket Layer)协议或者传输层安全(TLS,Transport Layer Security)协议。SSL 协议依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密,以保证数据传输的安全。TLS 由 TLS 记录协议和 TLS 握手协议组成,用于两个应用程序之间提供保密性和数据完整性。

    需要注意的是,http 是应用层协议,https 是传输层协议(或者说 ssl / tls 是传输层协议)。

    HTTPS

    SSL

    SSL(Secure Socket Layer),安全套接字层,位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL 通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议主要包括 SSL 记录协议和 SSL 握手协议两个层次。

    SSL 协议提供的服务主要有:

    认证用户和服务器,确保数据发送到正确的客户机和服务器。加密数据以防止数据中途被窃取。维护数据的完整性,确保数据在传输过程中不被改变。

    SSL 协议是通过四次握手来确认后续数据发送所需的一个密钥,以及用来确认客户端和服务器端双方的身份。

    第一次握手:客户端向服务器端发起一个 ClientHello 报文,用来建立 SSL 请求连接,并且客户端会将自己所支持的一套加密套件一起发送给服务器;第二次握手:服务器端向客户端回复 ServerHello报文,它会从客户端锁支持的加密套件中选择一个加密算法和 hash 算法,并且把自己的身份信息以证书的形式发送给客户端。第三次握手:客户端或者服务器的证书之后,先认证证书的合法性,如果证书受信任,则客户端生成一串随机密钥(或密钥素材,用以通过某种算法算法计算得到密钥),并且用证书上的公钥进行加密。然后把加密后的随机密钥发送给服务器端,并且告诉对方,后续的报文要开始加密了。第四次握手:服务器收到客户端的报文后,首先用自己的私钥将信息解密,取出上述的随机密钥(或密钥素材),然后开始等候客户端后续的加密报文。

    至此四次握手结束,后续的报文就可以用该随机密钥进行加密解密,从而开始正常交互了。

    总体来说,SSL 协议的工作流程需要实现两个认证阶段。

    服务器认证阶段:

    客户端向服务器端发送一个开始信息以创建一个新的会话连接。服务器根据用户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户时将包含生成主密钥所需的信息。客户根据收到的服务器响应信息,生成一个主密钥,并用服务器的公开密钥加密后传给服务器。服务器使用私钥恢复主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。

    用户认证阶段:

    在服务器通过了客户认证之后,服务器会发送一个提问给客户,客户则返回数字签名后的提问和其公开密钥,从而向服务器提供认证。

    从上述过程可以看出,SSL 协议运行的基础是商家对消费者信息保密的承诺,这就有利于商家而不利于消费者。在后期的发展中,单一认证的问题越来越突出,难以协调各方间的安全传输和信任关系,难以支持网上信用卡支付和电子交易等业务。

    TLS

    TLS 以 SSL 3.0 为基础于 1999 年作为 SSL 的新版本退出。

    TLS(Transport Layer Security),传输层安全协议,

    更安全的 MAC 算法。更严密的警报。“灰色区域”规范有更明确的定义。TLS 对于安全性的改进。

    该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。

    TLS 记录协议提供的连接安全性具有两个基本特性:

    私有:数据加密过程使用对称加密(DES、RC4 等)。对称加密所产生的密钥对每个连接都是唯一的,且此密钥基于另一个协议(如握手协议)协商。记录协议也可以不加密使用。可靠:信息传输包括使用密钥的 MAC 进行信息完整性检查。安全哈希功能(SHA、MD5 等)用于 MAC 计算。记录协议在没有 MAC 的情况下也能操作,但一般只能用于这种模式,即有另一个协议正在使用记录协议传输协商安全参数。

    TLS 记录协议用于封装各种高层协议。作为这种封装协议之一的握手协议允许服务器与客户机在应用程序协议传输和接收其第一个数据字节前彼此之间相互认证,协商加密算法和加密密钥。 TLS 握手协议提供的连接安全具有三个基本属性:

    可以使用非对称的,或公共密钥的加密方法来认证对等方的身份。该认证是可选的,但至少需要一个结点方。共享加密密钥的协商是安全的。对偷窃者来说协商加密是难以获得的。此外经过认证过的连接不能获得加密,即使是进入连接中间的攻击者也不能。协商是可靠的。没有经过通信方成员的检测,任何攻击者都不能修改通信协商。

    TLS 的最大优势就在于:TLS 是独立于应用协议。高层协议可以透明地分布在 TLS 协议上面。然而, TLS 标准并没有规定应用程序如何在 TLS 上增加安全性;它把如何启动 TLS 握手协议以及如何解释交换的认证证书的决定权留给协议的设计者和实施者来判断。

    SSL 2.0 和 SSL 3.0 已经被 IEFT 组织废弃。多年来,在被废弃的 SSL 协议中一直存在漏洞并被发现。大多数现代浏览器遇到使用废弃协议的 Web 服务时,会降低用户体验,以 https 表示警告来表现。因此,目前通常在服务端禁止使用 SSL 协议,仅仅保留 TLS 协议开启。

    HTTPS = HTTP + SSL

    HTTP 协议没有办法确认通信方,有可能在传输过程中遭到篡改而不知。此时 HTTPS 出现了,它在 HTTP 上再加入加密处理和认证机制,HTTPS 是披着 SSL 外壳的 HTTP。https 协议的作用主要包括两个方面:建立一个信息安全通道;确认网站的真实性。

    HTTPS 采用共享秘钥加密和公开秘钥加密混用的加密机制。

    共享秘钥加密:使用一对非对称的秘钥。一把叫做私有秘钥,一把叫做公有秘钥。发送方使用公有秘钥加密信息,接收方使用私有秘钥进行解密。

    公开秘钥加密:发送方和接收方使用同一把秘钥进行加密。但是被第三者获得秘钥后可以肆意妄为。

    为了证实公开密钥的“正统性”,我们通过数字证书认证机构(CA)颁布的公开秘钥证书,可以确定申请者的身份并对已申请的公开密钥进行签名,然后分配这个公开秘钥,并将这个公开秘钥放入公钥证书后绑定一起。服务器会将这份数字证书发送给客户端,以便进行公开秘钥加密通信。

    https 与 http 的主要区别如下:

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

    由于在通信过程中需要加密和解密,所以与 HTTP 相比,HTTPS 的速度会慢 2-100 倍,虽然可以用 SSL 专用加速服务器来改善一下,但是仍然没有根本性的解决方法。

    HTTPS 工作过程

    HTTPS 能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用 HTTPS 协议。客户端对服务器发来的证书进行验证,验证通过后使用非对称加密对数据通信时的密钥进行协商。协商后获得一致的对称加密密钥。然后使用对称加密算法进行 TCP 连接,后续的过程跟 http 的过程一致。

    具体工作过程如下(SSL):

    客户端发起 https 请求(443 端口)。服务器配置:采用 https 协议的服务器必须要有一套数字证书。传送证书(公钥、颁发机构、过期时间等)。客户端解析证书:由客户端的 TLS 完成,验证公钥的有效性。生成一个随机值,用证书进行加密。传送加密信息。服务端解密信息:服务端用自己的私钥解密后,得到客户端传送过来的随机值,之后的传输内容可以用该随机值与信息通过某种算法混合在一起,进行对称加密。传输加密后的信息。客户端解密信息:双方都知道随机值,信息可以在客户端被还原。
    Processed: 0.012, SQL: 9