Сертификат хранилища ключей Azure: ключ не найден

#azure #asp.net-core #x509certificate #azure-keyvault

#azure #asp.net-core #x509certificate #azure-keyvault

Вопрос:

Я пытаюсь включить сертификат хранилища ключей Azure в существующий API. У нас уже есть секреты и сертификат хранилища ключей Azure в учетной записи хранилища ключей Azure. Вот код для настройки сертификата:

  public static IWebHost BuildWebHost() =>
               WebHost.CreateDefaultBuilder()
                   .ConfigureAppConfiguration((context, config) =>
                   {
                       var env = context.HostingEnvironment;
                       config.SetBasePath(Directory.GetCurrentDirectory())
                            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);

                       var builtConfig = config.Build();
                       X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
                       store.Open(OpenFlags.ReadOnly);
                       var cert = store.Certificates.Find(X509FindType.FindByThumbprint, builtConfig["AzureKeyVault:CertThumbprint"], false);
                       config.AddAzureKeyVault(
                               $"https://{builtConfig["AzureKeyVault:Vault"]}.vault.azure.net/",
                               builtConfig["AzureKeyVault:ClientId"],
                               cert.OfType<X509Certificate2>().Single());
                       store.Close();
                   })
                   .UseStartup<Startup>()
                   .Build();
  

На моем локальном компьютере я импортировал сертификат должным образом, что включает загрузку формата pfx.

Но сообщение об ошибке, которое я получил, было:

Майкрософт.IdentityModel.Клиенты.ActiveDirectory.Исключение AdalServiceException: ‘AADSTS700027: утверждение клиента содержит недопустимую подпись. [Причина — Ключ не найден., Отпечаток ключа, используемого клиентом: ‘xxx’

Есть ли причина, которая вызывает это?

Комментарии:

1. Является cert нулевым? В противном случае закрытый ключ не был найден / импортирован.

2. ага, понятно. да, сейчас он работает. Спасибо!

3. Я сформулировал ответ. Пожалуйста, отметьте его, чтобы другие пользователи могли воспользоваться.

Ответ №1:

В сообщении указывается, что либо сертификат не импортирован с закрытым ключом ( certmgr.msc ), либо разрешения не установлены для запрашивающего пользователя (при использовании машинного хранилища — certlm.msc )

Комментарии:

1. Не могли бы вы, пожалуйста, рассказать мне немного больше об этом? Я думаю, что у меня такая же / схожая проблема. Я могу найти нужный сертификат в хранилище, выполнив итерацию и используя thumbprint. Я могу успешно создать ClientAssertionCertificate, но он завершается с ошибкой в AquireTokenAsync. Будет работать один сертификат, срок действия которого скоро истекает. Ни один из других, которые я пробую, не работает. Я уверен, что это то, что я упускаю из виду в течение последних 2 дней. Спасибо!

2. * certmgr.msc (обратите внимание на букву «т»)