HTTP与HTTPS区别
http发送数据以明文方式发送,存在被窃取,HTTPS是指使用http与ssl协议,访问过程会先和服务端建立链接,返回服务器网站证书,确认无误。
对称加密
原理:存在加密密钥K与解密密钥K一致,加密数据data。
举例:
- 浏览器(C端)向服务端(S端)发送数据,C端使用加密密钥K加密数据转为密文cT,S端接收到cT使用解密密钥K解析。
- 那么密钥K如何生成?因为S端仅有一个,因此密钥K在S端生成,当C端访问S端,会获取到密钥K。
- 缺点:如果存在黑客拦截,监听发送,获取到密钥K,则会导致数据被窃取。
非对称加密
原理:公钥pK、私钥sK,加密数据data。
举例:
- 密钥均存放于服务端。
- 浏览器(C端)向服务端(S端)访问,获取公钥pK。
- C端向S端发送数据data,使用公钥pK进行加密生成cT,S端接收cT使用私钥sK解析获取数据。S端向C端发送数据data,使用私钥sK进行加密产生cT ' ,C端接收cT'使用公钥pK解析获取数据。
- 缺点:如果存在黑客拦截,也可以在(2)中拦截获取公钥pK,进而解析(3)中S端向C端发送的数据cT',导致数据被窃取。
对称加密+非对称加密
原理:私钥sK由服务方指定,首次公钥有服务方指定,下次使用协商公钥、加密数据data。
举例:
- 公钥、私钥存放于服务端。
- 浏览器(C端)向服务端(S端)访问,获取公钥pK。
- C端产生一个key数据,通过公钥pK进行产生加密数据cT,发送到S端,S端使用私钥sK解密出key,此时双方均持有key,使用key作为新公钥(S端回复C端收到)。
- 此后C端发送数据使用key加密,S端使用key解密(即对称加密)。
- 缺点:如果存在黑客拦截,直接拦截(2),C端访问S端,黑客冒充S端,返回C端一个假的pK,黑客冒充C端,向真正S端发送请求,获取真正pK,此后重复(3)过程,将会导致C端key存放在黑客S端,而黑客在冒充C端到真正S端使用key' 作为公钥,在(4)中,黑客冒充S端,获取C端key数据并窃取C端数据,黑客冒充C端向服务端在窃取S端数据,充当中间人。
权威机构CA
原理:CA颁发cpK、CA持有csK。
举例:
- S端向CA机构获取证书license,CA使用csK加密S端pK产生license(付费)。
- C端向S端获取license后,使用cpK获取解密license获取pK,而cpK也可能被截获,因此直接写死在操作系统OS中,即C端已有cpK。
- 此后C端发送数据使用pK加密,而S端使用sK解密。
使用:对称加密+非对称加密+CA
HTTPS验证原理
Https在真正请求数据前,先回与目标服务器进行握手验证,以证明双方的正确性,没有中间人。
通信过程:
- C端发起https请求,将SSL/TSL版本、C端支持的机密算法种类(cipher)发送到S端。
- S端接收到cipher与自身对比,不支持就断开链接,否则选取一种加密算法和Hash算法,以证书形式返回C端(包括:公钥pK、颁发机构、自身网址、失效日期)。
- C端接收证书,验证证书合法性:是否合法与过期,是否证书中网址地址与当前地址保持一致,通过提示小锁,否则ishi红色小锁。
- 验证通过后,生产随机密码key,用证书中公钥pK加密,生成Hash握手消息(将握手消息取Hash值,使用随机数key加密生成'握手消息+握手Hash值')发送给S端。
- S端接收到C端数据,用私钥解密取出随机数密码key,使用key解密取出'握手消息+握手Hash值',进行比较验证C端身份。
- S端同样重复4过程,发送到C端。
- C端同样重复来确定S端身份。