文章目录
HTTPS
TLS
HTTPS通过HTTP来传输信息,但是信息通过TLS协议进行了加密
TLS协议位于传输层上,应用层之下。首次进行TLS协议传输需要两个RTT,接下来可以通过Session Resumption
来减少到一个RTT
使用了两种加密技术:对称加密和非对称加密
对称加密
对称加密就是两边拥有相同的秘钥,两边都知道如何将密文解密,AES
非对称加密
有公钥和私钥之分,公钥所有人都可以知道,可以将数据用公钥加密,但是将数据解密必须使用私钥解密。私钥只有分发公钥的一方才知道。RSA
RSA过程:
- 互质的q、p相乘得到n
- 取与n的欧拉函数φ(n),欧拉函数表示与n互质的个数
- 从1 < e < φ(n)中取一个与φ(n)互质的随机数
- 计算:ed === 1 (mode φ(n))
- 加密:m^e === c(mode n)
- 解密:c^d === m(mode n)
流程:
首先服务端将公钥公布出去,那么客户端也就知道了公钥了。接下来客户端创建一个秘钥,然后通过公钥加密并发送到服务端,服务端收到密文之后通过私钥解密正确的秘钥。这时候两端都知道秘钥是什么了。
握手阶段:(握手阶段所有通信都是明文的)
- 客户端向服务器发起加密通信技术,称为Client Hello
- 提供支持的协议版本
- 客户端生成的随机数
- 支持的加密方法
- 支持的压缩方法
- 服务器回应,向客户端发起回应,称为Server Hello
- 确认通信协议版本
- 服务器生成的随机数
- 确认使用加密方法
- 服务器证书
- 客户端回应,首先验证服务器证书,如果证书不是可信机构办法的,或者证书中域名和实际域名不一样,或者证书已经过期,就会像访问者显示一个警告,由其选择是否还要继续通信。如果证书没有问题,客户端从证书中取出服务器的公钥。然后向服务器发送下面三项信息:
- 一个随机数(加密)
- 编码改变通知
- 客户端握手结束通知。这一项是前面发送的所有内容的hash值,供服务器校验
- 服务端收到第三个随机数之后,计算本次会话所用的会话加密,然后向客户端发送下面信息:
- 编码改变通知
- 服务器握手结束,同时也是前面所有内容的hash值,供服务器校验
数字证书
CA私钥加密:hash(服务端公钥,服务端其他信息) ===> 签名过程
将上面加密后的密文与原始明文(未经过hash)合并后,再使用CA私钥进行加密,得到数字证书
即 原始信息 + 数字签名 = 数字证书
客户端拿到数字证书之后,利用公钥解密,判断明文里域名是否一致,然后再次解密签名,对明文进行hash与解密后签名比较,如果二者一致则验证成功。
使用Hash?避免证书被修改,提升效率,身份证明包括的信息较多,hash后减少信息量从而减少计算量
HTTPS
缺点:建立连接慢,解密加密过程消耗资源,SSL证书信用体系不绝对安全