我有一个ASP.Net核心网站部署在
Linux的Azure应用服务上.
在控制器中,我试图获得如下的客户端证书:
var callerCertificate = Request.HttpContext.Connection.ClientCertificate;
我总是将callerCertificate作为null.
我试过等待Request.HttpContext.Connection.GetClientCertificateAsync(),结果为null.
我的网站webhost创建如下所示:
WebHost.CreateDefaultBuilder(args) .UseKestrel() .UseStartup<Startup>() .UseSerilog();
我还为网站设置了SSL设置(在Azure中),如下所示:
客户端调用者是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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。