https

超文本传输安全协议

https

HTTPS,全称:超文本传输安全协议(英文:Hypertext Transfer Protocol Secure),是由HTTP加上TLS/SSL协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。HTTPS默认使用443端口作为通信的已知端口号。[1]在HTTPS出现之前,HTTP是在基本的TCP/IP 协议栈上发送信息。1994年底,网景公司(Netscape Communication)在此基础上创建了一个额外的加密传输层:SSL。该传输层的1.0版本没有在公司以外发布过,但之后的SSL 2.0及其后继者SSL 3.0允许通过加密来保证服务器和客户端之间交换消息的真实性,来创建电子商务网站。[2]在SSL逐渐演变到TLS时,最新的HTTPS也由在2000年五月公布的RFC 2818正式确定下来。[2][3]

HTTPS,全称:超文本传输安全协议(英文:Hypertext Transfer Protocol Secure),是由HTTP加上TLS/SSL协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。HTTPS默认使用443端口作为通信的已知端口号。[2]

在HTTPS出现之前,HTTP是在基本的TCP/IP 协议栈上发送信息。1994年底,网景公司(Netscape Communication)在此基础上创建了一个额外的加密传输层:SSL。该传输层的1.0版本没有在公司以外发布过,但之后的SSL 2.0及其后继者SSL 3.0允许通过加密来保证服务器和客户端之间交换消息的真实性,来创建电子商务网站。[3]在SSL逐渐演变到TLS时,最新的HTTPS也由在2000年五月公布的RFC 2818正式确定下来。[3][4]

HTTPS对比HTTP在安全方面取得了极大的增强。HTTPS的改进点在于创造性的使用了非对称加密算法,在不安全的网路上,安全的传输了用来进行对称加密的密钥,综合利用了非对称加密的安全性和对称加密的快速性。[5]

HTTPS被广泛用于万维网上安全敏感的通讯,例如交易支付方面。HTTP到HTTPS的转向可以帮助企业网提升用户访问安全水平,特别是对于有敏感信息保存和提供金融交易等服务的企业更有帮助,[2]但也有缺点和局限性。[6]

产生背景

HTTP虽然使用极为广泛,但是却存在不小的安全缺陷,主要是其数据的明文传送和消息完整性检测的缺乏,而这两点恰好是网络支付,网络交易等应用中安全方面最需要关注的。[5]

攻击者针对HTTP最常用的攻击手法就是网络嗅探,攻击者试图从传输过程当中分析出敏感的数据,例如管理员对Web程序后台的登录过程等等,从而获取网站管理权限,进而渗透到整个服务器的权限。即使无法获取到后台登录信息,攻击者也可以从网络中获取普通用户的隐秘信息,包括手机号码,身份证号码,信用卡号等重要资料,导致严重的安全事故。进行网络嗅探攻击非常简单,对攻击者的要求很低。使用网络发布的任意一款抓包工具,一个新手就有可能获取到大型网站的用户信息。另外,HTTP在传输客户端请求和服务端响应时,唯一的数据完整性检验就是在报文头部包含了本次传输数据的长度,而对内容是否被篡改不作确认。因此攻击者可以轻易的发动中间人攻击,修改客户端和服务端传输的数据,甚至在传输数据中插入恶意代码,导致客户端被引导至恶意网站被植入木马。[5]

产生和发展

HTTP在基本的TCP/IP协议栈上发送信息,1994年底,网景公司(Netscape Communication)在此基础上创建了一个额外的加密传输层:SSL。HTTPS的发展经历了SSL 2.0、SSL 3.0、TLS 1.0到TLS 1.3的演进。SSL 2.0 及其后继者 SSL 3.0 允许通过加密来保证服务器和客户端之间交换消息的真实性,来创建电子商务网站。在SSL逐渐演变到TLS时,HTTPS也由在2000年5月公布的RFC 2818正式确定下来。[4][3]

HTTPS优先考虑HTTP中的数据安全问题。现代系统使用包含SSL/TLS的HTTP/2作为HTTPS。随着HTTP/3日趋成熟,浏览器和服务器技术最终也会将其集成到HTTPS下。[注1][7]

HTTP原理

客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过TCP 来完成的,一般TCP 连接的端口号是80。建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和许可内容。[6]服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。[6]

HTTPS原理

HTTPS主要由两部分组成:HTTP+SSL/TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS 进行加密,所以传输的数据都是加密后的数据。[6]

