502 Gateway inválido - Certificado autoassinado na cadeia

Você está vendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
informações

Sintoma

O aplicativo cliente recebe um código de resposta HTTP de 502 com a mensagem Bad Gateway como resposta para chamadas de API no Edge Microgateway.

Como alternativa, o administrador receberá um erro self signed certificate in certificate chain ao executar o comando edgemicro configure.

Mensagem de erro

O cliente verá a seguinte mensagem de resposta:

HTTP/1.1 502 Bad Gateway

Dois exemplos comuns de respostas de erro são:

{"message":"self signed certificate in certificate chain","code":"SELF_SIGNED_CERT_IN_CHAIN"}
{"message":"self signed certificate","code":"DEPTH_ZERO_SELF_SIGNED_CERT"}

Como alternativa, este erro pode ocorrer ao executar edgemicro configure:

{ Error: self signed certificate in certificate chain
at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34)
at TLSSocket.emit (events.js:189:13)
at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }

Causas possíveis

Causa Descrição Instruções de solução de problemas aplicáveis para
O servidor de destino apresenta um certificado autoassinado O Edge Microgateway verificará o certificado do servidor de destino e, se não for confiável, gerará um erro de ambiente de execução. Usuários de nuvens públicas e privadas de borda
O servidor de gerenciamento de borda da Apigee usa um certificado autoassinado Ao configurar o Edge Microgateway pela primeira vez, ele se conectará ao Apigee Edge por TLS para o bootstrap. Se o Edge apresentar um certificado autoassinado, ocorrerá uma falha. Usuários da nuvem privada do Edge

Causa: o servidor de destino apresenta um certificado autoassinado

Se um certificado autoassinado for apresentado pelo servidor de destino na conexão sul, o Edge Microgateway geraria, por padrão, esse erro porque ele não confia em certificados autoassinados.

Diagnóstico

O seguinte erro pode aparecer nos registros (/var/tmp/edgemicro-`hostname`- *.log):

2021-05-18T10:52:46.425Z [error][0:8000][1][gsc][test][edgemicro_badtargethost][][][2db53f80-
b7c7-11eb-9abe-05b6297863f1][microgateway-core][][GET][502][self signed certificate in certificate
chain][SELF_SIGNED_CERT_IN_CHAIN][]

O código de erro SELF_SIGNED_CERT_IN_CHAIN indica que o Edge Microgateway provavelmente recebeu um certificado autoassinado do servidor de destino. Para confirmar isso, siga estas etapas:

  1. Execute o seguinte comando openssl para verificar a cadeia de certificados do servidor de destino:
    echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
    
  2. Se a cadeia de certificados do servidor de destino for de fato autoassinado, essa é a causa do problema.

    No exemplo a seguir, observe que o servidor de destino apresenta um certificado autoassinado:

    echo | openssl s_client -connect untrusted-root.badssl.com:443 -servername untrusted-root.badssl.com | openssl x509 -noout
    
    depth=1 C = US, ST = California, L = San Francisco, O = BadSSL, CN = BadSSL Untrusted Root Certificate Authority
    verify error:num=19:self signed certificate in certificate chain
    verify return:0
    DONE
    

Resolução

  1. Trabalhe com a equipe que tem o servidor de destino para adquirir um certificado TLS adequado, assinado por uma autoridade de certificação (CA, na sigla em inglês) confiável.
  2. Se isso não for possível, considere uma das opções a seguir para permitir certificados autoassinados no Edge Microgateway.

    Opção 1: definir uma propriedade do sistema para permitir que o Edge Microgateway confie em todos os certificados

    1. Se você estiver usando o Docker, consulte Como usar uma CA em que o Node.js não confia.
    2. Caso contrário, exporte uma variável de ambiente chamada NODE_EXTRA_CA_CERTS, apontando para o arquivo da CA raiz.

      Isso está documentado no site oficial do Node.js.

    Opção 2: definir o arquivo de configuração YAML do Edge Microgateway para confiar no certificado específico do servidor de destino

    1. Verifique se o certificado (ou a cadeia) do servidor de destino está no formato PEM. Para converter outros formatos de certificado em PEM, siga as instruções em Como converter certificados para um formato compatível.
    2. Se houver uma cadeia de certificados, verifique se os certificados estão na ordem correta. O certificado de folha precisa ser sempre o primeiro, seguido pelo certificado intermediário e depois pelo certificado raiz. Há mais explicações sobre isso em Como validar a cadeia de certificados.

      No exemplo a seguir, configuramos o arquivo de CA confiável para untrusted-root.badssl.com.

      edgemicro:
      ...
      targets:
        - host: 'untrusted-root.badssl.com'
          ssl:
            client
              ca: /opt/apigee/certs/untrusted-root.pem
      

    As instruções para configurar isso também são abordadas no vídeo Módulo do Edge Microgateway: configurar o TLS de 1 e 2 direções para o sul. Consulte Como configurar SSL no servidor Edge Microgateway para mais informações.

