c# - 客户端证书始终为空
问题描述
我在个人和受信任的根证书颁发机构下安装了证书
尝试使用这段代码发布到端点:
public void Post()
{
try
{
var clientCert = LoadFromStore("MyThumbprint");
var requestHandler = new WebRequestHandler();
requestHandler.ClientCertificates.Add(clientCert);
var client = new HttpClient(requestHandler)
{
BaseAddress = new Uri("https://localhost:44430/")
};
var response = client.GetAsync("api/test").Result;
response.EnsureSuccessStatusCode();
string responseContent = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(responseContent);
}
catch (Exception ex)
{
Console.WriteLine("Exception while executing the test code: {0}", ex.Message);
}
}
经检查,.ClientCertificate属性始终为空。
[Route("api/[controller]")]
public class TestController : Controller
{
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
var clientCertInRequest = Request.HttpContext.Connection.ClientCertificate;
if (clientCertInRequest != null) return Ok();
return BadRequest("No certificate found");
}
}
想知道是否有人以前遇到过这个问题或知道如何将证书发布到 webapi 端点并能够检索和验证?
非常感谢
解决方案
.Net 6:
builder.WebHost.ConfigureKestrel(kestrel =>
{
kestrel.ConfigureHttpsDefaults(https => https.ClientCertificateMode = ClientCertificateMode.AllowCertificate);
});
旧版本:
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.ConfigureKestrel(o =>
{
o.ConfigureHttpsDefaults(o =>
o.ClientCertificateMode =
ClientCertificateMode.AllowCertificate);
});
});
推荐阅读
- mysql - (Python MySQL)如何将 LIKE 通配符与变量一起使用?
- erlang - Erlang JInterface:OtpNode vs OtpSelf
- flutter - Flutter redux:StoreConnector vs StoreProvider
- awk - 使用 FPAT Var 删除逗号后的空格
- sql - 累计持股
- php - 使用 html 表单和 php 将记录插入 MySQL 数据库(在线)失败,没有错误消息
- python - Python:pandas.cut 标签被忽略
- xcode - 无法找到“UMReactNativeAdapter”依赖的“React-Core”规范
- css - flexbox调整子宽度应该只改变下一个兄弟宽度
- python - Github,为什么我的 python 代码有 ^M 而没有新行?