SSL 根证书颁发机构¶
- 日期:
2020-10-19 14:00
- 标签:
ssl, haproxy, nova, galera, infra
在现代世界中,使用 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 中的自签名证书使用
文档影响¶
将添加添加的选项和架构的文档,以及发布说明。