HTTPS是什么?
HTTPS = HTTP + 加密 + 认证 + 完整性保护
。简单点说HTTPS可以看做是对HTTP的一个扩展,在HTTP的基础上添加了一些其他的东西。加密、认证和完整性保护
,添加这么些东西就很明显是为了保证数据的安全性
。
HTTP的不足:
- 通信使用明文(未加密),内容可能会被窃听
- 没有验证通信方的身份,可能遭遇伪装
- 无法证明报文的完整性,可能会被篡改
HTTPS的作用便是为了解决上述问题。HTTPS并不是一个新的协议,只是HTTP披了一层SSL或TLS的马甲。在四层模型中,HTTP位于应用层,是直接和传输层的TCP进行通信。当使用了SSL之后,则是HTTP和SSL通信,然后SSL再和TCP进行通信。
注:TLS实际上是以SSL3.0为基准制定的。当前主流版本是SSL3.0和TLS1.0。
关于SSL的加密方式
HTTPS相对于HTTP最重要的一点则是在对于数据的加密解密上。
共享秘钥加密(对称加密)
加密和解密使用同一个秘钥的方式被称为共享秘钥加密。以这种方式加密时必须将秘钥也发给对方,在复杂的网络上传输秘钥时,如果通信被监听,秘钥就很可能会落入到攻击者的手中,加密便失去了意义。
公开秘钥加密(非对称加密)
公开秘钥加密使用的是一对非对称的秘钥,一个叫做公开秘钥,一个叫做私有秘钥。顾名思义,任何人都可以得到公开秘钥,而私有秘钥则不能让其他人知道。
使用公开秘钥加密的方式,由发送方使用公钥对信息进行加密,接收方则使用私钥进行解密。使用这种方式则不需要担心秘钥被攻击者盗走。
HTTPS采用的是混合的方式
公开秘钥加密方式由于更加复杂,因此在通信是使用公开秘钥加密的方式则效率相对来说会很低,而共享秘钥加密的效率会很高,但却不能让秘钥安全的进行交换。
所以应该充分利用两者的优势,使用公开秘钥加密传输共享秘钥加密使用的秘钥,然后使用共享加密进行通信。
但还存在一个问题:不能保证公开密钥本身就是有效的。为了解决这个问题,数字证书认证机构(CA)
粉墨登场。
- 服务器运营人员会向CA提出公开秘钥的申请,CA在判明申请者的神风之后,会对申请的公开秘钥进行数字签名并将其放入公钥证书中
- 服务器会将公钥证书放松给客户端
- 客户端使用公钥证书的公开秘钥(一般内置在浏览器中)对证书进行验证
- 验证通过后,客户端便拿到了公开秘钥加密中的公开秘钥
HTTPS的通信过程
上面说了那么多,再看看这张图。有没有感觉像是一个套娃的过程。使用共享秘钥加密,则需要交换秘钥 => 使用公开秘钥加密交换秘钥,则需要交换公开密钥 => CA认证,发送公开秘钥证书 => 验证有效性,取出公开秘钥,对生成的秘钥(随机字符串)进行加密发送给服务器 => 服务器利用私有秘钥解密出秘钥 => 开始通信
为什么不一直使用HTTPS?
- 由于存在加密过程和额外的SSL通信,处理速度会变慢
- AC认证需要花费增加额外的开销
- 加密通信会消耗服务器和客户端更多的CPU和内存
参考:《HTTP图解》
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。