Приложение Aure Function возвращает «Учетные данные, предоставленные пакету, не были распознаны» при использовании файла pfx - PullRequest
0 голосов
/ 04 марта 2019

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

Поэтому я импортирую их, используя настройки приложения-функции(и я перемещаю их в Хранилище для еще большей безопасности).

byte[] bytearray; // PFX file, imported from settings using base64 encoding
string password; // Imported from settings
certificates = new X509Certificate2Collection();
certificates.Import(bytearray, password, X509KeyStorageFlags.UserKeySet | X509KeyStorageFlags.PersistKeySet);

Использование их происходит следующим образом

var handler = new HttpClientHandler();
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
foreach (var cert in certificates)
handler.ClientCertificates.Add(cert);

Но соединение отказывается с ошибкой 'Учетные данные предоставленычтобы пакет не был распознан ".

Я попробовал несколько вещей

  • Я уверен, что PFX вставлен правильно, потому что я могу прочитать 3 сертификата, которые в них.
  • Только один из сертификатов имеет EKU с проверкой подлинности клиента, остальные находятся там, потому что это сертификат, созданный частным образом, и они представляют цепочку.
  • Сначала я попытался сохранить PFX в локальном хранилище файлов.Я подумал, что это может быть вариантом, потому что я понимаю, что все сертификаты сначала проходят через локальное хранилище сертификатов из-за последствий безопасности для защиты закрытого ключа, и это хранилище сохраняет дескриптор открытым для файла PFX (который может существовать или не существовать на диске).,Это не сработало.
  • Я знаю, что сертификаты в порядке, потому что я могу использовать их в своем приложении функций при выполнении этого «намеченного пути» с загрузкой в ​​Azure, маршрутизацией их в приложение с помощью WEBSITE_LOAD_CERTIFICATES, а затемin-code выбирает их из магазина (используя класс X509Store).

1 Ответ

0 голосов
/ 05 марта 2019

Если вы настраиваете экземпляр X509Certificate2 из файла pfx или сертификата, содержащего закрытый ключ, вы можете столкнуться с CryptographicException : Системе не удается найти указанный файл ..

Причина в том, что Windows хранит закрытый ключ в виде файла в каталоге профиля пользователя.По умолчанию Azure Web App (AppService) не загружает профиль пользователя (избегайте накладных расходов для большинства сценариев, где он не нужен).Следовательно, система не может найти указанный файл.вопрос.Чтобы обойти это, установите следующие параметры приложения, чтобы включить профиль пользователя.

WEBSITE_LOAD_USER_PROFILE = 1

При настройке параметра приложения WEBSITE_LOAD_USER_PROFILE = 1 веб-сайты Azure будут загружать профили пользователей дляданное приложение и, следовательно, приложения могут загружать сертификаты из файлов PFX.

Ссылки:

https://azure.microsoft.com/en-in/blog/pdf-generation-and-loading-file-based-certificates-in-azure-websites/

https://github.com/projectkudu/kudu/wiki/Configurable-settings#the-system-cannot-find-the-file-specified-issue-with-x509certificate2

...