Web.config中的connectionStrings怎么加密和解密

14次阅读

Web.config 的 connectionStrings 节点可用 as.net_regiis 命令行工具加密,支持虚拟路径(-pe -app)或物理路径(-pef),默认 RSA 加密,也可选 DPAPI;解密须在同一台机器执行(-pd/-pdf);编程方式需引用 System.Configuration 等命名空间并调用 ProtectSection/UnprotectSection;注意密钥权限、路径规范及避免重复加密。

Web.config中的connectionStrings怎么加密和解密

Web.config 中的 connectionStrings 节点可以通过 .NET 内置的受保护配置系统加密,无需改代码、不依赖第三方库,加密后 ASP.NET 运行时自动解密供程序使用。

用 aspnet_regiis 命令行加密

这是最常用、最稳妥的方式,适用于部署前或服务器环境操作:

  • 打开命令提示符(以管理员身份运行)
  • 切换到对应 .NET Framework 目录,例如:
    cd C:windowsmicrosoft.NETFrameworkv4.0.30319
  • 执行加密命令(按虚拟路径):
    aspnet_regiis -pe “connectionStrings” –app “/MyApplication”
  • 若用物理路径(比如本地开发调试):
    aspnet_regiis -pef “connectionStrings” “D:MyApp”
  • 默认使用 RSAProtectedConfigurationProvider;如需改用 DPAPI(仅限本机),加参数 -prov “DataProtectionConfigurationProvider”

用 aspnet_regiis 解密

解密必须在**同一台机器**上进行(RSA 密钥绑定机器,DPAPI 绑定用户/机器):

  • 解密虚拟路径下的配置:
    aspnet_regiis -pd “connectionStrings” -app “/MyApplication”
  • 解密物理路径下的配置:
    aspnet_regiis –pdf “connectionStrings” “D:MyApp”
  • 注意:中文路径、空格、权限不足都可能导致失败,建议路径全英文、无空格

编程方式加密(页面按钮触发)

适合需要在管理后台动态操作的场景,但要求 IIS 应用池标识有相应密钥访问权限:

  • 引用命名空间:System.ConfigurationSystem.Web.Configuration
  • 加密示例(C#):
    var config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
    var section = config.GetSection(“connectionStrings”);
    if (section != NULL && !section.SectionInformation.IsProtected)
      section.SectionInformation.ProtectSection(“RSAProtectedConfigurationProvider”);
    config.Save();
  • 解密只需把 ProtectSection 换成 UnprotectSection
  • 注意:RSA 加密需提前授权密钥容器,常见命令:
    aspnet_regiis -pa “NetFrameworkConfigurationKey” “NT AUTHORITYNETWORK SERVICE”

关键注意事项

加密不是万能的,几个容易踩坑的点要盯住:

  • 加密后 web.config 仍可被直接读取,但内容是密文,ASP.NET 自动解密——代码里 WebConfigurationManager.ConnectionStrings 照常取值
  • RSA 加密的密文不能跨机器解密;DPAPI 方式也不能跨用户或跨机器还原
  • 不要对已加密的节重复执行加密命令,会报错;先判断 IsProtected 再操作更安全
  • 上线前务必验证加密后站点是否正常连接数据库,避免密钥权限或提供程序配置遗漏

基本上就这些。命令行方式快、稳、易回滚,开发和运维都够用。

text=ZqhQzanResources