我们使用PowerShell脚本来部署应用程序,并且大多数环境(如UAT等)中的配置文件中的密码等信息都是明文。这不是一个大问题,但当涉及到PREPROD和PROD时,就成为了一个大问题。因此,我们在配置文件中添加了一些标记,比如"{{prompt-password}}",这将提供一个登录对话框(
Get-Credential
),执行部署的人员可以输入凭据,然后部署继续进行。但这对于自动化部署并不是真正有帮助的(意味着通过像TeamCity这样的工具进行一键部署)。
我应该选择使用非对称加密(http://msdn.microsoft.com/en-us/library/as0w18af.aspx),其中密码使用公钥进行加密,输入到配置中,私钥存储在“代理”(例如,从TeamCity触发部署并具有受限访问权限的VM)中运行的自动化部署中,并且可以解密密码(如此描述 http://msdn.microsoft.com/en-us/library/tswxhw92.aspx)。我对密码学等方面不是很了解,但这是否听起来像正确的方法?还有其他建议吗?人们如何处理这样的自动化部署?
更新:
好的,我已经实现了它。我用C#编写了一个控制台应用程序,使用了加密库。该应用程序生成密钥:
RSACryptoServiceProvider rsa = GetRsa(containerName);
File.WriteAllText("keys.kez",rsa.ToXmlString(true));
我也得到了公钥:
File.WriteAllText("public.pke", rsa.ToXmlString(false));
把公钥交给需要加密密码的人,并要求他们在配置中输入密码。将keys.kez文件放置在任何需要运行部署的代理中。