HttpRequestMessage.GetClientCertificate имеет значение null, когда сертификат устанавливается на клиенте.

Я настроил службу WebAPI так, чтобы она требовала https и открывалась для принятия клиентского сертификата. Часть SSL работает нормально. Я использую WebRequestHandler для прикрепления сертификата (настоящего, а не тестового) к запросу, но когда я обращаюсь к request.GetClientCertificate в контроллере WebAPI, сертификат имеет значение null.

Сертификат ssl привязан к порту с помощью «netsh http add sslcert» с параметром clientcertnegotiation=enable.

Я использую IISExpress и изменил applicationhost.config, добавив <access sslFlags="Ssl, SslNegotiateCert" /> к узлу безопасности и установив <clientCertificateMappingAuthentication enabled="true" /> под узлом аутентификации.

Я не получаю никаких ошибок, просто ноль.

Моя единственная подсказка заключается в том, что когда я вызываю WebAPI в браузере, мне предлагается ввести ClientCertificate, а тот, который я добавляю в WebRequestHandler в коде, отсутствует в списке.

Каковы требования к сертификату, который будет использоваться в качестве сертификата клиента? Этот вопрос (шаги установки IISExpress ClientCertificate) подразумевает, что это может быть моя проблема.


person Random    schedule 03.05.2013    source источник


Ответы (1)


Чтобы требовать сертификаты, вам необходимо установить SslRequireCert в дополнение к SslNegotiateCert. Отображение обычно не требуется.

Требование к клиентским сертификатам заключается в том, что эмитент этого сертификата должен быть доверенным эмитентом (с точки зрения службы), то есть в списке «Доверенный ЦС» ... и сертификат эмитента должен включать предполагаемую цель «аутентификации клиента».

person leastprivilege    schedule 04.05.2013
comment
Если я добавлю SslRequireCert, мой запрос даже не дойдет до сервера. Мой сертификат не работает. И у него есть аутентификация клиента с целью. - person Random; 06.05.2013
comment
Что ж, тогда у вас нет сертификата в пользовательском хранилище, которое сервер считает доверенным. Вы уверены, что сертификат CA находится в правильном магазине и все такое? - person leastprivilege; 07.05.2013
comment
Старая статья, которую я написал: leastпривилегия.com/2005/11/25 /iis6-и-клиентские-сертификаты - person leastprivilege; 07.05.2013
comment
Это может быть подсказкой. Как я уже сказал, у меня появляется диалоговое окно при отладке сервера, но моих сертификатов в нем нет. Сертификат, который я хочу отправить, использует проверку подлинности клиента, но корневой ЦС для него не использует. Однако я также создал тестовый сертификат в соответствии с этими инструкциями (msdn.microsoft.com). /en-us/library/cc949057.aspx) и все равно сбой. К сведению: я не хочу, чтобы эта работа работала с Active Directory. Это сертификат на смарт-карте. - person Random; 07.05.2013