#wcf #ssl
#wcf #ssl
Вопрос:
У меня есть служба WCF (созданная собственными силами), использующая привязку WS-HTTP и безопасность транспорта (SSL). Мы проверяем подлинность вызывающих абонентов с помощью клиентских сертификатов и белого списка допустимых сертификатов (сертификаты предоставляются нам вне диапазона). Итак, мы используем пользовательский валидатор (например, класс, производный от System .IdentityModel.Selectors.X509CertificateValidator) для выполнения запроса к базе данных для проверки белого списка.
Это работает в следующем случае: у нас есть корневой сертификат, используемый в разработке, выданный командой разработчиков (с использованием OpenSSL). Этот корень является доверенным (например, установлен в хранилище сертификатов доверенного стороннего CA) на сервере, на котором размещена наша служба WCF. Тестовый клиент настроен на представление сертификата, подписанного этим корнем. Этот случай ведет себя так, как ожидалось.
Это не работает в следующем случае: клиент предоставляет службе самозаверяющий сертификат. В этом случае клиент получает сообщение об ошибке «HTTP-запрос был запрещен с помощью схемы аутентификации клиента ‘Anonymous'», и — вот странная часть — средство проверки сертификата службы даже не запускается. У нас нет возможности показать большой палец вверх. Сертификат клиента отклоняется уровнем ниже, чем наш валидатор.
Как я могу использовать самозаверяющий сертификат клиента с моей службой?
Ответ №1:
Вы не можете. В WCF транспортная безопасность WS-HTTP является SSL. Моя ошибка возникает из-за сбоя в согласовании SSL между сторонами.
Обычный случай такого согласования заключается в следующем: служба отправляет клиенту список корневых сертификатов, которым она доверяет. Клиент просматривает этот список и находит сертификат, который сервер сочтет заслуживающим доверия, и отправляет его.
В моем случае ошибки клиент проверяет список сервера и определяет, что его сертификат не будет пользоваться доверием. На этом этапе клиент обычно пытается согласовать анонимный доступ, что в моем случае запрещено, поэтому согласование завершается неудачей.
WCF не поддерживает самозаверяющие сертификаты клиентов или сертификаты, выданные ненадежным центром сертификации, в сценариях привязки WS-HTTP безопасности транспорта, даже если вы используете пользовательский режим проверки. Он поддерживает этот сценарий в безопасности сообщений. Я подозреваю, что Net.TCP поддерживает этот сценарий, но не тестировал его.