开云活动入口 - 开云(中国)

3年前 (2023-04-20)
Var clientCertHeaders=context.HttpContext.Request.Headers;var clientCertAsync=context.HttpContext.Connection.GetClientCertificateAsync().Result;services.AddCertificateForwarding(options=>;
提问开始:

我需要在我的.NET 5WebAPI中的一些端点上实现客户端证书身份验证。 同题参见所以我不想像here in the MS docs那样在所有端点上启用HTTPS。我在本地机器上使用Kestrel,而不是IIS express或IIS。

我尝试了以下三种方法,但都没有成功:

var clientCertHeaders = context.HttpContext.Request.Headers;

这个函数返回请求的正常头部,但不返回证书。

var clientCert = context.HttpContext.Connection.ClientCertificate;
var clientCertAsync = context.HttpContext.Connection.GetClientCertificateAsync().Result;

这两个函数都返回null。

我尝试将以下内容应用到我的服务中:

services.AddCertificateForwarding(options =>
 {
 options.CertificateHeader = "X-SSL-CERT";
 options.HeaderConverter = (headerValue) =>
 {
 X509Certificate2 clientCertificate = null;

 if(!string.IsNullOrWhiteSpace(headerValue))
 {
 var bytes = Encoding.UTF8.GetBytes(headerValue);
 clientCertificate = new X509Certificate2(bytes);
 }

 return clientCertificate;
 };
 });

即使在我的服务中启用了该功能,我也不会检索客户端证书。

我使用Postman向API请求发出请求。同时

我需要在我的.NET 5WebAPI回答开始:得票数 1

您需要在program.cs中配置Kestrel以允许客户端证书,默认值为ClientCertificateMode.NoCertificate,因此在您的ConfigureWebHostDefaults中,您需要将其更改为ClientCertificateMode.AllowCertificate对照阅读

下面是我编辑过的文档中的一段代码:

public static IHostBuilder CreateHostBuilder(string[] args)
{
 return Host.CreateDefaultBuilder(args)
 .ConfigureWebHostDefaults(webBuilder =>
 {
 webBuilder.UseStartup();
 webBuilder.ConfigureKestrel(o =>
 {
 o.ConfigureHttpsDefaults(o => 
 o.ClientCertificateMode = 
 ClientCertificateMode.AllowCertificate);
 });
 });
}
总结

以上是真正的电脑专家为你收集整理的正在获取客户端证书的全部内容,希望文章能够帮你解决所遇到的问题。 延伸阅读

如果觉得真正的电脑专家网站内容还不错,欢迎将真正的电脑专家推荐给好友。

你可能想看:

分享给朋友:

继续阅读

若需了解「开云活动入口」的上下文,可结合站内栏目与相关篇目交叉阅读。

栏目用于追新,文内链接用于对照细节。两者配合可减少漏读与重复检索。

继续浏览时优先选择同栏目或相近主题,避免被站外镜像带偏。

频道列表

wiki · 科技 · 文化 · 主页

页面按栏目组织。可先看导读,再进入相关篇目或返回列表。