如何通过 appsettings.json 和 Kestrel 使用商店的 SSL 证书

问题描述 投票:0回答:1

我尝试将本地计算机商店中的 SSL cerver 证书与 Blazor 应用程序(Kestrel Web 服务器)一起使用。使用带有密钥的本地 PFX 可以正常工作,但我想通过使用商店中的证书来提高安全性。

文档只说:

   "Certificate": {
      "Subject": "<subject; required>",
      "Store": "<certificate store; required>",
      "Location": "<location; defaults to CurrentUser>",
      "AllowInvalid": "<true or false; defaults to false>"
    }

但没有提供关于为“主题”、“商店”和“位置”输入什么值的建议。

我的证书位于“证书 - 本地计算机”>“个人”>“证书”下。

该科目有 5 个部分(CN、O、L、S、C)。我在 appsettings.json 中尝试过:

"Certificate": {
  "Subject": "*.foo.com",
  "Store": "Local Computer/Personal/Certificates",
  "AllowInvalid": true
}

以及对这些值的各种其他尝试,但在启动应用程序时,它总是抛出异常

System.InvalidOperationException: The requested certificate *.foo.com could not be found in CurrentUser/Local Computer/Personal/Certificates with AllowInvalid setting: True.

github上的类似问题,那个人的解决方案使用“My”作为“Store”,但这对我来说也不起作用(同样的错误)。

asp.net ssl-certificate kestrel-http-server certificate-store
1个回答
0
投票

经过进一步的尝试和错误,以下方法有效:

"Certificate": {
  "Subject": "*.foo.com",
  "Location": "LocalMachine",
  "AllowInvalid": true
}

完全省略“商店”。 (如果您能解释为什么忽略商店有效,请评论或编辑此答案)

找不到证书时产生的异常,建议其内部调用了一个函数 CertificateLoader.LoadFromStoreCert 。这个函数的文档也不是很好,但比 Kestrel 文档页面稍好一些;它说:

  • “位置”有两个可能的有效值,
    CurrentUser
    LocalMachine
  • 如果存在精确的主题匹配,则加载主题匹配,否则加载与包含所提供主题的主题名称最匹配的证书。主题比较不区分大小写。

建议

"Subject"
参数可能是证书主题的任何唯一子字符串。

© www.soinside.com 2019 - 2024. All rights reserved.