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

标签 c# deployment configuration powershell 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 库。该应用生成 key :

RSACryptoServiceProvider rsa = GetRsa(containerName);
File.WriteAllText("keys.kez",rsa.ToXmlString(true));

我也得到了公钥:

File.WriteAllText("public.pke", rsa.ToXmlString(false));

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

最佳答案

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

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

关于c# - 处理生产配置中的密码以进行自动化部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6133988/

相关文章:

c# - VB.Net 'Overridable' 对成员变量声明无效

c# - "scan"如何能成为 C# 中的 lambda 表达式?

c# - 可以通过存储过程创建 View 吗?

c# - Class.PropertyName 上的 Switch-Case(不是值)

linux - 在 Linux 上部署自定义软件?

java - 两节点 ZooKeeper 集成

c# - 我可以连接此代码来部署解决方案(在 Sharepoint 2010 中创建用户组)

ios - 我们可以在 IOS 中编辑配置文件吗

Apache 将子域传递到备用路径

c# - Sitecore 插入选项是否可以根据父项有条件地添加模板?