处理生产配置中的密码以进行自动部署

man*_*lds 15 c# deployment powershell configuration production-environment

我在这里看到了相关的问题,但它们似乎并没有完全回答我的需要.

我们使用Powershell脚本来部署我们的应用程序,并且大多数环境(UAT等)的配置文件中的密码等信息都是纯文本.这不是一个大问题,但是当谈到PREPROD和PROD时,这是一个大问题.因此我们在配置中有一些标记,如"{{prompt-password}}",它将提供登录对话框(Get-Credential),进行部署的人员可以输入凭证并继续部署.

但这对自动部署没有实际帮助(意味着通过TeamCity等工具一键部署)

我应该使用非对称加密(http://msdn.microsoft.com/en-us/library/as0w18af.aspx),其中密码使用公钥加密,在配置中输入,并存储私钥(如上所述)这里http://msdn.microsoft.com/en-us/library/tswxhw92.aspx)在"代理"中(如在TeamCity将触发部署的VM中,并且具有受限访问权限)运行自动部署并且可以解密密码?在密码学和东西上并不是很强大,但这听起来像是要走的路吗?还有其他建议吗?人们如何处理这种自动部署?


更新:

好的,我已经完成并实施了它.我在C#中编写了一个使用Crypography库的控制台应用程序.该应用程序生成密钥:

RSACryptoServiceProvider rsa = GetRsa(containerName);
File.WriteAllText("keys.kez",rsa.ToXmlString(true));
Run Code Online (Sandbox Code Playgroud)

我也拿出了公钥:

File.WriteAllText("public.pke", rsa.ToXmlString(false));
Run Code Online (Sandbox Code Playgroud)

将公钥提供给必须加密密码并要求他们在配置中输入密码的任何人.将keys.kez文件放在必须运行部署的任何代理中.

hem*_*emp 4

从安全性和简单性的角度来看,非对称加密绝对是赢家。我已经以这种方式非常成功地部署了生产 SaaS 应用程序。

有一些技巧。一,正如您提到的,确保公钥/私钥对安装在主机上,而不是存储在配置文件或代码中。第二,假设 MS 提供的管理和密钥生成工具很弱甚至很糟糕,并相应地进行计划(我们为操作创建了一个简单的 keygen exe,以便在部署期间运行。)