WCF доверяет клиентским сертификатам только из одного корневого ЦС

При защите служб WCF с помощью сертификатов сервера и клиента существует простой способ убедиться в подлинности сертификата поставщика услуг (сертификата сервера) путем сравнения открытого ключа или отпечатка пальца сертификата отправителя с ожидаемым значением.

На http://msdn.microsoft.com/en-us/library/ff648360.aspx это объясняется в шаге 8. Вы можете настроить файл app.config в разделе конечной точки с элементом идентификации, куда вы можете передать ожидаемое закодированное значение отпечатка пальца сертификата сервера. Сравнение полученного сертификата службы и ожидаемого значения гарантирует, что я говорю с ожидаемым сервером.

Но теперь я рассматриваю точку зрения серверов. Сервер может иметь несколько сертификатов RootCA в своем хранилище сертификатов. Если сертификат клиента, отправленный запрашивающей стороной, был выпущен (и подписан) одним из этих RootCA, моя служба будет доверять этому сертификату клиента. Как я могу гарантировать, что моя служба будет доверять только сертификатам, выданным одной определенной RootCA? И как настроить один доверенный RootCA?

(Я думаю, что это может быть эквивалентным способом закрепления сертификатов для клиентских сертификатов, выпущенных на RootCA)


person user1073145    schedule 15.09.2014    source источник


Ответы (1)


Единственный способ добиться этого — создать собственный валидатор сертификатов x509. Затем для каждого входящего запроса вы можете просто проверить, был ли сертификат клиента выдан вашим корневым центром сертификации. На самом деле это довольно легко сделать. Вы можете найти шаги для реализации этого здесь:

Как создать службу, использующую пользовательский валидатор сертификатов

person Scott Thornton    schedule 24.10.2014
comment
@ Скотт Торнтон Это работает для меня. Таким образом, я могу отклонить все нежелательные сертификаты (издатель сертификата) и подтвердить владельца сертификата (субъект сертификата). - person user1073145; 19.11.2014