3

Я разрабатываю приложение для Windows, которое будет запускаться на клиентских ПК/серверах и получить доступ к конечной точке веб-API, размещенной на веб-сайте Azure. Он должен аутентифицировать пользователя, и я бы предпочел не хранить учетные данные на машине клиента. Итак, я приземлился на клиентских сертификатах для аутентификации пользователей. У меня это работает против локального, не-Azure экземпляра IIS сайта с самозаверяющими сертификатами. Однако я не могу заставить его работать на веб-сайте Azure.Возможно ли использовать клиентские сертификаты на веб-сайтах Windows Azure

Насколько я могу судить, есть два вопроса, которые я не найти много документации по:

  • Как установить свой собственный сертификат ЦС в Trusted Root экземпляра веб-сайта (ов) ? Или это будет работать только с сертификатами CA, которым уже доверяют?
  • Как включить «Принять клиентские сертификаты» для этого приложения? В IIS вы делаете это в разделе «Настройки SSL». Документация указывает, что изменение узла system.webServer/security/access в app.config выполнит это, но, очевидно, вы не сможете это сделать на веб-сайтах. Документация для веб-сайтов предполагает, что этот узел разблокирован для использования в web.config, однако добавление этого узла приводит к ошибке «Страница не может быть отображена из-за ошибки внутреннего сервера». Даже если пользовательские ошибки отключены.

ответ

3

Для веб-сайтов Azure и веб-роли параметры аутентификации клиентов довольно ограничены. Веб-сайты не позволяют запускать программы с повышенными разрешениями, которые необходимы для внесения изменений IIS и хранения сертификатов в доверенный корень.

Существует способ настроить ваш веб-сайт всегда (вы не получаете возможность сделать его необязательным, как при настройке IIS «Accept»), запрашивать сертификат клиента. В настоящее время эта функция доступна только через API REST API Azure, вы не можете получить к ней доступ через интерфейс портала. Вы можете найти дополнительную информацию here. По существу, вы устанавливаете на веб-сайте clientCertEnabled значение true. Механика этого параметра отличается от традиционной аутентификации клиентов, когда серверу нужен сертификат CA, с которым клиентский сертификат подписан в доверенном корне. Сервер не выполняет никаких проверок в сертификате клиента, приложение должно запустить сам сертификат, который входит в заголовок запроса «X-ARR-ClientCert». Метод расширения GetClientCertificate() в HttpRequestMessage будет анализировать его автоматически.

В качестве альтернативы вы можете разместить веб-API в качестве веб-роли. Это дает доступ к запущенным задачам запуска с повышенными разрешениями, которые позволяют получить доступ к доверенному корню и создавать конфигурации IIS, более подробную информацию/примеры here. Вы можете скопировать сертификат CA в папку приложения или загрузить в магазин пользователя через портал Azure, чтобы он был доступен для копирования в доверенный корень в задаче запуска. Изменения IIS могут быть сделаны через библиотеку Microsoft.Web.Administration, доступную как пакет NuGet через класс ServerManager.

1

На вопрос 2, вот в блоге о том, как установить сертификаты клиента на Azure сайты: http://azure.microsoft.com/blog/2014/10/27/using-certificates-in-azure-websites-applications/

На вопрос 1, вы не можете установить свои собственные сертификаты ЦС в качестве доверенных корневых сертификатов, но если вы иметь сертификаты от CA, которым уже доверяют, тогда вы можете использовать их без каких-либо проблем.

+0

Я столкнулся с этим в своих исследованиях и попытался сделать то, что они описывают. Я понимаю, что так можно хранить сертификат для использования с кодом внутри веб-сайта. Он не позволяет веб-сайту принимать клиентские сертификаты. – Daniel

Смежные вопросы