You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

appsettings.json中含引号的证书密码转义问题求助

解决secrets.json中带引号的PFX证书密码无法正确读取的问题

我在secrets.json(而非appsettings.json)里配置了带双引号的PFX证书密码,试了好几种常规JSON转义写法,读取到的字符串始终不对。

我试过的写法包括:

{ "CertPass": "abc"123", ... }

{ "CertPass": "abc\"123", ... }

{ "CertPass": "abc""123", ... }

{ "CertPass": "abc\\\"123", ... }

读取密码的C#代码是这样的:

string pass = config.Env<string>("CertPass");

public static class ConfigurationExtensions
{
  public static T Env<T>(this IConfiguration self, string key)
    => self.GetSection(key).Get<T>()!;
}

参考连接字符串的转义方案(用单引号包裹或替换为&quot;)也没用,读取后符号会原封不动保留。目前只能先用¤替代引号,再在代码里替换回来,求正确的解决办法。


正确解决方案

1. 严格按JSON规范转义

JSON字符串里的双引号必须用单个反斜杠\转义,secrets.json的正确写法如下:

{
  "CertPass": "abc\"123"
}

保存后,.NET配置系统会直接解析出abc"123。注意编辑文件时,确保编辑器不会自动移除反斜杠(比如VS Code、Rider这类编辑器默认会正确保留)。

2. 用Base64编码绕过转义

如果转义方式还是有问题,可以把密码转成Base64编码存储:

  • 把原密码abc"123转成Base64(比如用C#代码Convert.ToBase64String(Encoding.UTF8.GetBytes("abc\"123"))生成,结果是YWJjIjEyMw==)
  • 在secrets.json里存编码后的值:
    {
      "CertPass": "YWJjIjEyMw=="
    }
    
  • 代码里读取后解码:
    string encodedPass = config.Env<string>("CertPass");
    string pass = Encoding.UTF8.GetString(Convert.FromBase64String(encodedPass));
    

3. 用命令行设置用户密钥(推荐)

如果用dotnet user-secrets命令设置密码,能自动处理转义,不用手动改JSON:

  • PowerShell环境执行:
    dotnet user-secrets set "CertPass" 'abc"123'
    
  • CMD环境执行:
    dotnet user-secrets set "CertPass" "abc\"123"
    

命令行会自动生成符合规范的JSON内容,直接就能正确读取。


内容的提问来源于stack exchange,提问作者Konrad Viltersten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:59:20