HTTP和HTTPS
HTTP(超文本传输协议)被用于在Web浏览器和网站服务器之间传递信息,该协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息。
HTTPS(安全套接字层超文本传输协议),该协议在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密,保证了数据传输的安全。
HTTPS和HTTP的区别
- https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用;
- http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议;
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443;
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
HTTPS的工作原理
1. 客户端发起HTTPS请求
2. 服务端的配置
- 采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。
- 这套证书其实就是一对公钥和私钥。
3. 传送证书
- 即公钥。
4. 客户端解析证书
- 这部分工作由客户端的TLS来完成。
- 首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。
- 如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。
5. 传送加密信息
- 这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
6. 服务端解密信息
- 服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够强,私钥够复杂,数据就够安全。
7. 传输加密后的信息
- 这部分信息是服务端用私钥加密后的信息,可以在客户端被还原。
8. 客户端解密信息
- 客户端用之前生成的私钥解密服务端传过来的信息,于是获取了解密后的内容,整个过程第三方即使监听到了数据,也束手无策。
HTTPS与HTTP服务器资源使用对比
HTTPS其实就是建构在SSL/TLS之上的HTTP协议,所以,要比较HTTPS比HTTP多用多少服务器资源,主要看SSL/TLS本身消耗多少服务器资源。
HTTP使用TCP三次握手建立连接,客户端和服务器需要交换3个包;HTTPS除了TCP的三个包,还要加上ssl握手需要的9个包,所以一共是12个包。
Heartbleed
这个被称作史上最大的网络安全漏洞。由于频繁重建SSL/TLS
的session
对于服务器影响是致命的,所以,RFC在2012年提出了RFC6520 TLS
的心跳扩展,这个协议本身是简单和完美的,通过在客户端和服务器之间来回发送心跳的请求和应答,保活TLS session
,减少重建TLS
的session
的性能开销,然而,openssl
在实现这个心跳扩展时,犯了一个低级的错误,没有对收到的心跳请求进行长度检查,直接根据心跳请求长度拷贝数据区,导致简单的心跳应答中可能包含了服务器端的核心数据区内容,用户名,密码,信用卡信息,甚至服务器的私有密钥都有可能泄露。
HTTPS的优点
1. SEO方面
- 谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。
2. 安全性
尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是现行架构下最安全的解决方案,主要有以下几个好处:
- 使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
- HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
- HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
HTTPS的缺点
1. SEO方面
- 据ACM CoNEXT数据显示,使用HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电,此外,HTTPS协议还会影响缓存,增加数据开销和功耗,甚至已有安全措施也会受到影响也会因此而受到影响。
- 而且HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。
- 最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。
2. 经济方面
- SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用;
- SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗(SSL有扩展可以部分解决这个问题,但是比较麻烦,而且要求浏览器、操作系统支持,Windows XP就不支持这个扩展,考虑到XP的装机量,这个特性几乎没用);
- HTTPS连接缓存不如HTTP高效,大流量网站如非必要也不会采用,流量成本太高;
- HTTPS连接服务器端资源占用高很多,支持访客稍多的网站需要投入更大的成本,如果全部采用HTTPS,基于大部分计算资源闲置的假设的VPS的平均成本会上去;
- HTTPS协议握手阶段比较费时,对网站的相应速度有负面影响,如非必要,没有理由牺牲用户体验。