Request.HttpContext.Connection.ClientCertificate всегда нулевой - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть основной веб-сайт ASP.Net, развернутый в службе приложений Azure для Linux.

В контроллере я пытаюсь получить сертификат клиента, как показано ниже:

var callerCertificate = Request.HttpContext.Connection.ClientCertificate;

Я всегда получаю callerCertificate как null .Я попытался await Request.HttpContext.Connection.GetClientCertificateAsync() с тем же результатом null .

Создание моего веб-сайта выглядит следующим образом:

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

Я также установил настройку SSL для веб-сайта (в Azure), как показано ниже:

enter image description here

Вызывающая сторона на стороне клиента - это проект net462, который использует Microsoft.Rest.CertificateCredentials для установки сертификата на запрос HTTP.

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

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Отвечая на мой собственный вопрос: я могу получить сертификат клиента из заголовка

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

Хотя до сих пор остается загадкой, почему Request.HttpContext.Connection.ClientCertificate не дает сертификат.

0 голосов
/ 03 декабря 2018

Вы можете попытаться добавить сертификат, используя 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...