关于HTTPS,基本上你想知道的都在这里了(当然仅限入门)。本文原标题《HTTPS原理与实践》,下图是本文配套PPT的目录截图:
[TOC]
原理篇 2.1. 认识HTTPS先说一下,本文可能有些地方由于描述不到位或者我本人理解错误而出现不准确内容,有错误欢迎指正!
2.1.1. 什么是HTTPSHTTPS全称Hyper Text Transfer Protocol over Secure Socket Layer,直译过来就是通过SSL实现的超文本传输协议,简单来讲就是加密版的HTTP协议,也就是HTTP+SSL/TLS。
为什么需要加密版的HTTP呢,因为我们都知道,HTTP是明文传输的,因此使用HTTP协议传输隐私信息非常不安全,很容易在传输过程中被窃取,或者通信内容被人篡改冒充,使用HTTPS可以避免这些问题。
2.1.2. SSL/TLS为了解决HTTP明文传输的风险性,网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定义在RFC 6101中,之后IETF对SSL 3.0进行了升级,于是出现了TLS(Transport Layer Security) 1.0,定义在RFC 2246。实际上我们现在的HTTPS都是用的TLS协议,但是由于SSL出现的时间比较早,并且依旧被现在浏览器所支持,因此SSL依然是HTTPS的代名词。
上面一大段话是转载的,简单而言就是TLS是SSL的升级版,现在浏览器一般用的都是TLS。
2.1.3. HTTPS的优点从底层分析HTTPS有以下3大优点:
防窃听:信息被加密了,第三方拿不到密码,所以可以防窃听;
防篡改:还是因为信息被加密了,如果执意篡改的话,客户端无法解密不说,而且数据完整性校验这一关也过不了;
防冒充:防止攻击者冒充他人身份参与通信,比如HTTPS的双向认证;
从实际出发来看,HTTPS主要有以下优点:
防止私密信息泄露,防止信息被篡改;
有助于SEO,百度、谷歌均明确表示会优先收录、展示HTTPS站点的内容;
完全杜绝运营商HTTP劫持问题;
有效解决运营商DNS劫持问题,降低网站被劫持的风险;
HTTPS的小绿锁表示可以提升用户对网站信任程度(当然不是说有小绿锁的都是安全的);
可以有效防止山寨、镜像网站等;
为未来升级HTTP/2做准备,HTTP/2必须基于HTTPS部署;
下面单独对3和4说一下。
运营商HTTP劫持我们都知道,经常莫名奇妙的在自己网站上看到各种恶意的恶心广告,查看代码发现被注入了一些奇奇怪怪的js,这其实就是HTTP劫持,启用了HTTPS之后,我们传输的内容都是加密的,运营商想篡改内容都没辙。
为什么HTTPS能够有效的解决DNS劫持呢?在域名被劫持的情况下,客户端访问的实际上是攻击者的IP,客户端通过这个IP找到攻击者的服务器,要求建立HTTPS通信,因为攻击者没有真实服务器的证书和私钥(想要申请这个域名的证书必须验证自己是这个域名的所有者,攻击者做不到这一点),把伪造或自签名的证书提供给客户端,是得不到浏览器的认可的,浏览器会弹出不安全的警告。但是用户执意要访问我们也没办法,所以才用了有效解决而不是彻底解决这一词。
另外,就近看的话,越来越多的场合强制要求https(比如ios、微信小程序等等都要求https),从长远看,升级HTTPS是大势所趋,一次升级,永久受益。
2.1.4. HTTPS的缺点服务器性能下降,开启HTTPS会增加内存、CPU、网络带宽的开销,特别是非对称加密这一块;
访问速度下降,HTTP连接的建立需要3次握手,HTTPS还需要加上ssl的几次握手(具体是几次没去考究,有说是9次),当然下降主要是在第一次建立连接的时候,后面正常通信速度一般没啥变化;
除了握手部分外,所有信息传输之后浏览器和服务器都要进行加密解密,又是一笔额外的开销;
申请证书需要一笔花费,当然现在免费证书也很容易申请到,这个不算明显缺点;
一句话概括就是:性能和速度下降,但是具体下降多少呢,这个不太好讲,可以延伸阅读:HTTPS 要比 HTTP 多用多少服务器资源?
2.1.5. HTTPS原理HTTPS主要分为单向认证和双向认证,99%的场景都只需要单向认证,双向认证我们后面再来讲。
2.1.5.1. 小明和小红的故事在介绍HTTPS原理之前,我们先来假设,假如让我们自己设计一套加密方案该如何实现呢?为了更好理解,我们用人来举个栗子: