SSL 根证书颁发机构

日期:

2020-10-19 14:00

标签:

ssl, haproxy, nova, galera, infra

Launchpad 蓝图

在现代世界中,使用 SSL 加密对于每个服务至关重要。OpenStack-Ansible 已经为部署者提供了覆盖公共和内部端点 SSL 证书的选项,并允许生成和使用自签名证书。但是,我们可以通过使用根 CA 来使这些证书“受信任”,该根 CA 将分发到所有容器和服务。这将提高安全性,因为用户将在证书验证失败时收到警报,因为将启用证书验证。

问题描述

目前,几个 openstack-ansible 角色以不同的方式创建自签名证书,这缺乏一致性并且难以维护。此外,这些证书是自签名的,这意味着必须禁用此类证书的证书验证。因此,如果发生证书“冒充”情况,您将不会收到警报,并且加密数据可能不再安全。

此外,对于 mysql SSL 使用,需要将根 CA 放在客户端容器中,以便 mysqlclient 能够访问数据库,而目前我们只覆盖了服务器端加密,但根 CA 分发仍然是部署者的责任。另一个很好的例子是 nova,为了禁用实时迁移的隧道并使用块设备迁移,我们应该使用相互可验证的证书来保护连接。

为了解决上述所有问题,我们需要

  • 根 CA 证书(以及可能不可用的相应密钥)

  • 一个中间签名证书和密钥

提议的变更

为了解决问题,我们需要在部署主机上创建一个根证书颁发机构,该机构将用于进一步创建证书。

我们需要它用于(但不限于)
  • 为 CI 中的 HAProxy 创建自签名证书

  • 创建 ssh 签名证书以替换 nova 和 keystone 角色中的 ssh 密钥

  • 为实时迁移使用 TLS

  • 为 galera 和其他基础设施服务使用 TLS

  • 为 HAProxy 和 uwsgi 之间的连接使用 TLS

实现

在单独的仓库中创建角色,该角色将由多个部分组成,这些部分将在需要时包含在内

# 创建/轮换或验证部署主机上提供的现有 CA。包含在 openstack_hosts 中,以将 CA 分发到证书存储。我们应该实现适当的根 CA 轮换机制,包括使用 OldWithOld、OldWithNew 和 NewWithOld。# 创建/轮换或验证现有的密钥和证书,这些密钥和证书也将存储在部署主机上。将在其运行时包含在所需的角色中。每个组件的每个实例使用唯一的证书。# 确定如果需要根据 SSL 证书中的主题名称验证 DNS 名称,我们如何“调用”内部 VIP。考虑支持包含多个名称或 IP 的 SAN 证书。# 创建一个可以根据 CA 证书进行验证的签名 ssh 密钥,以避免将所有密钥分发到所有主机。# 角色应该具有一个特定的密钥,用于在要求时轮换自签名证书和根 CA。部署者负责跟踪证书的到期日期。由于它们放置在部署主机上,因此为监控工具配置起来应该非常简单。

角色/服务影响

对于所有主机/容器

根 CA 安装到系统信任存储中。考虑将 REQUESTS_CA_BUNDLE 指向系统信任存储,而不是证书捆绑包。

对于 HAproxy

我们将拥有以下用户场景
  • 用户提供他们自己的证书和密钥,并将变量指向文件

  • Letsencrypt 创建证书

  • 在部署时由 OSA 角色创建自签名证书和密钥

  • 禁用 SSL 证书使用

注意

自签名证书需要引导 LE 进行首次运行

对于 Galera(或其他基础设施服务)

我们将拥有以下用户场景

  • 用户提供他们自己的证书和密钥,并将变量指向文件

  • 在部署时由 OSA 角色在部署主机上创建自签名证书和密钥(存储在部署主机上的已知位置)。现有的 ansible 角色会获取这些证书

  • 禁用 SSL 证书使用

对于 Nova 和 Octavia 等可以使用 TLS 的服务组件

我们将拥有以下用户场景

  • 用户提供他们自己的证书和密钥,并将变量指向文件

  • 在部署时由 OSA 角色在部署主机上创建自签名证书和密钥(存储在部署主机上的已知位置)。现有的 ansible 角色会获取这些证书

  • 禁用 SSL 证书使用

用于替换 ssh 密钥

  • 在部署主机上创建签名 ssh 证书,并复制到相关的 .ssh 用户目录。签名 CA 安装到 /etc/ 中的相关 ssh_config 文件中。

  • 部署者可能已经在用于访问主机的 ssh 密钥中使用签名 ssh 密钥,因此任何实现都应与现有配置一起工作。可能需要研究支持 ssh_config 文件中的多个受信任 CA。

升级影响

默认情况下,所有类型服务都将使用自签名替代方案。如果部署者希望省略该操作,则需要在升级之前显式禁用该行为。目前不计划对升级进行其他影响。

安全影响

实现此蓝图应该使系统更加安全,因为 SSL 用于大多数交互,并且即使对于自签名证书也启用了 SSL 验证。

性能影响

这可能会略微降低性能,因为 SSL 加密需要额外的 CPU 周期和 TLS 握手,但是这种下降可以忽略不计。

最终用户影响

没有最终用户影响

部署者影响

部署者将能够提供
  • 根 CA

  • 一个中间证书和密钥

我们还应该允许禁用服务的 SSL 使用。

开发人员影响

此蓝图将简化角色的维护,因为所有 SSL 相关部分都将移动到独立的角色中。因此,如果需要更改特定任务,它将在一个地方完成,而不是在每个角色中完成。

实现

负责人

主要负责人

noonedeadpunk

其他贡献者

jrosser

工作项

待定

测试

我们将启用 CI 中的自签名证书使用

文档影响

将添加添加的选项和架构的文档,以及发布说明。

参考资料