#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 для запрашивающего и отправит его в ответе.
Вопрос:
- Как криптографическая часть аутентификации сертификата клиента обрабатывается в этом сценарии?
- Согласно этому (замечательному) сообщению в блоге, есть
CertificateVerify
шаг, на котором…
"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. Например, что произойдет, если кто-то попытается использовать самозаверяющий сертификат? Будет ли интерфейс перенаправлять это в функцию?