У меня есть приложение-функция 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).