Устранение неполадок с сертификатом расширения на виртуальной машине Windows в Azure

Область применения: ✔️ Виртуальные машины Windows

В этой статье описывается, как выявлять и устранять проблемы, связанные с сертификатами на виртуальной машине Windows, которая использует расширение. Как правило, эти проблемы связаны с криптографическими операциями или самим сертификатом.

Контрольный список по устранению неполадок

Просмотр гостевых журналов

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

Журнал Description
Файл журнала C:\WindowsAzure\Logs\WaAppAgent.log Журнал гостевого агента. Описывает операции расширения (например, скачивание, установка, включение и отключение) и их результаты.
Файлы журнала в папке C:\WindowsAzure\Logs\Plugins\<ExtensionName> Различные журналы, которые отражают операции определенного расширения. Каждое расширение имеет собственные функции, но большинство расширений имеют стандартный набор файлов журналов, включая CommandExecution.log, CommandExecution_<Timestamp>.log, CustomScriptHandler.log и IaaSBcdrExtension<Number>.log.

Примечание.

Эта таблица содержит только самые заметные файлы журналов. Это не полный список.

Кроме того, можно запустить средство CollectGuestLogs.exe для сбора всех гостевых журналов в файл архива .zip . Средство CollectGuestLogs.exe находится на виртуальной машине Windows в одном из следующих каталогов:

  • C:\WindowsAzure\Packages
  • C:\WindowsAzure\GuestAgent_<VersionNumber>_<Timestamp>

Симптомы

В следующем списке описаны наиболее распространенные ошибки, которые могут возникать при использовании расширения на виртуальной машине Windows:

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

    Примечание.

    Вариант исключения приводит к неправильному FailedToDecryptProtectedSettings настройке разрешений в папке Crypto\RSA\MachineKeys . В этом сценарии отображается одно из следующих сообщений об ошибках:

    System.Security.Cryptography.CryptographicException: Keyset does not exist  
      at System.Security.Cryptography.Pkcs.EnvelopedCms.DecryptContent(RecipientInfoCollection recipientInfos, X509Certificate2Collection extraStore)  
      at Microsoft.Azure.Plugins.Diagnostics.dll.PluginConfigurationSettingsProvider.DecryptPrivateConfig(String encryptedConfig)  
    
    Failed to decode, decrypt, and deserialize the protected settings string. Error Message: Keyset does not exist"
    
    Decrypting Protected Settings - Invalid provider type specified
    
    [ERROR] Failed to get TransportCertificate. Error: Microsoft.WindowsAzure.GuestAgent.CertificateManager.CryptographyNative+PInvokeException: Self-signed Certificate Generation failed. Error Code: -2146893808.
    
  • Сообщение об ошибке "Не удалось получить сертификат".

  • CryptographicExceptionисключение в параметрах диагностика виртуальной машины, сопровождаемое сообщением", "Сообщение конвертированных данных не содержит указанного получателя". В следующем тексте описывается пример этого исключения:

    DiagnosticsPluginLauncher.exe Information: 0 : [6/29/2020 1:32:20 PM] Decrypting private configuration
    
    DiagnosticsPluginLauncher.exe Warning: 0 : [6/29/2020 1:32:20 PM] No certficate with given thumbprint found in the certificate store. Thumbprint:34C8CDC747693E0E33A9648703E3990EC4F2C484
    
    DiagnosticsPluginLauncher.exe Information: 0 : [6/29/2020 1:32:20 PM] Retrying after 30 seconds. Retry attempt 1
    
    DiagnosticsPluginLauncher.exe Warning: 0 : [6/29/2020 1:32:50 PM] No certficate with given thumbprint found in the certificate store. Thumbprint:34C8CDC747693E0E33A9648703E3990EC4F2C484
    
    DiagnosticsPluginLauncher.exe Information: 0 : [6/29/2020 1:32:50 PM] Retrying after 30 seconds. Retry attempt 2
    
    DiagnosticsPluginLauncher.exe Warning: 0 : [6/29/2020 1:33:20 PM] No certficate with given thumbprint found in the certificate store. Thumbprint:34C8CDC747693E0E33A9648703E3990EC4F2C484
    
    DiagnosticsPluginLauncher.exe Information: 0 : [6/29/2020 1:33:20 PM] Retrying after 30 seconds. Retry attempt 3
    
    DiagnosticsPluginLauncher.exe Error: 0 : [6/29/2020 1:33:50 PM] System.Security.Cryptography.CryptographicException: The enveloped-data message does not contain the specified recipient.
      at System.Security.Cryptography.Pkcs.EnvelopedCms.DecryptContent(RecipientInfoCollection recipientInfos, X509Certificate2Collection extraStore)
      at Microsoft.Azure.Plugins.Diagnostics.dll.PluginConfigurationSettingsProvider.DecryptPrivateConfig(String encryptedConfig)
    
  • Новый сертификат, который отправляется на виртуальную машину, но вмешивается в другие операции.

