Хранилище ключей Azure: невозможно получить сертификат от kv при развертывании - PullRequest
0 голосов
/ 11 сентября 2018

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

System.Security.Cryptography.CryptographicException: The system cannot find the file specified.

   at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
   at System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(Byte[] rawData, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx)
   at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags)
   at Microsoft.Ambassadors.Infrastructure.KeyVaultService.<GetCertificateAsync>d__7.MoveNext() in C:\Source\Repos\Xbox.Ambassadors\Microsoft.Ambassadors.Azure\Microsoft.Ambassadors.Infrastructure\KeyVaultService.cs:line 0

Я зарегистрировал приложение (где размещается эта веб-работа) в AAD, и оно имеет доступ только для чтения к пространству kv.Я нашел пару соответствующих (я думаю ..?) Сообщений относительно этого:

"Произошла внутренняя ошибка."при загрузке файла pfx с X509Certificate2

X509Certificate Constructor Exception

но я не совсем уверен, что это то, что я могу сделать в моем случае ...?Если кто-то может помочь, это было бы здорово!Спасибо: D

Ответы [ 2 ]

0 голосов
/ 09 января 2019

У меня была такая же проблема, за исключением того, что я развертывал в веб-приложении Azure.Я исправил это, добавив X509KeyStorageFlags.

SecretBundle secretBundle = await keyVaultClient.GetSecretAsync(_keyVaultOptions.IdentitySigningCredentialUri);
_signingCredential = new X509Certificate2(Convert.FromBase64String(secretBundle.Value), string.Empty, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
0 голосов
/ 11 сентября 2018

Очень распространенная проблема, с которой сталкиваются люди, связана с разрешениями.Убедитесь, что у приложения (субъекта службы), представляющего ваше веб-задание, достаточно разрешений в политиках доступа к хранилищу ключей, потому что я не вижу, чтобы вы упоминали что-либо о политике доступа в своем вопросе.

Шаги -

  1. Перейдите к политикам доступа к вашему ключевому хранилищу - enter image description here
  2. Добавьте новую политику
  3. Выберите участника (приложение, которое представляет веб-задание).Дайте хотя бы разрешения на получение ключей, секретов и сертификатов
  4. Нажмите кнопку ОК
  5. Нажмите кнопку "Сохранить" вверху, как только блейд-политика завершена.Это общий шаг, который пропускается, и политика никогда не сохраняется.

Посмотрите на эту ТАК сообщение , чтобы найти несколько способов сделать это.Хотя тот говорит только о секретах, поэтому разрешения, которые вы выбираете в флажках при добавлении политики, будут другими.

Если проблема все еще не решена, пожалуйста, опубликуйте более подробный код для доступа к сертификату из хранилища, и если ваша трассировка стека исключений идет дальше, чем вы уже поделились, включите это.

...