如何在ASP.NET Core 7.0中加密ConnectionStrings配置节?
ASP.NET Core 7.0 加密ConnectionStrings配置节的正确方法
你之前用到的SectionInformation、ProtectSection是.NET Framework时代的API,ASP.NET Core的配置系统已经重构,不再支持这些方法。以下是适配ASP.NET Core 7.0的解决方案:
开发环境:优先使用Secret Manager
Secret Manager是官方推荐的开发环境敏感配置管理工具,不会将敏感信息提交到代码仓库,比直接加密配置文件更简便安全。
- 初始化Secret Manager
在项目根目录执行命令:
dotnet user-secrets init
执行后项目文件会自动添加UserSecretsId,关联当前项目到本地Secret存储。
- 将ConnectionStrings存入Secret Manager
执行命令替换实际的连接字符串:
dotnet user-secrets set "ConnectionStrings:Database one" "<Host...;Username=...;Password=...;etc.>"
- 清理配置文件中的敏感值
修改appsettings.Development.json,可保留空键或直接删除敏感值(Secret Manager的配置优先级会覆盖文件内容):
"ConnectionStrings": { "Database one": "" }
生产环境:环境变量或密钥管理服务
环境变量
在生产服务器上通过环境变量注入敏感配置,ASP.NET Core会自动读取:
- Windows系统(命令行):
setx ConnectionStrings__Database one "<Host...;Username=...;Password=...;etc.>"
注意:配置键中的冒号:需替换为双下划线__,符合环境变量命名规范。
- Linux/macOS系统(终端):
export ConnectionStrings__Database\ one="<Host...;Username=...;Password=...;etc.>"
空格需转义,或用引号包裹完整键名。
云密钥管理服务(如Azure Key Vault)
如果是云部署,推荐使用Azure Key Vault这类托管服务存储连接字符串,通过配置项目访问权限,ASP.NET Core会自动从Vault中读取敏感配置,无需手动加密。
若需直接加密配置文件(不推荐)
如果必须对appsettings.json本身加密,可自定义加密逻辑实现:
- 编写加密/解密工具类
using System.Security.Cryptography; using System.Text; public static class ConfigCrypto { // 加密字符串(需自行管理密钥和向量,建议通过环境变量注入) public static string Encrypt(string plainText, byte[] key, byte[] iv) { using var aes = Aes.Create(); aes.Key = key; aes.IV = iv; var encryptor = aes.CreateEncryptor(aes.Key, aes.IV); using var ms = new MemoryStream(); using var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write); using var sw = new StreamWriter(cs); sw.Write(plainText); return Convert.ToBase64String(ms.ToArray()); } // 解密字符串 public static string Decrypt(string cipherText, byte[] key, byte[] iv) { using var aes = Aes.Create(); aes.Key = key; aes.IV = iv; var decryptor = aes.CreateDecryptor(aes.Key, aes.IV); using var ms = new MemoryStream(Convert.FromBase64String(cipherText)); using var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read); using var sr = new StreamReader(cs); return sr.ReadToEnd(); } }
- 自定义配置提供程序
继承ConfigurationProvider,在加载配置时自动解密指定节的值。这种方式需要自行维护密钥安全,风险较高,仅在特殊场景下使用。
内容的提问来源于stack exchange,提问作者HasQuestionsAndAnswers
相关产品推荐
相关产品推荐

