HTTP 通信存在的问题
- 被监听
- http通信都是明文,数据在客户端与服务器通信过程中,任何一点都可能被劫持
- 比如,发送了银行卡号和密码,hacker劫取到数据,就能看到卡号和密码,这是很危险的
- 被伪装
- http通信时,无法保证通行双方是合法的,通信方可能是伪装的
- 比如你请求www.taobao.com,你怎么知道返回的数据就是来自淘宝,中间人可能返回数据伪装成淘宝
- 被篡改
- hacker中间篡改数据后,接收方并不知道数据已经被更改
HTTPS 解决的问题
https不是一种新的协议,它是http+SSL(TLS)的结合体,SSL是一种独立协议
https改变了通信方式,它由以前的http—–>tcp,改为http——>SSL—–>tcp
https采用了共享密钥加密+公开密钥加密的方式
- 防监听
- 数据是加密的,所以监听得到的数据是密文,hacker看不懂
- 防伪装
- 伪装分为客户端伪装和服务器伪装,通信双方携带证书,证书相当于身份证,有证书就认为合法,没有证书就认为非法,证书由第三方颁布,很难伪造
- 防篡改
- https对数据做了摘要,篡改数据会被感知到。hacker即使从中改了数据也白搭
HTTPS 工作原理
中转站
客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤:
(1)客户使用 HTTP 的URL访问Web服务器,要求与Web服务器建立SSL连接。
(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
(3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
(5)Web服务器利用自己的私钥解密出会话密钥。
(6)Web服务器利用会话密钥加密与客户端之间的通信。
共享密钥加密和公开密钥加密
- 共享密钥的加密密钥和解密密钥是相同的,所以又称为对称密钥
- 公开密钥的加密加密算法是公开的,密钥是保密的
- 公开密钥分为 私有密钥和公有密钥,公有密钥是公开的,任何人(客户端)都可以获取
- 客户端使用公有密钥加密数据,服务端用私有密钥解密数据
- 异同
- 共享密钥加密与公开密钥加密相比,加解密处理速度快,但公开密钥更适应互联网下使用
CA证书
参考链接
整个过程
- 服务器向CA机构获取证书(假设这个证书伪造不了),当浏览器首次请求服务器的时候,服务器返回证书给浏览器。(证书包含:公钥+申请者与颁发者的相关信息+签名)
- 浏览器得到证书后,开始验证证书的相关信息,证书有效(没过期等)。(验证过程,比较复杂,详见上文)
- 验证完证书后,如果证书有效,客户端是生成一个随机数,然后用证书中的公钥进行加密,加密后,发送给服务器,服务器用私钥进行解密,得到随机数。之后双方便开始用该随机数作为钥匙,对要传递的数据进行加密、解密