我在用于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);
答案 0 :(得分:1)
您可以尝试直接使用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;
答案 1 :(得分:0)
回答我自己的问题: 我可以从标题中获取客户端证书
string clientCertFromHeader = Request.Headers [“ X-ARR-ClientCert”];
但是,为什么Request.HttpContext.Connection.ClientCertificate不提供证书仍然是一个谜。