轮换安全证书

本数据库允许您轮换安全证书而无需重新启动节点

何时轮换证书

在以下情况下,您可能需要轮换节点,客户端或CA证书:

  • 节点,客户端或CA证书即将到期。
  • 您组织的合规性政策要求定期进行证书轮换。
  • 密钥已被泄露(对于节点,客户端或CA。
  • 您需要修改证书的内容,例如,添加另一个DNS名称或负载均衡器的IP地址,通过该IP地址可以访问节点。在这种情况下,您只需要轮换节点证书。

轮换客户证书

  1. 创建一个新的客户端证书和密钥:
   hubble cert create-client <username>
   --certs-dir=certs \
   --ca-key=mysafedirectory/ca.key
  1. 使用您的首选方法将新的客户端证书和密钥上载到客户端。

  2. 让客户端使用新的客户端证书。

    此步骤是特定于应用程序的,可能需要重新启动客户端。

轮换节点证书

要轮换节点证书,请创建新的节点证书并密钥,然后将其重新加载到节点上。

  1. 创建一个新的节点证书和密钥:
   hubble cert create-node \
   <node hostname> \
   <node other hostname> \
   <node yet another hostname> \
   --certs-dir=certs \
   --ca-key=mysafedirectory/ca.key \
   --overwrite

由于必须在与现有证书和密钥相同的目录中创建新的证书和密钥,因此请使用--overwrite标志覆盖现有文件。另外,请确保指定可以到达该节点的所有地址。

  1. 将节点证书和密钥上载到节点:
   scp certs/node.crt \
   certs/node.key \
   <username>@<node address>:~/certs
  1. 通过向hubble进程发出SIGHUP信号来重新加载节点证书,而无需重新启动节点:
   pkill -SIGHUP -x hubble

SIGHUP信号必须由运行该进程的同一用户发送(例如,如果hubble进程在root用户下运行,则使用sudo运行)。

  1. 使用管理界面中的“本地节点证书”页面来验证证书轮换是否成功:
   https://<address of node with new certs>:8080/#/reports/certificates/local

滚动到节点证书详细信息,并确认“有效期至”字段显示新证书的到期时间。

轮换CA证书

要轮换CA证书,您需要创建一个新的CA密钥以及一个包含新CA证书和旧CA证书的组合CA证书,然后在节点和客户端上重新加载新的CA证书。一旦所有节点和客户端都具有合并的CA证书,就可以创建使用新CA证书签名的新节点和客户端证书,并将这些证书重新加载到节点和客户端上。

Tip : 为什么Hubble创建组合的CA证书

轮换CA证书时,重新扫描certs目录后,节点将具有新的CA证书,而客户端在重新启动时将具有新的CA证书。但是,在轮换节点证书和客户端证书之前,仍然使用旧的CA证书对节点和客户端证书进行签名。因此,节点和客户端无法使用新的CA证书来验证彼此的身份。

为了解决此问题,我们利用了多个CA证书可以同时处于活动状态这一事实。在验证另一个节点或客户端的身份时,他们可以检查上载到它们的多个CA证书。因此,Hubble可以创建一个组合的CA证书,其中包含新的CA证书,后跟旧的CA证书,而不仅仅是在轮换CA证书时仅创建新证书。轮换节点证书和客户端证书时,将使用组合的CA证书来验证旧的以及新的节点证书和客户端证书。

Tip : 为什么要提前轮换CA证书?

在轮换CA证书后轮换节点和客户端证书时,将使用新的CA证书对节点和客户端证书进行签名。重新扫描节点上的certs目录后,节点将使用新节点和CA证书。但是,客户端仅在重新启动客户端后才使用新的CA和客户端证书。因此,尚不具有新CA证书的客户端将不接受由新CA证书签名的节点证书。为确保所有节点和客户端都拥有最新的CA证书,请以完全不同的时间表轮换CA证书;理想情况下,是在更改节点和客户端证书之前的几个月。

  1. 重命名已存在的CA证书:
   mv mysafedirectory/ca.key mysafedirectory/ca.old.key
  1. 使用--overwrite标志覆盖旧的CA证书,创建一个新的CA证书和密钥:
   hubble cert create-ca \
   --certs-dir=certs \
   --ca-key=mysafedirectory/ca.key \
   --overwrite
  • 这将生成组合的CA证书ca.crt,其中包含新证书,后跟旧证书。

警告: CA密钥永远不会由hubble命令自动加载,因此应在一个单独的目录中创建该目录,该目录由--ca-key标志标识。

  1. 将新的CA证书上载到每个节点:
   scp certs/ca.crt <username>@<node1 address>:~/certs
  1. 使用您的首选方法将新的CA证书上载到每个客户端。

  2. 在每个节点上,通过向Hubble进程发出SIGHUP信号来重新加载CA证书,而无需重新启动该节点:

   pkill -SIGHUP -x hubble

SIGHUP信号必须由运行该进程的同一用户发送(例如,如果Hubble进程在root用户下运行,则使用sudo运行)。

  1. 在每个客户端上重新加载CA证书。 此步骤是特定于应用程序的,可能需要重新启动客户端。

  2. 使用管理界面中的“本地节点证书”页面来验证证书轮换是否成功:

   https://<address of node with new certs>:8080/#/reports/certificates/local

应显示旧的和新的CA证书的详细信息。确认新CA证书的有效期至字段显示新证书的到期时间。

  1. 一旦确定所有节点和客户端都具有新的CA证书,就轮换节点证书并轮换客户端证书。