近些年,随著域名劫持、资讯泄漏等互联网安全事件的频繁发生,网站安全也变得越来越重要,也促成了互联网传输协议从 HTTP 到 HTTPS 再到 HSTS 的转变。
HTTP
HTTP(超文字传输协议)是一种用于分散式、协作式和超媒体资讯系统的应用层协议。 HTTP 是网际互联网资料通讯的基础。它是由全球资讯网协会(W3C)和网际互联网工程任务组(IETF)进行协调制定了 HTTP 的标准,最终释出了一系列的 RFC,并且在 1999 年 6 月公布的 RFC 2616,定义了 HTTP 协议中现今广泛使用的一个版本——HTTP 1.1 。
HTTP 访问过程
HTTP 属于 TCP/IP 模型中的应用层协议,当浏览器与站群服务器进行互相通讯时,需要先建立 TCP 连线,之后站群服务器才会接收浏览器的请求资讯,当接收到资讯之后,站群服务器返回相应的资讯。最后浏览器接受对站群服务器的资讯应答后,对这些资料进行解释执行。
http 1.0 请求模式
HTTP 1.0 时,浏览器每次访问都要单独建立连线,这会造成资源的浪费。
后来 HTTP 1.1 可以在一次连线中处理多个请求,并且将多个请求重叠进行:
http 1.1 请求模式
HTTP 协议特点
简单、快速、灵活:当使用者想站群服务器传送请求时,只需传送请求方法和路径即可,HTTP 允许传输任意型别的资料物件。并且 HTTP 协议简单易用,HTTP 站群服务器规模小,保证了互联网通讯的速度;
无连线、无状态:HTTP 协议限制每次连线只处理单个请求,当站群服务器收到使用者请求后就会断开连线,保证了传输时间的节省。同时 HTTP 协议对事务处理没有记忆能力,如果后续的请求需要使用前面的资讯就必须重传资料;
管线化和内容编码:随著管线化技术的出现,HTTP 请求比永续性连线速度更快,并且当某些报文的内容过大时,为了减少传输的时间,HTTP 会采取压缩档案的方式;
HTTP 支援客户/站群服务器模式
从 HTTP 到 HTTPS
HTTP 协议由于其简单快速、占用资源少,一直被用于网站站群服务器和浏览器之间进行资料传输。但是在资料传输的过程中也存在很明显的问题,由于 HTTP 是明文协议,不会对资料进行任何方式的加密。当黑客攻击窃取了网站站群服务器和浏览器之间的传输报文的时,可以直接读取传输的资讯,造成网站、使用者资料的泄密。因此 HTTP 不适用于敏感资讯的传播,这个时候需要引入 HTTPS(超文字传输安全协议)。
HTTPS
HTTPS(Hypertext Transfer Protocol Secure)是一种以计算机互联网安全通讯为目的的传输协议。在 HTTP 下加入了 SSL 层,从而具有了保护交换资料隐私和完整性和提供对网站站群服务器身份认证的功能,简单来说它就是安全版的 HTTP 。
HTTP 、 HTTPS 差异
HTTPS 访问过程
HTTPS 在进行资料传输之前会与网站站群服务器和 Web 浏览器进行一次握手,在握手时确定双方的加密密码资讯。
具体过程如下:
Web 浏览器将支援的加密资讯传送给网站站群服务器;
网站站群服务器会选择出一套加密演算法和杂凑演算法,将验证身份的资讯以证书(证书释出 CA 机构、证书有效期、公钥、证书所有者、签名等)的形式传送给 Web 浏览器;
当 Web 浏览器收到证书之后首先需要验证证书的合法性,如果证书受到浏览器信任则在浏览器位址列会有标志显示,否则就会显示不受信的标识。当证书受信之后,Web 浏览器会随机生成一串密码,并使用证书中的公钥加密。之后就是使用约定好的杂凑演算法握手讯息,并生成随机数对讯息进行加密,再将之前生成的资讯传送给网站;
当网站站群服务器接收到浏览器传送过来的资料后,会使用网站本身的私钥将资讯解密确定密码,然后通过密码解密 Web 浏览器传送过来的握手资讯,并验证杂凑是否与 Web 浏览器一致。然后站群服务器会使用密码加密新的握手资讯,传送给浏览器;
最后浏览器解密并计算经过杂凑演算法加密的握手讯息,如果与服务传送过来的杂凑一致,则此握手过程结束后,站群服务器与浏览器会使用之前浏览器生成的随机密码和对称加密演算法进行加密交换资料。
HTTPS 握手过程
HTTPS 加密演算法
为了保护资料的安全,HTTPS 运用了诸多加密演算法:
对称加密:有流式、分组两种,加密和解密都是使用的同一个金钥。
例如:DES 、 AES-GCM 、 ChaCha20-Poly1305 等。
非对称加密:加密使用的金钥和解密使用的金钥是不相同的,分别称为:公钥、私钥,公钥和演算法都是公开的,私钥是保密的。非对称加密演算法效能较低,但是安全性超强,由于其加密特性,非对称加密演算法能加密的资料长度也是有限的。
例如:RSA 、 DSA 、 ECDSA 、 DH 、 ECDHE 等。
杂凑演算法:将任意长度的资讯转换为较短的固定长度的值,通常其长度要比资讯小得多,且演算法不可逆。
例如:MD5 、 SHA-1 、 SHA-2 、 SHA-256 等。
数字签名:签名就是在资讯的后面再加上一段内容(资讯经过 hash 后的值),可以证明资讯没有被修改过。 hash 值一般都会加密后(也就是签名)再和资讯一起传送,以保证这个 hash 值不被修改。
从 HTTPS 到 HSTS
但是当网站传输协议从 HTTP 到 HTTPS 之后,资料传输真的安全了吗?
由于使用者习惯,通常准备访问某个网站时,在浏览器中只会输入一个域名,而不会在域名前面加上 http:// 或者 https://,而是由浏览器自动填充,当前所有浏览器预设填充的都是 http://。一般情况网站管理员会采用了 301/302 跳转的方式由 HTTP 跳转到 HTTPS,但是这个过程总使用到 HTTP 因此容易发生劫持,受到第三方的攻击。
这个时候就需要用到 HSTS(HTTP 严格安全传输)。
HTTP 请求劫持
HSTS
HSTS 是国际网际互联网工程组织 IETF 正在推行一种新的 Web 安全协议,网站采用 HSTS 后,使用者访问时无需手动在位址列中输入 HTTPS,浏览器会自动采用 HTTPS 访问网站地址,从而保证使用者始终访问到网站的加密连结,保护资料传输安全。
HSTS 原理
HSTS 主要是通过站群服务器传送响应头的方式来控制浏览器操作:
首先在站群服务器响应头中新增 HSTS 响应头:Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload]
此响应头只有在 https 访问返回时才生效,其中 [ ] 中的参数列示可选;
设定 max-age 引数,时间设定不宜过长,建议设定时间为 6 个月;
当使用者下次使用 HTTP 访问,客户端就会进行内部跳转,并且能够看到 307 Redirect Internel 的响应码;
网站站群服务器变成了 HTTPS 访问源站群服务器。
开启 HSTS 后网站可以有效防范中间人的攻击,同时也会省去网站 301/302 跳转花费的时间,大大提升安全系数和使用者体验。
开启 HSTS 后网站安全系数检测测评
开启 HSTS 以后,可以到 ssllabs 进行测试,网站的安全等级会进一步提升。
开启前等级为:A
开启后等级变为:A+
总结
从 HTTP 到 HTTPS 再到 HSTS,网站的安全系数一直在上升,防止 DNS 劫持、资料泄密的力度也再加大。国内公有云服务商比如又拍云提供了完整的 HTTPS 和 HSTS 的站群解决方案,不仅支援 SSL 证书快速申请,HTTPS 一键部署,还支援一键开启 HSTS