SSL PKI¶
https://blueprints.launchpad.net/tripleo/+spec/tripleo-juno-ssl-pki
我们的每个云环境都需要多个 SSL 证书才能运行。我们需要支持在开发测试环境中生成这些证书,使其尽可能地模拟实际部署的需求。我们还需要支持与现有组织的 PKI(公钥基础设施)进行接口。本规范概述了我们将如何解决这些需求。
问题描述¶
我们有一些服务需要 SSL 证书
Keystone
公共 API
Galera 复制
RabbitMQ 复制
开发人员需要自动生成这些证书,而组织可能希望使用他们现有的 PKI。我们尚未明确在哪个级别管理这些证书和/或其 CA(证书颁发机构),以及在哪个级别用户将负责它们。公共 API 可能与仅面向内部的服务使用不同的 CA,这进一步增加了复杂性。
提议的变更¶
这些服务中的每一个都将接受其 SSL 证书、密钥和 CA,通过环境 JSON(用于 over/undercloud 的 heat 模板,用于 seed 的 config.json)。
在最精细的级别,用户可以通过编辑 over/undercloud-env.json 或 config.json 文件来指定这些值。如果为某个服务指定了证书和密钥,那么我们将不会尝试为该服务自动生成一个。如果仅指定了证书或密钥,则被认为是一个错误。
如果未为某个服务指定证书和密钥,我们将尝试生成证书和密钥,并使用我们生成的自签名 CA 对证书进行签名。在这种情况下,undercloud 和 seed 将共享一个自签名 CA,而每个 overcloud 将拥有一个单独的自签名 CA。我们还将此自签名 CA 添加到使用正在创建的云的服务的主机信任链中。
未来迭代将解决使用自定义 CA 对自动生成的证书进行签名的方案。
替代方案¶
目前尚未提出。
安全影响¶
此更改具有高度的安全影响,因为它会影响我们的 PKI。我们目前没有任何 SSL 支持,因此实施此功能应该可以提高我们的安全性。我们应该确保我们在此更改中创建的所有密钥文件都具有 0600 的文件权限,并且它们所在的目录具有 0700 的权限。
SSL 密钥生成有很多安全隐患(包括熵可用性),我们将其推迟到 OpenStack 安全指南[1] 中处理。
其他最终用户影响¶
用户可以通过编辑 under/overcloud-env.json 文件和 seed config.json 文件与此功能进行交互。此外,当前用于指定 keystone CA 和证书的属性将被更改,以支持更通用的命名方案。
性能影响¶
我们将执行密钥生成,这可能需要相当多的资源,包括熵源。
其他部署者影响¶
无
开发人员影响¶
将为开发人员生成更多的 SSL 密钥。一旦采用 SSL,通过监控网络流量进行调试也可能更加困难。生产环境还需要 SSL 解包来调试网络流量,因此这将使我们能够更接近地模拟生产环境(开发人员现在可以发现缺失的 SSL 包装)。
实现¶
os-cloud-config 中 generate-keystone-pki 背后的代码将被泛化,以支持单独创建 CA 和证书,并支持使用单个 CA 创建多个证书。将创建一个名为“generate-ssl-cert”的新脚本,该脚本接受 heat 环境 JSON 文件和服务名称。这将添加 ssl.certificate 和 ssl.certificate_key 属性在 servicename 属性下(如下例所示)。如果未定义 ssl.ca_certificate 和 ssl.ca_certificate_key 属性,则此脚本将执行自签名证书的生成。
示例 heat 环境输出
{
"ssl": {
"ca_certificate": "<PEM Data>",
"ca_key": "<PEM Data>"
},
"horizon" {
"ssl": {
"ca_certificate": "<PEM Data>",
"ca_certificate_key": "<PEM Data>"
},
...
},
...
}
负责人¶
- 主要负责人
greghaynes
工作项¶
泛化 os-cloud-config 中的 CA/证书创建。
添加在 -env.json 文件中检测证书密钥对的逻辑,用于开发测试
如果未找到服务的证书,则使开发测试脚本调用 CA/证书创建脚本
依赖项¶
上述服务尚未全部设置为使用 SSL 证书。在我们能够为所有服务添加用户指定证书的检测逻辑之前,这是必需的。
测试¶
将为 os-cloud-config 中的新功能创建测试。开发测试的默认行为旨在密切模拟生产设置,使我们能够最好地利用我们的 CI。
文档影响¶
我们需要记录“其他最终用户影响”中描述的新接口。
参考资料¶
Openstack 安全指南:https://docs.openstack.org/security-guide/content/