Se o problema persistir, acesse Precisamos coletar informações de diagnóstico.

Causa: o Apigee Edge Management Server usa um certificado autoassinado

Quando o Edge Microgateway for configurado pela primeira vez, um dos comandos que você precisará executar é edgemicro configure ou edgemicro private configure. Esse comando vai inicializar o cluster e entrar em contato com o Apigee Edge para fazer o download das informações necessárias.

Para a nuvem privada de borda, o URL do servidor de gerenciamento é determinado pelo argumento -m. Se você tiver ativado o TLS para o servidor de gerenciamento, o Edge Microgateway tentará verificar o certificado apresentado pelo servidor de gerenciamento.

Um exemplo de comando edgemicro configure para a nuvem privada do Edge é este:

edgemicro private configure -u <username> -p <password> -o apigee -e dev -v secure -r https://apigee-dev.net -m https://management.apigee-dev.net:8443

Se o servidor de gerenciamento estiver configurado com um certificado autoassinado, você receberá o erro a seguir na saída do console.

{ Error: self signed certificate in certificate chain
at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34)
at TLSSocket.emit (events.js:189:13)
at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }

Diagnóstico

  1. Nesse caso, o servidor de gerenciamento (management.apigee-dev.net) pode estar retornando um certificado TLS autoassinado.
  2. É provável que o administrador do sistema Apigee Edge tenha fornecido o certificado e tenha uma cópia dele.
  3. Caso contrário, execute o seguinte comando para conseguir informações sobre o certificado:
    echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
    
  4. Se o servidor de gerenciamento tiver um certificado autoassinado, essa é a causa do problema.

Resolução

  1. Trabalhe com a equipe que tem o servidor de destino para adquirir um certificado TLS adequado, assinado por uma autoridade de certificação (CA, na sigla em inglês) confiável.
  2. Se isso não for possível, faça o seguinte para permitir certificados autoassinados no Edge Microgateway.

  3. Defina uma propriedade do sistema para permitir que o Edge Microgateway confie em todos os certificados.
  4. Se você estiver usando o Docker, consulte Como usar uma CA em que o Node.js não confia.
  5. Caso contrário, exporte uma variável de ambiente chamada NODE_EXTRA_CA_CERTS, apontando para o arquivo da CA raiz.Isso está documentado no site oficial do Node.js.

É necessário coletar informações de diagnóstico

Se o problema persistir mesmo depois de seguir as instruções acima, colete as seguintes informações de diagnóstico e entre em contato com o suporte do Apigee Edge:

  • Arquivos de registros: a pasta padrão é /var/tmp, mas ela pode ser substituída no arquivo config.yaml principal (logging > dir parameter). É recomendável alterar log > level para info antes de fornecer os arquivos de registros ao Suporte do Apigee Edge.
  • Arquivo de configuração: a configuração principal do Edge Microgateway está no arquivo YAML na pasta padrão do Edge Microgateway, $HOME/.edgemicro. Há um arquivo de configuração padrão chamado default.yaml e, depois, um para cada ambiente ORG-ENV-config.yaml. Faça o upload desse arquivo completo para a organização e o ambiente afetados.

    Documentos de referência

    Configurar a IU do Edge para usar TLS para acessar a API Edge