客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器;[6]服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数;[6]客户端对服务器的证书进行验证(有关验证证书,可以参考数字签名),并抽取服务器的公用密钥;然后,再产生一个称作pre_master_secret的随机密码串,并使用服务器的公用密钥对其进行加密(参考非对称加/解密),并将加密后的信息发送给服务器;[6]客户端与服务器端根据pre_master_secret以及客户端与服务器的随机数值独立计算出加密和MAC密钥(参考DH密钥交换算法);[6]客户端将所有握手消息的MAC值发送给服务器;[6]服务器将所有握手消息的MAC值发送给客户端。[6]

HTTPS和HTTP对比

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

对比点HTTPSHTTP
含义安全超文本传输协议超文本传输协议
安全性使用 SSL 证书进行公钥加密没有额外的安全功能
端口44380
应用所有现代网站基于文本的网站
证书需要从证书颁发机构(CA)申请证书,用于证明服务器的身份和用途。只有使用CA证书的服务器,客户端才会信任该服务器不需要
底层协议使用包含 SSL/TLS 的 HTTP/2,以进一步加密 HTTP 请求和响应HTTP/1 和 HTTP/2 使用 TCP/IP。HTTP/3 使用 QUIC 协议

协议的改进

HTTPS协议是由HTTP加上TLS/SSL协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。[5]

双向的身份认证

客户端和服务端在传输数据之前,会通过基于X.509证书对双方进行身份认证。具体过程如下:[5]

客户端发起 SSL 握手消息给服务端要求连接。[5]服务端将证书发送给客户端。[5]客户端检查服务端证书,确认是否由自己信任的证书签发机构签发。如果不是,将是否继续通讯的决定权交给用户选择(这里将是一个安全缺陷)。如果检查无误或者用户选择继续,则客户端认可服务端的身份。[5]服务端要求客户端发送证书,并检查是否通过验证。失败则关闭连接,认证成功则从客户端证书中获得客户端的公钥,一般为1024位或者 2048位。到此,服务器客户端双方的身份认证结束,双方确保身份都是真实可靠的。[5]

数据传输的机密性

客户端和服务端在开始传输数据之前,会协商传输过程需要使用的加密算法。客户端发送协商请求给服务端,其中包含自己支持的非对称加密的密钥交换算法(一般是RSA),数据签名摘要算法(一般是SHA或者MD5) ,加密传输数据的对称加密算法(一般是DES),以及加密密钥的长度。服务端接收到消息之后,选中安全性最高的算法,并将选中的算法发送给客户端,完成协商。客户端生成随机的字符串,通过协商好的非对称加密算法,使用服务端的公钥对该字符串进行加密,发送给服务端。服务端接收到之后,使用自己的私钥解密得到该字符串。在随后的数据传输当中,使用这个字符串作为密钥进行对称加密。[5]

数据的完整性检验

SSL使用一种很健壮的信息验证码, 例如MD5,或者SHA-1算法来对数据进行签名,验证码被放在数据包的后部, 并且和数据一块被加密,这样在数据被篡改时会由于HASH值的改变而被发现。[5]

防止重放攻击

SSL使用序列号来保护通讯方免受报文重放攻击。这个序列号被加密后作为数据包的负载。在整个SSL握手中,都有一个唯一的随机数来标记SSL握手。这样防止了攻击者嗅探整个登录过程,获取到加密的登录数据之后,不对数据进行解密, 而直接重传登录数据包的攻击手法。[5]

综合以上,鉴于电子商务等安全上的需求,HTTPS对比HTTP在安全方面取得了极大的增强。总结来说,HTTPS的改进点在于创造性的使用了非对称加密算法,在不安全的网路上,安全的传输了用来进行对称加密的密钥,综合利用了非对称加密的安全性和对称加密的快速性。[5]

HTTPS对比HTTP
HTTPS对比HTTP

协议优势

安全性

HTTP消息采用纯文本形式,这意味着未经授权的各方可以轻松通过互联网对其进行访问和读取。相比之下,HTTPS是以SSL+HTTP构建的可进行加密传输、身份认证的网络协议,要比HTTP安全,可防止数据在传输过程中被窃取、改变,确保数据的完整性。使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;当用户提交敏感数据时,他们可以确保没有第三方可以通过网络拦截这些数据。选择HTTPS来保护潜在的敏感信息,如信用卡详细信息或客户的个人信息。HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。[6][7]

权威性

