HTTPS加密机制

前言

HTTP 采用明文传输信息,存在信息监听信息篡改信息劫持的风险,而增加了 TLS/SSL 协议的 HTTPS 具有身份认证信息加密完整性校验的功能。

安全层的主要职责是:对发起 HTTP 请求的数据进行加密操作、对接收到的 HTTP 请求进行解密操作

TLS/SSL 工作原理

TLS/SSL 全称安全传输层协议,是介于 TCP 和 HTTP 之间的一层安全协议,不影响原有的 TCP 协议和 HTTP 协议,所以使用 HTTPS 基本不需要对 HTTP 页面进行很多改造。

TLS/SSL 的功能实现主要依赖三类基本算法:非对称加密对称加密hash散列

非对称加密

非对称加密指,我们同时有两种秘钥:公钥和私钥,私钥我们自己保存,公钥公布出去。任何想和我们通信的客户可以使用我们公开的公钥对数据进行加密,这样我们收到数据后就可以用私钥进行解密。而客户也可以用公钥对我们用私钥加密的信息进行解密。

常见的非对称加密有:RSA、ECC、DH等。

特点:信息一对多、计算复杂、加密速度慢。

对称加密

对称加密算法指,双方使用同一个秘钥进行数据加密和解密。但是秘钥需要通过网络传输,一旦秘钥被他人获取到,那么加密就毫无作用了。

常见的加密算法:AES-CBC、DES、3DES等。

特点:消息传输一对一,需要共享相同的秘钥。服务器和 n 个客户端通信就需要维护 n 个秘钥。

hash 散列

由于信息传输过程中是明文传输,中间人可以修改信息后重新计算信息的摘要,所以需要对传输的信息和信息摘要进行加密。

特点:单向不可逆、输出长度固定、任何数据修改都会改变散列结果。

数字证书(CA 证书)

服务器首先使用一种 hash 算法来对公钥和其他信息进行加密,生成一个信息摘要。然后让有公信力的认证中心(简称 CA)用他的私钥对消息摘要加密,形成签名。最后将原始的信息和签名合在一起,称为数字证书。

校验方式

当浏览器接受到数字证书的时候,先根据原始信息使用相同的 hash 算法生成一个摘要,然后使用认证中心的公钥对数字证书的签名进行解密,最后将解密的摘要和生成的摘要进行对比,就可以发现得到的信息是否被更改了。

浏览器会内置一些顶层认证中心的证书和公钥。

图解

HTTPS通信过程

客户端发送请求(ClientHello)

  1. 支持的协议版本,比如 TLS 1.0 。
  2. 客户端生成的随机数,用于之后生成对话秘钥
  3. 支持的加密方法,比如 RSA 。
  4. 支持的压缩方法。

这里需要注意的是,客户端发送的信息之中不包括服务器的域名。也就是说,理论上服务器只能包含一个网站,否则会分不清应该向客户端提供哪一个网站的数字证书。这就是为什么通常一台服务器只能有一张数字证书的原因。

对于虚拟主机的用户来说,这当然很不方便。2006年,TLS协议加入了一个Server Name Indication扩展,允许客户端向服务器提供它所请求的域名。

服务器回应(ServerHello)

  1. 确认使用的协议版本。如果浏览器和服务器支持的版本不一致,服务器就会关闭加密通信。
  2. 服务器生成的随机数,用于之后生成对话秘钥
  3. 确认使用的加密方法。
  4. 服务器证书。

除了上面这些信息,如果服务器需要确认客户端的身份,就会再包含一项请求,要求客户端提供“客户端证书”。比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书。

客户端回应

客户端收到服务器发来的证书后,会首先校验证书。如果不是可信机构颁布、证书中的域名与实际域名不一致、或者证书已经过期,都会向访问者显示一个警告,告诉其是否还要继续通信。

  1. 一个随机数,又称 pre-master key。
  2. 编码变动通知,表示之后的信息都将用双方协定的加密方法和秘钥发送。
  3. 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时是前面发送所有内容的hash值,用于服务器校验。

为什么需要 pre-master key ?

"不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性。

对于RSA密钥交换算法来说,pre-master-key本身就是一个随机数,再加上hello消息中的随机,三个随机数通过一个密钥导出器最终导出一个对称密钥。

pre master的存在在于SSL协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么pre master secret就有可能被猜出来,那么仅适用pre master secret作为密钥就不合适了,因此必须引入新的随机因素,那么客户端和服务器加上pre master secret三个随机数一同生成的密钥就不容易被猜出了,一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的可不是一。"

服务器响应

  1. 编码改变通知,表示之后的信息都将使用双方商定的加密方法和秘钥发送。
  2. 服务器捂手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的 hash 值,用于客户端校验。

HTTPS 的优缺点

优点

  1. 可以认证用户和服务器,确保数据在正确的用户和服务器之间传输。
  2. 可以加密传输、身份认证,使通信更安全,防止数据在传输过程中被窃听、修改。
  3. 现行架构下最安全的解决方案,虽不是绝对安全,但是大大增加了中间人攻击的成本。

缺点

  1. 客户端和服务器都需要加密和解密的处理,耗费更多的服务器资源。
  2. 握手阶段费事,增加页面加载时间。
  3. SSL 证书收费,功能越强大的证书费用越高。
  4. 链接服务器资源占用高,需要给服务器投入更高的成本。
  5. 在不支持 SNI 的服务器上,只能绑定一个 SSL 证书。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值