在 app.config 中部署通过 RSAProtectedConfigurationProvider 加密的连接字符串

Posted

技术标签:

【中文标题】在 app.config 中部署通过 RSAProtectedConfigurationProvider 加密的连接字符串【英文标题】:Deploying connection string encrypted via RSAProtectedConfigurationProvider in app.config 【发布时间】:2012-03-13 13:36:24 【问题描述】:

如果开发人员在他们自己的机器上使用 RSAProtectedConfigurationProvider 对连接字符串 app.config 部分进行加密,并且随后将其部署到用户的工作站,那么该用户的工作站(或服务器,就此而言)能否自动解密连接字符串?

是否需要某种密钥导出/安装?这是如何运作的? 我意识到这不是万无一失的。我正在寻找有关部署是否容易和/或使用这种加密连接字符串的建议。

【问题讨论】:

【参考方案1】:

这是可能的。有 API 可以做到这一点(查看 System.Security.Cryptography 命名空间),或者您可以从命令行使用 aspnet_regiis:

aspnet_regiis -pc -exp  : create an exportable key pair
aspnet_regiis -px : export an RSA key pair to an XML file
aspnet_regiis -pi : import an RSA key pair from an XML file
aspnet_regiis -pa : add access for an account to a key container

当然,在使用加密时,您只是用保护密钥的问题代替了保护数据(您的连接字符串)的问题。

在您的示例中,正如您所知道的,因为您说您知道它不是防弹的,用户将需要有权访问密钥容器,以便能够解密加密的连接字符串。

此外,任何持有包含导出密钥对的 XML 文件的人都可以这样做。

更新

部署过程类似于:

在开发人员工作站上创建可导出密钥 (aspnet_regiis -pc -exp) 使用此密钥加密开发人员工作站上的配置部分 将密钥导出到 XML 文件 (aspnet_regiis -px) 将 XML 文件复制到目标机器 从目标机器上的 XML 文件导入密钥 (aspnet_regiis -pi) 授予用户帐户对目标计算机上密钥的读取权限 (aspnet_regiis -pa)

使用受保护的配置提供程序(例如 RSAProtectedConfigurationProvider)加密的部分将被自动解密,前提是运行应用程序的 Windows 身份具有 RSA 密钥容器的读取权限。

【讨论】:

谢谢。你能详细说明这个关键容器吗?这是我需要知道的 - 这是如何从开发人员工作站部署到目标机器的?目标机器如何自动解密?

以上是关于在 app.config 中部署通过 RSAProtectedConfigurationProvider 加密的连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何部署不同的 App.config 值(使用 WiX)

我应该使用我的安装程序部署 app.config 吗?

App.config 替换单元测试

加密 App.Config 部分并部署到多台机器

.NET - 部署 WCF 客户端,没有 app.config

Azure Devops 中针对不同环境的 app.config 转换