由于HTTP不太可信,搜索引擎对HTTP网站内容的排名通常低于HTTPS网页。相较于HTTP网站,客户也更喜欢HTTPS网站。浏览器通过在浏览器的地址栏中网站的URL旁边放置挂锁图标,使用户可以看见HTTPS连接。由于这些额外的安全性和信任因素,用户更喜欢HTTPS网站和应用程序。[7]

性能和分析

HTTPS Web应用程序的加载速度比HTTP应用程序更快。同样,HTTPS也能更好地跟踪推荐链接。推荐流量是您的网站来自广告或社交媒体反向链接等第三方来源的流量。如果您希望分析软件准确识别您的可靠流量来源,则必须启用 HTTPS。[7]

缺点和局限

技术方面

相同网络环境下,HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电。此外,HTTPS协议还会影响缓存,增加数据开销和功耗。[6]HTTPS协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用。[6]最关键的是,SSL证书的信用链体系并不安全。特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。[6]

成本方面

部署HTTPS后,因为HTTPS协议的工作要增加额外的计算资源消耗,例如SSL协议加密算法和SSL交互次数将占用一定的计算资源和服务器成本。在大规模用户访问应用的场景下,服务器需要频繁地做加密和解密操作,几乎每一个字节都需要做加解密,这就产生了服务器成本。随着云计算技术的发展,数据中心部署的服务器使用成本在规模增加后逐步下降,相对于用户访问的安全提升,其投入成本已经下降到可接受程度。[2]SSL的专业证书需要购买,功能越强大的证书费用越高,个人网站、小网站可以选择入门级免费证书;[6]SSL证书通常需要绑定固定IP,为服务器增加固定IP会增加一定费用;[6]HTTPS连接服务器端资源占用较多,相同负载下会增加带宽和服务器投入成本。[6]

应用实践

银行对外提供的互联网金融服务中,互联网门户类网站和图片网站主要通过HTTP对外服务。其中门户网站为用户提供金融咨询和优惠信息等服务,还提供银行App客户端、U盾驱动等程序下载服务。为提升用户服务体验,此类HTTP网站还部署了内容分发网络(Content Delivery Network,CDN),通过CDN将用户需要访问的信息放到离用户所在物理地区最近内容服务站点,可以大幅提升互联网对外服务的获取速度,提供最佳访问体验。上述CDN通常为基于HTTP的互联网应用提供服务,而随着互联网环境中的劫持、篡改等访问安全问题的日趋严峻,CDN 提供的网络分发方案也需要支持HTTP改造为HTTPS协议。下面是对HTTP到HTTPS改造应用和网络的方案介绍。[2]

从HTTP转向HTTPS的应用改造要点:HTTP页面分析评估信息数据安全等级;WEB 页面访问改造;站点证书申请和部署;启用HTTPS协议支持,增加TCP-443端口,对外服务。[2]从HTTP转向HTTPS的CDN服务改造要点:CDN侧调整网络服务;CDN站点增加对HTTPS协议支持;CDN站点对HTTPS加速技术进行优化提升稳定性;CDN站点支持端到端的全链路HTTPS支持能力;CDN站点增加CA证书部署的实施方案。[2]

价值和意义

HTTP到HTTPS的转向可以帮助企业网提升用户访问安全水平,特别是对于有敏感信息保存和提供金融交易等服务的企业更有帮助。Google、Facebook 和国内诸多大型互联网公司应用已经全面支持HTTPS,并且苹果和谷歌两大公司也在积极推动HTTPS扩大应用范围,对HTTPS协议在全球网站的部署进度起到加速作用。[2]

参考资料 8

  1. HTTP Semantics RFC 9110 — IETF
  2. 参考 2
  3. HTTP 的发展 — mozilla.org
  4. RFC 2818 HTTP Over TLS — IETF
  5. 参考 5
  6. 参考 6
  7. HTTP 与 HTTPS 之间有什么区别? — AWS
  8. HTTP 概述 — mozilla.org

注释

  1. 1996 – 1997 年发布的原始 HTTP 版本称为 HTTP/1.1。HTTP/2 和 HTTP/3 是该协议本身的升级版本。数据传输系统进行了修改,提高了其效率。例如,HTTP/2 以二进制而不是文本格式交换数据。它还允许服务器将响应主动传输到客户端缓存,而不是等待新的 HTTP 请求。HTTP/3 相对较新,但它尝试让 HTTP/2 更进一步。HTTP/3 的目标是更高效地支持实时流式传输和其他现代数据传输需求。
广告位:底部(ad-bottom)—— 请到中台「公共区块」编辑此内容