Причина: изменения кода рабочих процессов и зависимостей

Проблема в основном вызвана изменением платформы Azure, реализованной около мая 2020 года. Это изменение было для улучшения рабочего процесса расширений виртуальной машины и устранения некоторых зависимостей от других компонентов Azure. Для этого требуется, чтобы расширения, настраиваемые поставщики ресурсов (CRPs) и гостевой агент работал совместно. Незначительные ошибки вызвали вторичные проблемы, которые отражаются в проблемах с сертификатом расширения.

Решение 1. Обновление сертификата расширения

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

  1. Проверьте, включен ли сертификат генератора сертификатов WINDOWS Azure CRP в оснастк "Сертификаты" консоли управления Майкрософт. Для этого следуйте инструкциям в разделе "Несколько сертификатов" на виртуальной машине IaaS Azure, которая использует расширения для поиска симптомов виртуальной машины Windows.

  2. Удалите этот сертификат. Для этого выберите сертификат генератора сертификатов WINDOWS Azure CRP, а затем щелкните значок "Удалить".

    Примечание.

    Если требуется сертификат генератора сертификатов WINDOWS Azure CRP, виртуальная машина повторно создает сертификат, если он отсутствует.

  3. Активируйте новое состояние цели для гостевого агента, применив один из следующих вариантов:

    • Выполните следующий скрипт PowerShell, содержащий команды Get-AzureRmVM и Update-AzureRmVM :

      $rg = "<name-of-the-resource-group-containing-the-virtual-machine>"
      $vmName = "<name-of-the-virtual-machine>"
      $vm = Get-AzureRmVM -ResourceGroupName $rg -Name $vmName  
      Update-AzureRmVM -ResourceGroupName $rg -VM $vm  
      
    • Выполните операцию повторного применения на виртуальной машине, следуя инструкциям в разделе "Разрешение" виртуальной машины, зависшие в статье о состоянии сбоя.

  4. Повторите операцию расширения.

Если обновление сертификата не исправит проблему, остановите или раздали виртуальную машину, а затем снова запустите виртуальную машину.

Решение 2. Исправлен список управления доступом (ACL) в папках MachineKeys или SystemKeys

В папке Crypto\RSA\MachineKeys исправьте список управления доступом (ACL), чтобы применить правильные разрешения.

  1. В консоли PowerShell администрирования выполните следующие команды, чтобы получить уникальное имя контейнера ключей сертификата клиента. Убедитесь, что вы закомментируете одно из $certName определений в зависимости от того, используете ли вы классическую виртуальную машину переднего плана RedDog (RDFE), или виртуальную машину Azure Resource Manager (для которой указано имя Windows Azure CRP Certificate GeneratorсертификатаWindows Azure Service Management for Extensions):

    # Comment out one of the following certificate name definitions.
    $certName = "Windows Azure Service Management for Extensions"  # Classic RDFE VM
    $certName = "Windows Azure CRP Certificate Generator"          # Azure Resource Manager VM
    
    $fileName = (Get-ChildItem Cert:\LocalMachine\My |
                    Where-Object {$_.Subject -eq 'DC=$certName'}
                ).PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
    
  2. Создайте резервную копию ACL, выполнив команду icacls :

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /save machinekeys_permissions_before.aclfile /t
    
  3. Выполните следующие icacls команды, чтобы исправить разрешения MachineKeys :

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant SYSTEM:(F)
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant Administrators:(RX)
    
  4. Запустите icacls еще раз, чтобы перенаправить обновленные списки ACL MachineKeys в текстовый файл:

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t > machinekeys_permissions_after.txt
    
  5. Просмотрите файл machinekeys_permissions_after.txt в текстовом редакторе, чтобы убедиться, что изменения разрешений отображаются должным образом.

  6. Повторите попытку расширения или попробуйте перезапустить службы гостевого агента, запустив средство WaAppAgent.exe или WindowsAzureGuestAgent.exe .

Если эта процедура не работает, можно снова выполнить icacls команды (шаги 2–4) в папке C:\ProgramData\Microsoft\Crypto\SystemKeys\* вместо папки C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName .

Дополнительные сведения

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или помощь, создайте запрос на поддержку или попросите сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.