Служба приложений Azure не может загрузить сертификат pfx из файловой системы wwwroot - PullRequest
0 голосов
/ 28 мая 2018

У меня есть простое веб-приложение ASPNET-Core 2 в службах приложений Azure.Когда я пытаюсь загрузить файл pfx, я получаю следующую ошибку:

WindowsCryptographicException: система не может найти указанный файл Internal.Cryptography.Pal.CertificatePal.FilterPFXStore (Byte [] rawData, SafePasswordHandle пароль, PfxCertStoreFlags pfxCertStoreFlags)

Я пытаюсь загрузить файл pfx, который существует в папке wwwroot.

Проблемно, я доказал, что файл pfx существует.

Затем я попытался загрузить сертификат X509 двумя способами:

clientCertificate = new X509Certificate2(certificateByteArrayData, pfxPassword);

и

clientCertificate = new X509Certificate2(filePath, pfxPassword);

, если у меня неверный пароль, я получаюисключение правильного-неверного пароля.

Но с (я считаю, это) законным путем + пароль или загруженные байты + пароль, я получаю эту ошибку выше.

Это похоже насертификат пытается сделать что-то странное типа администратора на сервере и не имеет разрешения?Что я не понимаю, потому что у меня есть сертификат и я просто хочу его использовать?

Я знаю, что есть и другие способы сделать это с помощью загрузки SSL-сертификатов или с помощью Azure Vault или , другие люди обнаружили похожие проблемы , но они связаны с "пользовательскими магазинами" и т. Д.а здесь я думал, что это не имеет к этому никакого отношения?

1 Ответ

0 голосов
/ 28 мая 2018

Похоже, мне пришлось добавить дополнительный параметр, чтобы сказать, использовать хранилище машины.

// Byte array.
var clientCertificate = new X509Certificate2(certificateData, 
                                pfxPassword, 
                                X509KeyStorageFlags.MachineKeySet);

// File name
var clientCertificate = new X509Certificate2(pfxFileNameAndPath, 
                                pfxPassword, 
                                X509KeyStorageFlags.MachineKeySet);

Этот SO-ответ в основном предложил ответ

Даже если вы читаете сертификат с диска и сохраняете его в объекте, закрытые ключи все равно хранятся в базе данных ключей поставщика криптографических услуг Microsoft Cryptographic API.На хост-сервере процесс ASP.NET не имеет разрешения на доступ к хранилищу пользователей.

Бум!Тем не менее, я до сих пор не понимаю, почему он пытается получить доступ к какому-либо магазину, учитывая, что я даю пароль и файл.

/ me shrug

...