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

标签 .net security encryption configuration app-config

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

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

最佳答案

有可能的。有 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

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

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

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

更新

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

  • 使用 protected 配置提供程序加密的部分,例如 RSAProtectedConfigurationProvider将自动解密,前提是运行应用程序的 Windows 身份对 RSA key 容器具有读取权限。

    关于.net - 部署通过 app.config 中的 RSAProtectedConfigurationProvider 加密的连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9408113/

    相关文章:

    c# - C#中使用字符串连接时创建了多少个字符串对象

    c# - quartz.net 是否支持持续时间小于 1 秒的触发器?

    c# - .NET 将日期时间转换为格式可排序日期/时间模式 ("s");

    javascript - 客户端 JWT 基于角色的授权

    java - 在 Java 中序列化 BigInteger,用 Botan 反序列化?

    c# - 导入 iCloud 联系人 .NET (CardDAV)

    php - 如何验证服务器调用是从应用程序发出的?

    security - 有人正在存储信用卡数据 - 他们是如何做到的?

    c# - 在c#中使用公钥加密数据,在php中使用私钥解密数据

    security - 安全性:此身份验证/加密方案有多脆弱?