如何使用Vagrant、Chef和/或Puppet提供具有特定于机器的SSL证书的VM?

如何使用Vagrant、Chef和/或Puppet提供具有特定于机器的SSL证书的VM?,vagrant,ssl-certificate,chef-infra,puppet,Vagrant,Ssl Certificate,Chef Infra,Puppet,我有一个需求,其中我想为多个虚拟机提供Java应用程序所需的特定于机器的SSL证书(使用机器的IP/主机名生成) 我可以提前用一些名称创建这些证书,如QA-Machine01、Prod-Machine01等,并将它们保存在某个文件夹中 我如何让Vagrant以其名称(QA-Machine01、Prod-Machine01)动态选择这些证书并为VM提供证书名作为机器名?您可以进入vagrant机器并使用主机名选择正确的一个。vagrant文件是ruby代码,因此如果目录中有所有证书,您可以从Dir

我有一个需求,其中我想为多个虚拟机提供Java应用程序所需的特定于机器的SSL证书(使用机器的IP/主机名生成)

我可以提前用一些名称创建这些证书,如QA-Machine01、Prod-Machine01等,并将它们保存在某个文件夹中


我如何让Vagrant以其名称(QA-Machine01、Prod-Machine01)动态选择这些证书并为VM提供证书名作为机器名?

您可以进入vagrant机器并使用
主机名
选择正确的一个。

vagrant文件是ruby代码,因此如果目录中有所有证书,您可以从Dir.glob在vagrant文件中编写一个循环,以生成:

例如:

mnames=Dir.glob(“/my/cert/store/*.crt”)
configure(Vagrant文件API版本)do | config|
mname.each do |文件名|
hostname=File.basename(文件名).gsub(File.extname(文件名),“”)
config.vm.define hostname do |框|
box.vm.hostname=“#{hostname}.my.domain”
[…您希望的任何配置…]
box.vm.provision:主厨|主厨|
厨师。添加食谱“我的食谱”
[…为您的案例提供厨师配置…]
结束
结束
结束
结束

然后,您可以
vagrant up
创建和配置所有机器,或者仅为QA机器调用
vagrant up QA-machine1

我不清楚您说的“vagrant动态拾取这些证书”是什么意思。通常由chef使用这些证书(因为安装web服务器、ssl代理或任何将使用证书的技术)。还不清楚操作环境是什么,但假设您要向QA和prod授权,您有可用的chef服务器,我建议使用chef vault

在此场景中,我们使用数据包,特别是chef vault数据包。我们有一个名为
ssl certificates
的保险库,其中的项目以每个ssl证书的CN命名。该项的搜索查询仅用于确定对承载该CN的计算机的访问范围


因为chef vault有一种回退机制,可以使用未加密的常规数据包,所以它非常适合在开发/质量保证环境中使用,因为在开发/质量保证环境中,维护安全凭据会受到阻碍,在生产环境中,维护SSL私钥的保管至关重要。

除非我错了,OP希望从证书创建VM。我不这样认为@Tensibai,因为OP声明/I可以提前创建带有QA-Machine01、Prod-Machine01等名称的证书,并可以将其保存在文件夹中的某个位置。/好吧,OP现在有了我们理解的两个方面;)(我更喜欢这句话:“并为VM提供证书名作为机器名”)@RyPeck您能详细说明实际答案中缺少的内容吗?主要希望提问者选择正确的答案。