HTTPS披着SSL的HTTP
上篇文章有介绍HTTP的主要特点。死磕HTTP协议----HTTP特点与报文格式
我们的HTTP简单高效,对于大部分业务处理的都是游刃有余,但是,事物都有两面性,任何技术都有其局限性,HTTP也不例外,HTTP在面对安全性较高的传输时,表现得相当平庸,这个时候,它就要穿上它那密不透风的披风SSL了。
一.HTTP的局限性
1.通信使用明文,内容可能会被窃听
HTTP采用明文传输,所谓明文传输,即是没有对报文经过加密传输。
由于TCP/IP协议族的工作机制,通信内容在所有通信线路上都有可能被窥视,所以采用明文传输,很容易被窃听。如果对报文进行加密,虽然我们的报文还是会被窥探,但是,通过加密,别人可能无法破解报文,不能理解报文的真正含义。
2.不验证通信方身份,可能遭遇伪装
HTTP协议非常简单,不存在确认通信方的处理功能,任何人都可以发起请求,收到请求都会返回响应,所以可能出现各种隐患:
- 无法确认请求的目标服务器是否真实
- 无法确认响应的客户端是否真实
- 无法确认请求来自何方,出自谁手
- 无法确认通信方是否具备访问权限
- 即使是无意义的请求也照单全收(DoS攻击就是一个很好的例子,可能耗尽服务器资源)
3.无法证明报文的完整性,可能遭到篡改
由于HTTP无法证明通信报文的完整性,因此,在通信过程中,即使报文被篡改,通信双发也察觉不到。
二.对称加密和非对称加密
1.对称加密
所谓对称加密即加密和解密使用同一把密钥
- 优点:加密快
- 缺点:无法将密钥安全传输给对方

2.非对称加密
所谓非对称加密即加密使用公钥,解密使用密钥
- 优点:密钥私有,公钥公开,不需要传输密钥,也就没有安全问题(除非本地被劫持)
- 缺点:加密算法复杂,运算慢

三.HTTPS协议
1.HTTPS通信结构
为了保证传输的安全,于是引入了HTTPS(全称:Hyper Text Transfer Protocol over SecureSocket Layer)。HTTPS并不是新的协议,只是HTTP通信接口部分使用了SSL(Secure Socket Layer)和TLS(Transport Layer Security),其通信结构如图:

2.HTTPS如何实现安全传输
方案A.对称加密
如果采用私钥加密,显然非常简单,但是,私钥的安全传输不能保证,如果私钥被偷窥者劫持,那么你的密文相当于完全暴露给了偷窥者,所以该方案被pass。
方案B.非对称加密
采用对称加密的方案,服务器公开自己的公钥,客户端可以用公钥加密形成密文,虽然偷窥者有公钥,但是公钥不能对密文进行解密,只有服务端的私有密钥才能解密。显然,这样实现的话安全性能够得到保障,但是,非对称解密复杂,运算缓慢,所以在时间响应上非常不友好,该方案被pass。
方案C.对称加密+非对称加密
为了克服对称加密密钥的安全传输和保证客户端和服务端通信的效率,可以采用对称加密和非对称加密相结合的方案。服务器拥有公钥A和私钥A,将公钥A发送给客户端,客户端生成一对私钥B,然后客户端用公钥A加密私钥B并发给服务器,服务器用私钥A解密密文得到私钥B,然后通信双方就可以用私钥B对报文进行加密传输,即保证了安全,又能够让响应速度满足用户需求,简直秒不可言。
通信过程如图:

一切看上去都是如此完美,但是,突然有一天冒出个江洋大盗,还是把密文给窃取了!

所谓道高一尺,魔高一丈,看上去无懈可击的通信过程还是出现了通信漏洞,那它是如何窃取的呢?

方案D.方案C的改进
方案C之所以会出现安全问题,是因为服务器发给客户端的公钥可能会被窥探者篡改,无法保证其真实性。有BUG就要改BUG,这个时候,数字认证机构就要登场了(CA,Certificate Authority)
1.什么是数字认证机构
数字认证机构处于客户端与服务器双方都可信赖的第三方机构,威瑞信就是其中一家非常有名的数字认证机构。认证机构信誉第一,是建立在绝对可靠这一大前提下的,但是,凡事都有例外,2011年7月,荷兰一家名家DigNotar的认证机构遭黑客不法入侵,颁布了伪装证书,这一事件撼动了SSL的可信度。
2.认证流程
- 服务器运营人员向认证机构提出公钥申请
- 认证机构判定申请者身份后,对公钥进行签名,并给将公钥绑定在公钥证书上
- 服务器把证书发给客户端
- 客户端收到证书,用机构公开密钥对证书签名进行验证,验证通过即可证明:
- 认证服务器的公开密钥是真实有效的数字认证机构颁发
- 服务器的公开密钥是值得信赖的
- 接下来就可以方案C一样通信了。
明确两个事情:
1.什么是签名:简单来说,数字签名是公钥密钥的逆应用,用私钥加密,用公钥解密。
*生成签名:不直接对信息进行签名,而是对的哈希值进行签名,步骤如下。
- 对信息进行哈希计算,得到摘要
- 利用私钥对摘要进行加密,生成签名
- 将签名附加在信息后面,一起发送过去
*验证签名
- 收到信息后,提取消息中的签名
- 用公钥对签名进行解密,得到摘要1
- 对信息进行哈希计算,得到摘要2。
- 比较摘要1和摘要2,如果相同,则验证成功。
2.认证机关的公钥怎么安全交给客户端
使用通信方式安全转交是很困难的,因此,多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开密钥。
3.HTTPS最终加密过程
一共涉及三对钥匙
1.CA的私钥C和公钥C:私钥C用于签名,公钥C事先存在客户端,用来验证签名
2.服务端的私钥A和公钥A:私钥A用于解密密文得到私钥B,公钥A在证书里面,用来加密私钥B
3.私钥A和公钥A:由客户端生成,通过公钥A传输,用于对称加密传输的信息
最终流程图:

四.HTTPS存在的问题
HTTPS安全可靠,但是也存在一些问题,最主要的是它的处理速度会变慢,主要分两种:
1.通信慢: 通信过程中,除去TCP连接、发送HTTP请求和响应外,还要和SSL通信,整体负载会增加,速度变慢2到100倍。
2.运算慢: 因为加密需要计算,和HTTP相比就会消耗更多的CPU和内存,其处理速度也会变慢。
五.HTTPS和HTTP的主要区别
- HTTP是超文本传输协议,信息是明文传输不安全,HTTPS则加入了SSL协议,保证其安全性,即HTTPS=HTTP+加密+认证+完整性保护
- HTTPS协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
- HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- HTTP传输比较快,在传输非敏感内容的时候使用HTTP会比较合适。
六.参考资料
1.数字签名是什么–阮一峰
2.图解HTTP–上野宣
志同道合,五湖四海皆兄弟,希望能和大哥们一起在知识的海洋斗智斗勇!
本文深入解析HTTPS协议,探讨HTTP的局限性,对比对称加密与非对称加密,详细讲解HTTPS的通信结构与安全传输机制,包括数字认证机构的作用及HTTPS存在的问题。
1024

被折叠的 条评论
为什么被折叠?



