HTTP HTTPS RSA AES
HTTP是客户端,浏览器或者其他程序与Web服务器之间的应用层通信协议, 简称超文本传输协议.
HTTPS是HTTP的安全版, 多了一个SSL(安全套接层)或者TSL(安全传输层)协议.
HTTP的缺点:
- 通信内容为明文, 没有经过加密, 内容可能会被窃听.
- 通信双方的身份没有进行验证, 可能出现伪装身份的情况.
- 接受的报文完整性无法确定, 可能中途被改动.
HTTPS在HTTP的基础上增加了:
- 通信加密
- 证书认证
- 完整性保护(SHA-2: 摘要信息)
首先要明白的是, HTTPS并非一个新的协议, 而是在HTTP的通信接口部分采用了SSL协议来实现的:
可以看出SSL是独立于HTTP的协议, 同样也可用于其他协议的加密.
HTTPS采用混合加密机制
含有对称加密, 非对称加密, 单向加密
HTTPS的握手机制
-
客户端发起https请求
用户发出一个https请求, 连接到服务端的443端口
-
服务端的配置
采用https协议的服务器必须要有一套数字证书, 可以自己制作, 也可以向相关组织申请, 区别就是自己颁布的证书需要客户端验证通过, 才可以继续访问, 而使用受信任的组织申请的证书则不会弹出提示页面
-
传送证书(公钥)
这个证书其实就是公钥(其实这个就是非对称加密产生的公钥), 包含了很多信息, 如证书的颁发机构, 过期时间等.
-
客户端解析证书
这里是由客户端的SSL(TSL)来完成的, 首先会检验公钥是否有效, 如果发现异常, 则会弹出一个警告框, 提示证书存在问题, 如果证书没有问题那么就生成一个随机值(对称加密生成的私钥), 然后使用证书对该随机值进行加密(使用非对称产生的公钥加密对称加密生成的私钥保证了私钥的安全性).
-
传送加密信息
这里传送的是用证书加密后的随机值, 目的就是让服务端得到这个随机值(服务端获取到和客户端一样的私钥), 以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了.
-
服务端解密信息
服务端使用生成证书时产生的私钥解密, 得到了客户端传来的随机值(对称加密产生的私钥), 然后把响应内容通过该随机值进行对称加密. 这样服务端和客户端都有私钥, 就能进行加密和解密了.
-
传输加密后的信息
这部分信息是服务端使用私钥加密后的信息, 可以在客户端利用私钥被还原.
-
客户端解密信息
客户端使用之前生成的私钥来解密服务端传来的加密信息, 获取正确内容, 整个过程第三方即使获取了数据, 也无法解密.
HTTPS常见攻击方式:
- 降级攻击(SSL剥离攻击)
- 解密攻击(明文, 证书伪造)
- 协议漏洞, 实现方法的漏洞, 配置不严格
ps: 关于HTTPS也可以被charles抓包获取被加密的数据的问题, 这个是由于客户端本身安装了伪造的证书, 相当于是中间人攻击, 这个问题, 就是用户问题, 无法去避免的.
RSA
RSA算法是公开密钥系统的代表, 采用公钥加密, 私钥加密, 是非对称加密, 安全性极高. 但是加解密速度慢, 不适合大量数据加密.
AES
AES是对称加密, 在密钥管理方面, 要求通信前双方都有私钥才能进行加解密, 安全性没有RSA高, 但是加解密速度要优于RSA, 适合大量数据加密.
在网络传输数据的过程中, 如果使用AES对称加密机制对传输数据加密, 同时使用RSA不对称加密机制来传输AES的密钥, 就可以综合发挥AES和RSA的优点同时避免它们的缺点来实现一种加密方案了.
具体过程是先由接收方创建RSA密钥对, 接收方通过网络发送RSA公钥到发送方, 同时保存RSA私钥. 而发送方创建AES密钥, 并利用该AES密钥加密待传送的明文数据, 同时使用接受的RSA公钥加密AES密钥, 最后把用RSA公钥加密后的AES密钥同密文一起通过网络发送给接收方. 当接受方收到这个被加密的AES密钥和密文后, 首先调用接收方保存的RSA私钥, 并用该私钥解密被RSA公钥加密的AES的密钥, 得到AES密钥, 最后用该AES密钥解密密文得到明文.
其实这个过程和HTTPS的请求过程有很大的相似, 可以说是受这个的启发了. 在企业级开发中, 可以作为加密方案.