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

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.Configuration和System.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再操作更安全 - 上线前务必验证加密后站点是否正常连接数据库,避免密钥权限或提供程序配置遗漏
基本上就这些。命令行方式快、稳、易回滚,开发和运维都够用。