Как функциональные приложения Azure обрабатывают аутентификацию сертификата клиента?

#ssl #azure-functions #client-certificates #azure-function-app #mutual-authentication

#ssl #azure-функции #клиент-сертификаты #azure-function-app #взаимная аутентификация

Вопрос:

Надеюсь, я смогу сделать это достаточно понятным.

Цель:

  • Клиентский сертификат-аутентифицированная функция Azure

Сценарий:

  • Функциональное приложение Azure с:

    • HTTPS Only: установите значение Yes
    • Client certificate mode: установите значение Require
  • Запускаемая HTTP функция Azure (Python), которая:

    • Загружает сертификат клиента из X-ARR-ClientCert заголовка
    • Извлекает предварительно разделяемый сертификат клиента из базы данных и сравнивает:
      • Эмитент
      • Общее имя
      • Недопустимо до / после
    • Обращается к указанной конечной точке OCSP, чтобы узнать, отозван ли сертификат
  • Если свойства каждого сертификата совпадают и сертификат не был отозван, функция сгенерирует токен SAS для запрашивающего и отправит его в ответе.

Вопрос:

"The client is authenticated by using its private key to sign a
hash of all the messages up to this point. The recipient verifies
the signature using the public key of the signer, thus ensuring it
was signed with the client’s private key."

Я не вижу способа доступа… all the messages up to this point. для проверки это произошло с использованием кода функции (Python).

Это то, что Microsoft обрабатывает автоматически (аналогично тому, как они пересылают сертификаты клиентов через X-ARR-ClientCert заголовок)? Или это невозможно?

Ответ №1:

Из того, что я реализовал в аналогичном случае:

  • Ваше приложение получило сертификат через заголовок и должно:
    • загрузите сертификат (например, используя библиотечную криптографию в python)
    • проверьте подпись сертификата в своем центре сертификации
    • проверьте дату действия
    • убедитесь, что он не был отозван
  • Используя веб-приложение (но то же самое относится и к функциям), интерфейс Azure, похоже, просто запускает протокол аутентификации, чтобы убедиться, что клиент, отправляющий сертификат, имеет связанный закрытый ключ (и запускает протокол взаимной аутентификации, как описано в сообщении в блоге). Но он не проверяет действительность или подпись сертификата.

Упомянутый вами шаг CertificateVerify, похоже, обрабатывается интерфейсом Azure, я не думаю, что вам нужно беспокоиться об этом процессе.

Надеюсь, это поможет!

Комментарии:

1. Было бы невероятно полезно, если бы Azure упомянула об этом в своей документации

2. Я хотел бы узнать больше о шагах, которые Microsoft предпринимает от имени любой функции Azure, запускаемой HTTP. Например, что произойдет, если кто-то попытается использовать самозаверяющий сертификат? Будет ли интерфейс перенаправлять это в функцию?