Snakeoil CA 证书管理器插件

https://blueprints.launchpad.net/barbican/+spec/barbican-snakeoil-ca

一个自动批准所有请求的证书管理插件对于测试和开发部署非常有用。 这对于希望在生产部署中使用 Barbican 作为证书创建抽象层的工具(例如 TripleO)尤其有用,但仍然需要一种可以在 CI 中工作的配置。

问题描述

为了在开发或测试环境中利用证书管理接口,用户必须(目前)配置 dogtag 或其他后端以自动批准证书请求。 在许多环境中(例如 CI 管道),这是一种不必要的负担,这些环境不需要这些工具提供的任何高级功能。

提议的变更

创建一个实现证书管理器接口的插件,并对发送到它的任何证书请求进行签名。 允许配置磁盘上的 CA 证书和密钥。 如果在该路径上未找到证书或密钥,则将创建一个新的 CA 证书和密钥,并以 PEM 文件格式存储在该路径上。 如果未指定证书或密钥路径,则将创建一个新的 CA 密钥和证书,并仅存储在内存中。

证书的序列号将从 UUID 生成。

备选方案

通过将此插件的范围限制为非生产用途,并且仅进行证书签名(例如,不进行撤销),最终使用 PyOpenSSL 库(OpenSSL 的 ffi)的代码量很小。 此处的代码量与调用像 CA.pl 这样的工具所需的代码量相当,并且更容易阅读、理解和测试。 如果此工具的范围扩大,我们可能需要重新考虑使用 PyOpenSSL。

数据模型影响

REST API 影响

一个证书订单

{
    "type": "certificate",
    "meta": {
        "request_data": "PEM encoded X509 Request with optional X509Name",
    }
}

安全影响

此功能明确不适用于任何类型的生产环境。 这将明确记录,并且也命名为“Snakeoil”,以(希望)使这一点尽可能明显。

通知与审计影响

其他最终用户影响

性能影响

其他部署者影响

无。 此功能绝不能部署到生产环境。

开发人员影响

这应该简化证书管理的开发环境设置。 我们可能需要考虑为新用户记录设置此类环境的方法。

实现

这使用 PyOpenSSL 实现,其动机在“替代方案”部分中说明。

https://review.openstack.org/#/c/140575

负责人

主要负责人

greghaynes <greg@greghaynes.net>

工作项

实现该插件。 该插件将实现通用的证书请求 API,因此 barbican-client 的工作将以这种方式完成。

依赖项

测试

文档影响

记录此功能以设置开发和测试环境可能有用,但不是必需的。

参考资料