本文只是做一个《图解HTTP》的读书笔记,有里面很多的截图,深入了解的话,建议大家去看《图解HTTP》,不喜勿喷。
1.为什么要使用https?
主要是http存在以下不足:
- 通信使用明文(不加密),内容可能被窃听
- 不验证通信方的身份,因此可能遭遇伪装
- 无法验证报文的完整性,所以有可能已遭篡改
下面详细描述http的几个不足:
1.1内容的加密
http协议中没有加密协议,所以会对http协议传输的内容本身进行加密,即加密报文部分:
这种做法需要客户端和服务端同时具备加密和解密的机制,而且内容仍有被篡改的风险。
1.2不验证通信方的身份就可能遭遇伪装
http协议的实现本身很简单,不论是谁发过来的请求都会返回响应,因此不确认通信方,会存在以下各种隐患:
- 服务器可能是伪装的
- 客户端可能是伪装的
- 无法确认正在通信的对方是否具备访问权限
- 即使是无意义的请求也会照单全收,无法阻止海量请求下的Dos攻击(Denial of Service,拒绝服务攻击)
虽然使用http协议无法确认通信方,但如果使用SSL则可以。SSL不仅提供加密处理,还提供了一种被称为证书的手段,可用于确认双方。
证书是由值得信任的第三方机构颁发,用来验证服务器和客户端的身份。
1.3 无法证明报文的准确性,可能已遭篡改
像这样,请求或相应在传输途中,遭攻击者拦截并篡改内容的攻击成为中间人攻击(Man-in-the-Middle attack,MITM)。
2.什么是https
- HTTP + 加密 + 认证 + 完整性保护 = HTTPS
或者是 HTTP + SSL/TLS = HTTPS
HTTPS并非是应用层的一种新协议,只是HTTP通信接口部分用SSL/TLS协议代替而已。
通常,HTTP直接和TCP通信,当使用SSL时,则变成先和SSL通信,再由SSL和TCP通信。
3.https加密方式
3.1 共享密钥加密(对称密钥加密)
加密算法公开,密钥是保密的,而且服务器和客户端使用相同的密钥。这种方式的难点在于如何安全的发送共享密钥,如下图所示:
3.2公开密钥加密方式(非对称加密)
公开密钥加密方式使用两把密钥,很好的解决了共享加密密钥方式的困难。
其中一把叫做私有密钥,另一把叫做公开密钥,私钥不能让其他任何人知道,公钥则可以随意发布,任何人都可以获得。
公开密钥加密方式的过程是:发送方使用对方的公钥进行加密,对方收到被加密的信息后,再使用自己的私钥进行解密。这样就不担心密钥被攻击者窃听而盗走。
3.3https采用混合加密机制
由于公开密钥加密的速度要比共享密钥的速度慢很多,所以应该使用两者的优势,采用混合加密方式:在交换密钥环节使用公开密钥加密方式,之后建立通信交换报文阶段则使用共享密钥加密方式。
4.如何证明公开密钥的正确性
公开密钥加密方式还存在一些问题,就是无法证明公开密钥本身就是真的公钥,应为在公钥传输过程中,可能已经被攻击者换掉。
为了解决上述问题,可以使用有数字证书认证机构(CA)和其相关机关颁发的公开密钥证书。具体流程如下:
- 1.服务器运营人员向第三方数字证书认证机构购买由自己的信息签名的公开密钥,并将公开密钥放入公钥证书后绑定在一起,公钥证书也叫数字证书或证书
- 2.服务器将公钥证书发送给客户端,以进行公开密钥加密方式。
- 3.接到证书的客户端可使用数字证书认证机构的公开密钥,对服务器发来的证书上的数字签名进行验证,一旦验证通过,客户端可以明确两件事:
一,认证服务器的公开密钥的真实有效的数字证书认证机构。二,服务器的公开密钥是值的信赖的。
上面的第三步中,客户端的数字证书认证机构的公开密钥是怎么来的呢?
如果使用通信的方式,如何安全的转交是一件很困难的事,因此多数浏览器都已经内置了常用认证机关的公开密钥,手机端也是如此。
5.用来确认客户端的客户端证书
https的证书验证分为单向验证和双向验证,单向验证是指客户端验证服务器证书或者服务器验证客户端证书;双向验证是客户端和服务器互相验证证书。
在描述4中讲解的是客户端验证服务器证书的过程,服务器同样也需要认证客户端的证书,用来确保是合法的客户端。
但是客户端证书必须需要用户自己将证书安装到客户端上,而第三方的证书是收费的,以上两点就导致这件事就很难执行。所以除了一些特殊机构,比如银行,不会采用客户端证书认证。
6. HTTPS的安全通信机制
简单归纳为:
验证服务器端
允许客户端和服务器端选择加密算法和密码,确保双方都支持
验证客户端(可选)
使用公钥加密技术来生成共享加密数据
创建一个加密的 SSL 连接
基于该 SSL 连接传递 HTTP 请求
6.确保完整性
上面讲了加密 + 认证,还剩下完整性保护。
在https的通信流程中,应用层发送数据时会附加一种叫做MAC(Message Authentication Code)的报文摘要,Mac能够查知报文是否早遭到篡改,从而保护报文的完整性。
5.SSL 和 TLS
TLS是以SSL3.0为基准开发的,后又指定了TLS1.0、TlS1.1 、TLS1.2
SSL有以下缺点:
- 1.SSL会使通信变慢,主要是指由于大量消耗CPU及内存等资源,导致处理速度变慢。和使用HTTP相比,网络负载可能会变慢2到100倍,这是因为除去TCP连接、发送HTTP请求/响应外还增加了SSL通信。
- 2.SSL必须进行加密处理,客户端和服务器都需要进行加密和解密的运算处理,导致了更多的硬件损耗。
针对变慢的问题,还没有根本性解决方案,我们会使用SSL加速器这种(专用服务器)硬件来改善该问题,相对于软件来讲,它能够提高数倍SSL的计算速度,并分担负载。
6.其他不同之处
HTTP 标准端口是 80 ,而 HTTPS 的标准端口是 443
在 OSI 网络模型中,HTTP 工作于应用层,而 HTTPS 工作在传输层