一:http的不安全性
- http是超文本传输协议,使用的是明文传输,有可能被中途拦截窃听
- 可能被第三方恶意拦截篡改,替换发送报文或者返回异常报文(http劫持)
- 无法验证通信双方身份,有可能被伪装(dns劫持)
二:https如何解决上述问题
1.明文传输问题(加密)
加密算法:对称性加密和非对称性加密,其中对称性加密性能好于非对称性加密。
对称加密:使用公钥加密,使用公钥解密
非对称加密:使用公钥加密,只有私钥能解密(使用私钥加密,所有公钥都能解密)
(1):使用对称加密,公开公钥
(2):使用对称加密,协商公钥,但是协商过程是明文的
(3)使用非对称加密,协商公钥一样会出问题,会发生http劫持
(4)引入一个第三方来证明我的公钥就是我的公钥(公钥的正确性)
对服务器公钥加密
数字证书:第三方机构对申请方公钥加密后的数据
:里面还明文保存了第三方机构是谁
第三方机构:也采用非对称加密,用私钥给申请方的公钥加密
然后把自己的公钥内置的浏览器里面,可以解密
申请方的加密后的公钥,在用公钥通信
上述流程有一个问题:不能辨别证书来自真正的服务器和黑客
(5)在引入第三方的前提下,如何让客户端识别证书的真伪,需要引入证书编号
证书包含内容:明文:server公钥,CN(域名), 国家, 省份,邮箱,组织,签名算法等....,私钥加密(通过签名算法(证书内容))= 证书编号
证书编号/证书序列号:经第三方机构私钥加密(证书内容的签名(md5))
流程图如下所示:
客户端浏览器如何识别证书的真伪
在上述场景下,黑客可以篡改服务器公钥信息吗?
黑客能获取的信息有CA公钥,服务器公钥,服务器信息的签名
但是拿不到CA的私钥,修改了公钥后,无法通过CA私钥重新加密签名
因此黑客无法篡改,除非浏览器内置了有问题的CA机构或者CA机构出问题了
解决了证书验证及服务器公钥被篡改的问题
(6)浏览器获取到服务器公钥,如何如服务器协商对称秘钥(因为对称加密的性能远远好于非对称加密)