一些网络问题梳理

包括证书密钥泄露和DNS的anycast

Posted by Haiming on May 6, 2020

今日发现了在证书链传递过程之中和DNS相关的一些问题没太搞清楚,再来总结一下,把问题摸清。

1. 证书私钥泄露了怎么办?

参考:https://www.anquanke.com/post/id/183339

假设证书链之中的某一个环节,其私钥被泄露出去了,那么该怎么办?

这种情况就需要吊销证书了。那么如果证书的状态是已吊销,怎么能够让其他的终端知道这个证书已经被吊销呢?

.1 远古时代——Certificate Revocation Lists(CRL)

CA会定期发放这个CRL——撤销证书列表。这个CRL分布在公共可用的存储库之中,浏览器哦可以在验证证书的时候查询并且获得CA的最新CRL。

其缺陷为:

  1. 受限于CRL发布期,假设有一个CA的发布期是一个月,那么就意味着这个月之内,黑客可以为所欲为。
  2. 文件平均大小是1M,如果在网络请求之前需要下载这个文件,那代价有些太大了。

1.2 Online Certificate Status Protocol(OCSP)

这种情况修改了之前的下载文件本地校验的过程,而是提供一个接口,浏览器通过线上OCSP服务器之中请求证书的撤销状态,OCSP Server再给出响应。这种方法可以避免CRL更新延迟问题。

1.2.1 OCSP的缺点:

  1. 浏览器每次发送HTTPS信息之前,都得去连接CA OCSP Server来进行验证,那么如果和OCSP的连接不稳定,就会花费很长时间。
  2. 如果每次使用HTTPS的时候都需要进行验证,那么OCSP Server本身其实也是一个单点,单点就会有瓶颈。
  3. 在浏览器发送HTTPS证书序号到CA OCSP Server的时候,也暴露了用户的隐私,将用户访问的网址透露给了CA OCSP Server。

1.2.2 OCSP机制衍生的问题

如果浏览器检查HTTPS的吊销状态的时候,得不到OCSP Server 的响应,该如何选择?

  1. 拒绝该证书信息:hard-fail,致命的单点故障
  2. 信任该证书:soft-fail,认为其没有吊销,会有安全问题

1.2.3 OCSP Staping

由于之前的CRL都是由浏览器发出请求,不管是去获取CRL file也好,还是去访问对应的服务器网关也好,那么就容易收到客户端网络质量的干扰。

OCSP Staping 的方案解决了 CRL,OCSP之中的缺点,其将获取OCSP Server证书吊销情况的过程交给Web服务器去做。那么网站的服务器进行查询并且将其结果保存。而且OCSP 的响应结果也是CA RSA私钥签名的,所以不必担心伪造。

同样的,这种方式可以避免用户泄露的问题。

1.2.4 OCSP Must-Staple

目前支持这个协议的CA是Let’s Encrypt。

如果收到的证书之中的标记是OCSP Must-staple,但是没有收到对应的 OCSP Stapling的话,就会拒绝这个证书。意思就是必须携着OCSP Stapling的信息来进行一起投递,只投递一个的话直接拒绝。

2. DNS anycast使用场景

为什么我们无论在哪,连接DNS都速度很快?比如我在新加坡,连接谷歌的8.8.8.8,理论上要跑一阵的鸭?为什么速度比这个快很多?

参考:https://ixjx.github.io/blog/2019-09-10/AnyCast%E5%AE%9E%E7%8E%B0DNS%E9%AB%98%E5%8F%AF%E7%94%A8/

是因为采用了anycast(任播)技术。

Anycast,就是不同的服务器之中使用了相同的IP地址。当发送方发送报文给这个共享单播地址的时候,报文会根据路由协议,比如OSPF,路由到离这一组主机之中的发送方最近的一台。所以也可以用来做负载均衡。

一般而言,是用来做大范围的DNS部署,CDN,数据中心等等。

一般我们对于一个IP地址,都只会对应一个主机啊?多个主机使用一个IP地址不是地址冲突了?

回答:

首先,每一个服务器的主机地理位置不同,其不在一个广播域之内,所以将主机配置成相同的IP地址并不会在这个广播范围之内造成IP地址冲突。

除此之外,其还需要路由协议,各个站点都向外宣告一样的Anycast IP地址。

举例:

假设配置4个DNS节点的地址为一样的IP,都是1.1.1.1/32,那么服务器直接和路由器建立OSPF邻居,对外宣告1.1.1.0/27网段,这样PE,(Provider Edge,服务商边缘路由器)就会学习到这个1.1.1.0/27.

(注:为什么要宣告/27,而不是/32?那是因为上面有规定,为了减小VPN路由表,PE设备规定了只接受大于/8,小于等于/27的网段宣告进入骨干网。Internet 里也有类似规定)

完成之后,骨干网对于1.1.1.1/27就具有了四个不同出口的路由器,那么客户端使用1.1.1.1作为DNS服务器的时候,就可以根据OSPF协议选择到最优路径。

同样的,如果其中几台出了故障,那么OSPF会停止宣告故障机的网段,那么路由表之中就只会有目前可以提供服务的DNS做选择,但是客户端感应不到,达到高可用性。