У меня есть служба, написанная на 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
}
}
То, что я до сих пор делал, это
- Свяжите порт 1234 с сертификатом, используя netsh и отпечаток сертификата.
Благодаря этому я могу перейти к https://localhost: 1234 / myService (хотя пока он не защищен, поскольку я использовал тестовый сертификат). Но я также хочу, чтобы при просмотре URL-адреса меня просили выбрать сертификат. Я предполагаю, что мне не хватает чего-то в коде, где мне нужно запросить сертификат и проверить CA. Может кто-нибудь подсказать, чего не хватает или что еще нужно сделать.
PS: я не могу перейти с HttpSelfHostServer на что-либо еще.