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

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

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

用 aspnet_regiis 命令行加密

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

  • 打开命令提示符(以管理员身份运行)
  • 切换到对应 .NET Framework 目录,例如:
    cd C:\Windows\Microsoft.NET\Framework\v4.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 AUTHORITY\NETWORK SERVICE"

关键注意事项

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

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

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


# windows  # app  # 工具  # iis  # pdf  # win  # microsoft  # c#  # .net  # NULL  # if  # 命名空间  # var  # 数据库 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: EditPlus中的正则表达式 实战(1)  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  javascript中闭包概念与用法深入理解  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  jQuery 常见小例汇总  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  JavaScript如何实现倒计时_时间函数如何精确控制  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  大同网页,大同瑞慈医院官网?  详解Oracle修改字段类型方法总结  bing浏览器学术搜索入口_bing学术文献检索地址  济南网站建设制作公司,室内设计网站一般都有哪些功能?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  Laravel如何配置Horizon来管理队列?(安装和使用)  如何快速建站并高效导出源代码?  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  详解Android中Activity的四大启动模式实验简述  网站图片在线制作软件,怎么在图片上做链接?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  详解vue.js组件化开发实践  android nfc常用标签读取总结  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  javascript基本数据类型及类型检测常用方法小结  如何用y主机助手快速搭建网站?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  如何快速搭建虚拟主机网站?新手必看指南  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  iOS UIView常见属性方法小结  Laravel怎么使用Intervention Image库处理图片上传和缩放  如何用狗爹虚拟主机快速搭建网站?  文字头像制作网站推荐软件,醒图能自动配文字吗?  Laravel如何处理表单验证?(Requests代码示例)  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  Android中AutoCompleteTextView自动提示  高防服务器租用首荐平台,企业级优惠套餐快速部署  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  网站制作壁纸教程视频,电脑壁纸网站?  Laravel Session怎么存储_Laravel Session驱动配置详解  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  简单实现jsp分页  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  南京网站制作费用,南京远驱官方网站?  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