Partilhar via


Solucionar problemas de certificado de extensão em uma VM do Windows no Azure

Aplica-se a: ✔️ Windows VMs

Este artigo discute como identificar e corrigir problemas que envolvem certificados em uma VM (máquina virtual) do Windows que usa uma extensão. Normalmente, esses problemas estão relacionados a operações criptográficas ou ao próprio certificado.

Lista de verificação de solução de problemas

Exibir os logs de convidados

Para obter detalhes sobre um erro, verifique os logs de convidados. Os logs mais úteis na VM do Windows para solucionar erros de certificado de extensão são mostrados na tabela a seguir.

Log descrição
O arquivo de log C:\WindowsAzure\Logs\WaAppAgent.log O log do agente convidado. Descreve as operações da extensão (como baixar, instalar, habilitar e desabilitar) e seus resultados.
Arquivos de log na pasta C:\WindowsAzure\Logs\Plugins\<ExtensionName> Vários logs que refletem as operações de uma extensão específica. Cada extensão tem seus próprios recursos, mas a maioria das extensões tem um conjunto padrão de arquivos de log, incluindo CommandExecution.log, CommandExecution_Timestamp>.log, CustomScriptHandler.log e IaaSBcdrExtension<Number>.log.<

Observação

Esta tabela contém apenas os arquivos de log mais notáveis. Não é uma lista abrangente.

Como alternativa, você pode executar a ferramenta CollectGuestLogs.exe para coletar todos os logs de convidado em um arquivo .zip . A ferramenta CollectGuestLogs.exe está localizada na VM do Windows em um dos seguintes diretórios:

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

Sintomas

A lista a seguir descreve os erros mais comuns que podem ocorrer quando você usa uma extensão em uma VM do Windows:

  • FailedToDecryptProtectedSettings exception: o certificado de transporte usado para descriptografar as configurações protegidas da extensão está ausente da VM.

    Observação

    Uma variante da FailedToDecryptProtectedSettings exceção faz com que permissões incorretas sejam definidas na pasta Crypto\RSA\MachineKeys . Nesse cenário, uma das seguintes mensagens de erro é exibida:

    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.
    
  • Mensagem de erro "Não é possível recuperar o certificado".

  • CryptographicException exceção nas configurações de diagnóstico da VM, acompanhada pela mensagem "A mensagem de dados envelopados não contém o destinatário especificado". O texto a seguir descreve um exemplo dessa exceção:

    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)
    
  • Um novo certificado que é enviado por push para a VM, mas interfere em outras operações.

Causa: alterações no fluxo de trabalho e no código de dependência

O problema é causado principalmente por uma alteração na plataforma do Azure que foi implementada por volta de maio de 2020. A mudança foi para melhorar o fluxo de trabalho das extensões de VM e eliminar algumas dependências de outros componentes do Azure. Ele requer que extensões, CRPs (provedores de recursos personalizados) e o agente convidado trabalhem coletivamente. Pequenos bugs causaram problemas secundários que são refletidos nos problemas do certificado de extensão.

Solução 1: Atualizar o certificado de extensão

Siga estas etapas para atualizar para um certificado que pode ser usado com êxito junto com uma extensão:

  1. Verifique se o certificado do Gerador de Certificados CRP do Windows Azure está incluído no snap-in Certificados do Console de Gerenciamento Microsoft. Para fazer isso, siga as instruções em Vários certificados em uma VM de IaaS do Azure que usa extensões para localizar os sintomas da VM do Windows.

  2. Exclua esse certificado. Para fazer isso, selecione o certificado Gerador de Certificados CRP do Windows Azure e, em seguida, selecione o ícone Excluir.

    Observação

    Quando o certificado do Gerador de Certificados CRP do Windows Azure é necessário, a VM recria o certificado se ele estiver ausente.

  3. Acione um novo estado de meta para o agente convidado aplicando uma das seguintes opções:

    • Execute o seguinte script do PowerShell que contém os comandos Get-AzureRmVM e 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  
      
    • Execute uma operação de "reaplicação" em sua VM seguindo as instruções na seção "Resolução" do artigo Máquina virtual presa em um estado de falha.

  4. Repita a operação de extensão.

Se a atualização do certificado não corrigir o problema, pare ou desaloque a VM e inicie a VM novamente.

Solução 2: Corrigir a ACL (lista de controle de acesso) nas pastas MachineKeys ou SystemKeys

Na pasta Crypto\RSA\MachineKeys, corrija a ACL (lista de controle de acesso) para que as permissões corretas sejam aplicadas.

  1. Em um console administrativo do PowerShell, execute os comandos a seguir para obter o nome exclusivo do contêiner de chave do certificado de locatário. Certifique-se de comentar uma das $certName definições, dependendo se você está usando uma VM clássica do RedDog Front End (RDFE) (para a qual o nome do certificado é Windows Azure Service Management for Extensions) ou uma VM do Azure Resource Manager (para a qual o nome do certificado é Windows Azure CRP Certificate Generator):

    # 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. Faça um backup da ACL executando o comando icacls :

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /save machinekeys_permissions_before.aclfile /t
    
  3. Execute os seguintes icacls comandos para corrigir as permissões MachineKeys:

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant SYSTEM:(F)
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant Administrators:(RX)
    
  4. Execute icacls novamente para redirecionar as ACLs MachineKeys atualizadas para um arquivo de texto:

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t > machinekeys_permissions_after.txt
    
  5. Exiba o arquivo machinekeys_permissions_after.txt em um editor de texto para verificar se as alterações de permissão aparecem conforme o esperado.

  6. Tente a extensão novamente ou tente reiniciar os serviços do agente convidado executando a ferramenta WaAppAgent.exe ou WindowsAzureGuestAgent.exe .

Se esse procedimento não funcionar, você poderá tentar executar os icacls comandos novamente (etapas 2 a 4) nas pastas curinga C:\ProgramData\Microsoft\Crypto\SystemKeys\* em vez da pasta C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName .

Mais informações

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.