在哪里存储12因素应用程序的SSL证书

时间:2015-08-16 17:53:41

标签: ssl-certificate 12factor

预计Twelve factor appstore configuration in the environment

这是否包括SSL证书和密钥文件,它们可以是“大”(至少是kb的倍数),并且(取决于格式)通常包含不可打印的字符(至少是换行符)。

或者只是指向证书/密钥文件名的环境? (例如,当尝试通过Docker进行部署时,这似乎不太理想 - 我们真的不想在Docker镜像中存储私钥,对吗?但是这可能是一个单独的问题。)

3 个答案:

答案 0 :(得分:1)

(严格看)SSL证书不是配置而是资产文件。

您如何提供此资产取决于您的托管方式。但这里有一些选择:

一种简单的方法是集成letsencrypt并使用certbot来安全地自动处理证书的下载。 letsencrypt对某些语言有一些集成(例如,go有几个可以集成到应用程序中的客户端)。

您可以使用负载均衡器并在负载均衡器处终止ssl。在这种情况下,您的应用程序无需了解有关证书的任何信息。

Kubernetes提供的秘密可以安全地存储证书,并将部署的文件复制到pod(简化:一个pod是一个包含你的应用程序的Docker容器包装的软件包)。

Kubernetes也可以使用Ingress作为终止ssl的LoadBalancer。

另一种选择是使用hashicorp的Vault。这是一项管理和分发秘密的服务。

当然,还有更多选择,这些只是提示。但是,ssl证书的安全存储和分发并非易事。我希望我给出了一些好的提示。

答案 1 :(得分:-1)

有不同种类的配置元素。 12因素应用程序在环境中存储配置的动机是针对特定目标:使其易于在新环境中的其他位置重新部署。因此,只有那些配置元素才有资格进入有助于实现这一目标的环境。其他特定于域或应用程序的配置元素可以与应用程序的本地或特定于技术的配置方法捆绑在一起。

对于SSL证书,似乎这些证书不会从环境变为环境,因此您不必将它们保留在环境变量IMO中。

答案 2 :(得分:-1)

我不是12因素应用最佳实践的专家;但是,从关于12因素应用程序配置的链接文章来看,听起来像规定的做法是使用环境变量来识别程序的可配置方面。

也许可以将SSL_CERT_FILESSL_KEY_FILE env变量读取为相应文件的路径,以便在文件可能位于不同位置的不同环境中轻松覆盖它们。

我个人非常喜欢那些能够正常使用的软件"无需额外配置,因此您也可以考虑将证书和密钥文件嵌入可执行文件本身(如果可行),以便程序可以正常工作。#34;开箱即用"但是,如果环境或特定应用需要,程序的用户还可以指定备用证书/密钥文件位置。

相关问题