HTTPS (全称:Hypertext Transfer Protocol Secure),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和
身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入
SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与
TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于
万维网上安全敏感的通讯,例如交易支付等方面。
HTTPS与HTTP区别
HTTPS 主要由两部分组成:HTTP + SSL / TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。
HTTP 原理
① 客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过TCP 来完成的,一般 TCP 连接的端口号是80。 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和许可内容。
② 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。
HTTPS 原理
① 客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器;
② 服务器从算法列表中选择一种加密算法,并将它和一份包含
服务器公用密钥的证书发送给
客户端;该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数;
③ 客户端对服务器的证书进行验证(有关验证证书,可以参考
数字签名),并抽取服务器的公用密钥;然后,再产生一个称作 pre_master_secret 的随机密码串,并使用服务器的公用密钥对其进行加密(参考非对称加 / 解密),并将加密后的信息发送给服务器;
④ 客户端与服务器端根据 pre_master_secret 以及客户端与服务器的随机数值独立计算出加密和
MAC密钥(参考 DH密钥交换算法);
⑤ 客户端将所有握手消息的 MAC 值发送给服务器;
⑥ 服务器将所有握手消息的 MAC 值发送给客户端。
HTTP的缺点
HTTP虽然使用极为广泛, 但是却存在不小的安全缺陷, 主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付,
网络交易等新兴应用中安全方面最需要关注的。
关于 HTTP的明文数据传输, 攻击者最常用的攻击手法就是
网络嗅探, 试图从传输过程当中分析出敏感的数据, 例如管理员对
Web 程序后台的登录过程等等, 从而获取网站管理权限, 进而渗透到整个服务器的权限。即使无法获取到后台登录信息, 攻击者也可以从网络中获取普通用户的隐秘信息, 包括手机号码, 身份证号码, 信用卡号等重要资料, 导致严重的安全事故。进行网络嗅探攻击非常简单, 对攻击者的要求很低。使用网络发布的任意一款
抓包工具, 一个新手就有可能获取到大型网站的用户信息。
另外,HTTP在传输
客户端请求和服务端响应时, 唯一的
数据完整性检验就是在报文头部包含了本次传输数据的长度, 而对内容是否被篡改不作确认。 因此攻击者可以轻易的发动
中间人攻击, 修改客户端和服务端传输的数据, 甚至在传输数据中插入
恶意代码, 导致客户端被引导至恶意网站被植入
木马。
改进目标
HTTPS 协议是由 HTTP 加上
TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过
数字证书、
加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。设计目标主要有三个。
(1)数据保密性:保证数据内容在传输的过程中不会被第三方查看。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么。
(2)数据完整性:及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收。
(3)身份校验安全性:保证数据到达用户期望的目的地。就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方,通过身份校验来确保送对了地方。
HTTPS协议的改进
双向的身份认证
客户端和
服务端在传输数据之前,会通过基于
X.509证书对双方进行身份认证 。具体过程如下:
客户端发起 SSL 握手消息给服务端要求连接。
服务端将证书发送给客户端。
客户端检查服务端证书,确认是否由自己信任的证书签发机构签发。 如果不是,将是否继续通讯的决定权交给用户选择 ( 注意,这里将是一个安全缺陷 )。如果检查无误或者用户选择继续,则客户端认可服务端的身份。
服务端要求客户端发送证书,并检查是否通过验证。失败则关闭连接,认证成功则从客户端证书中获得客户端的
公钥,一般为1024位或者 2048位。到此,服务器客户端双方的身份认证结束,双方确保身份都是真实可靠的。
数据传输的机密性
客户端和服务端在开始传输数据之前,会协商传输过程需要使用的加密算法。 客户端发送协商请求给服务端, 其中包含自己支持的非对称加密的密钥交换算法 ( 一般是
RSA), 数据签名摘要算法 ( 一般是
SHA或者
MD5) , 加密传输数据的
对称加密算法 ( 一般是
DES),以及加密密钥的长度。 服务端接收到消息之后,选中安全性最高的算法,并将选中的算法发送给客户端,完成协商。客户端生成随机的字符串,通过协商好的
非对称加密算法,使用服务端的公钥对该字符串进行加密,发送给服务端。 服务端接收到之后,使用自己的私钥解密得到该字符串。在随后的数据传输当中,使用这个字符串作为密钥进行对称加密。
防止重放攻击
SSL使用序列号来保护通讯方免受报文重放攻击。这个序列号被加密后作为数据包的负载。在整个SSL握手中,都有一个唯一的随机数来标记SSL握手。 这样防止了攻击者嗅探整个登录过程,获取到加密的登录数据之后,不对数据进行解密, 而直接重传登录数据包的攻击手法。
可以看到,鉴于
电子商务等安全上的需求,HTTPS对比HTTP,在安全方面已经取得了极大的增强。总结来说,HTTPS的改进点在于创造性的使用了非对称加密算法,在不安全的网路上,安全的传输了用来进行对称加密的密钥,综合利用了
非对称加密的安全性和
对称加密的快速性。
优缺点
优点
缺点
应用方案实践
现有银行对外提供的互联网金融服务中,互联网门户类网站和图片网站主要通过 HTTP对外服务。其 中门户网站为用户提供金融咨询和优惠信息等服务,还提供银行
App客户端、
U盾驱动等程序下载服务。为提升用户服务体验,此类 HTTP 网站还部署了内容分发网络(Content Delivery Network,CDN),通过 CDN 将用户需要访问的信息放到离用户所在物理地区最近内容服务站点,可以大幅提升互联网对外服务的获取速度,提供最佳访问体验。上述 CDN 通常为基于 HTTP的互联网应用提供服务,而随着互联网环境中的劫持、篡改等访问安全问题的日趋严峻,CDN 提供的网络分发方案也需要支持 HTTP改造为 HTTPS 协议。下面是对 HTTP 到 HTTPS 改造应用和网络的方案介绍。
(1) 从 HTTP 转向 HTTPS 的应用改造要点:HTTP 页面分析评估信息数据安全等级;
WEB 页面访问改造;站点证书申请和部署;启用 HTTPS 协议支持,增加 TCP-443 端口,对外服务。
(2)从 HTTP 转向 HTTPS 的 CDN 服务改造要点: CDN 侧调整网络服务;CDN 站点增加对 HTTPS 协议支持;CDN 站点对 HTTPS 加速技术进行优化提升稳定性; CDN 站点支持端到端的全链路 HTTPS 支持能力;CDN 站点增加 CA 证书部署的实施方案。
现有互联网环境中仍大约有 65% 的网站使用 HTTP,此部分的互联网站的用户访问会存在很高的安全 隐患,导致信息泄露、
木马植入等情况出现。针对这一情况,为互联网提供安全服务而采用 HTTPS 已是大势所趋。HTTP 到 HTTPS 的转向可以帮助企业网提升用 户访问安全水平,特别是对于有敏感信息保存和提供金融交易等服务的企业更有帮助。
Google、
Facebook 和国内诸多大型互联网公司应用已经全面支持 HTTPS,并且苹果和谷歌两大公司也在积极推动 HTTPS 扩大应用 范围,对 HTTPS 协议在全球网站的部署进度起到加速作用。
HTTPS历史
发展
网景在1994年创建了HTTPS,并应用在网景导航者浏览器中。 最初,HTTPS是与SSL一起使用的;在SSL逐渐演变到TLS时,HTTPS也由在2000年五月公布的RFC 2818正式确定下来。
版本
超文本传输协议已经演化出了很多版本,它们中的大部分都是向下兼容的。在RFC 2145中描述了HTTP版本号的用法。客户端在请求的开始告诉服务器它采用的协议版本号,而后者则在响应中采用相同或者更早的协议版本。
HTTP/0.9
已过时。只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息。
HTTP/1.0
这是第一个在通讯中指定版本号的HTTP协议版本。
HTTP/1.1
默认采用持续连接(Connection: keep-alive),能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。
HTTP/1.1相较于HTTP/1.0协议的区别主要体现在:
缓存处理,带宽优化及网络连接的使用,错误通知的管理,消息在网络中的发送,互联网地址的维护,安全性及完整性。
HTTP/2
当前版本,于2015年5月作为互联网标准正式发布。
HTTP/3
最新版本,于2022年6月6日标准化为RFC9114。会抛弃使用TCP,通过UDP上使用QUIC来承载应用层数据。