繁体   English   中英

Request.HttpContext.Connection.ClientCertificate 始终为 null

[英]Request.HttpContext.Connection.ClientCertificate is always null

我在适用于 Linux 的 Azure 应用服务上部署了一个 ASP.Net 核心网站。

在控制器中,我正在尝试获取客户端证书,如下所示:

var callerCertificate = Request.HttpContext.Connection.ClientCertificate;

我总是将callerCertificate设为null 我试过await Request.HttpContext.Connection.GetClientCertificateAsync()与相同的结果null

我的网站虚拟主机创建如下所示:

WebHost.CreateDefaultBuilder(args)
                .UseKestrel()
                .UseStartup<Startup>()
                .UseSerilog();

我还为网站(在 Azure 中)设置了 SSL 设置,如下所示:

在此处输入图片说明

客户端调用方是一个 net462 项目,它使用Microsoft.Rest.CertificateCredentials将证书设置为 HTTP 请求。

var cred = new CertificateCredentials(_deviceCertificate)
...
await this.cred.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false);

您可以尝试直接使用HttpClient添加证书,而不是使用Microsoft.Rest.CertificateCredential

var clientHandler = new HttpClientHandler();
clientHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
clientHandler.ClientCertificates.Add(_deviceCertificate);

var client = new HttpClient(clientHandler);
var result = client.GetAsync("https://yourservice").GetAwaiter().GetResult();

您可能还需要配置 SSL 协议(SSL2、SSL3、TLS 等):

clientHandler.SslProtocols = SslProtocols.Tls;

回答我自己的问题:我能够从标题中获取客户端证书

string clientCertFromHeader = Request.Headers["X-ARR-ClientCert"];

尽管如此,为什么 Request.HttpContext.Connection.ClientCertificate 没有提供证书仍然是一个谜。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM