我尝试将本地计算机商店中的 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”,但这对我来说也不起作用(同样的错误)。
经过进一步的尝试和错误,以下方法有效:
"Certificate": {
"Subject": "*.foo.com",
"Location": "LocalMachine",
"AllowInvalid": true
}
完全省略“商店”。 (如果您能解释为什么忽略商店有效,请评论或编辑此答案)
找不到证书时产生的异常,建议其内部调用了一个函数 CertificateLoader.LoadFromStoreCert 。这个函数的文档也不是很好,但比 Kestrel 文档页面稍好一些;它说:
CurrentUser
和 LocalMachine
。建议
"Subject"
参数可能是证书主题的任何唯一子字符串。