Аутентифицировать сертификат клиента с помощью HttpSelfHostServer в C# - PullRequest
0 голосов
/ 06 января 2020

У меня есть служба, написанная на C#, которая в настоящее время работает по протоколу HTTP. Я хочу перенести это на Https и хочу, чтобы, когда какой-либо клиент использовал эту службу, была возможность выбора сертификата для продолжения, и разрешались только сертификаты, выпущенные одним конкретным центром сертификации.

Ниже приведен код того, что я сделал.

HttpSelfHostServer CreateServer(){

   var config = new MySelfHostConfiguration("https://localhost:1234/myService");
   IWebApiApplication application = new SelfHostedApplication(config);    //this is to do some logging and other configuration.
   HttpSelfHostServer selfHost = new HttpSelfHostServer((HttpSelfHostConfiguration)application.HttpConfiguration); //application.HttpConfiguration is same as config

   selfHost.OpenAsync.Wait();

   return selfHost;

}

public class MySelfHostConfiguration : HttpSelfHostConfiguration{

     public MySelfHostConfiguration(string address) : base(address){}
     public MySelfHostConfiguration(Uri address) : base(address){}

     protected override BindingParameterCollection OnConfigureBinding(HttpBinding httpBinding){
         httpBinding.Security.Mode = HttpBindingSecurityMode.Transport;
         httpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
         return base.OnConfigureBinding(httpBinding);
     }
}

Ниже приведен код контроллера

[Authorize]
public class HelloController : ApiController
{
    public string Get()
    {
        //some code to do stuff
    }
}

То, что я до сих пор делал, это

  1. Свяжите порт 1234 с сертификатом, используя netsh и отпечаток сертификата.

Благодаря этому я могу перейти к https://localhost: 1234 / myService (хотя пока он не защищен, поскольку я использовал тестовый сертификат). Но я также хочу, чтобы при просмотре URL-адреса меня просили выбрать сертификат. Я предполагаю, что мне не хватает чего-то в коде, где мне нужно запросить сертификат и проверить CA. Может кто-нибудь подсказать, чего не хватает или что еще нужно сделать.

PS: я не могу перейти с HttpSelfHostServer на что-либо еще.

1 Ответ

0 голосов
/ 19 января 2020

Попробуйте использовать clientcertnegotiation=enable с netsh. я надеюсь, что это работает для вас

...