502 Gateway inválido - Certificado autoassinado na cadeia

Esta é a documentação do Apigee Edge.
Acesse Documentação da Apigee X.
informações

Sintoma

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

Como alternativa, o administrador receberá um erro self signed certificate in certificate chain ao executar a 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, esse 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 ele não for confiável vai gerar um erro de tempo de execução. Usuários de nuvem pública e privada de borda
O Apigee Edge Management Server usa um certificado autoassinado Ao configurar o Edge Microgateway pela primeira vez, ele se conectará ao Apigee Edge por TLS para inicialização. Se o Edge apresentar um certificado autoassinado, ocorrerá uma falha. Usuários da nuvem privada de borda

Causa: o servidor de destino apresenta um certificado autoassinado

Se um certificado autoassinado é apresentado pelo servidor de destino no southbound, então o Edge Microgateway geraria, por padrão, esse erro porque não confia em certificados autoassinados.

Diagnóstico

Você poderá encontrar o seguinte erro 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 tem muito provavelmente receberam um certificado autoassinado do servidor de destino. Para confirmar isso, execute as seguintes etapas:

  1. Execute o comando openssl a seguir para verificar a propriedade do servidor de destino cadeia de certificados:
    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 realmente autoassinado, essa é a causa do o 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. Trabalhar com a equipe proprietária do servidor de destino para conseguir um certificado TLS adequado assinado por um de uma autoridade certificadora (CA, na sigla em inglês) confiável.
  2. Se isso não for possível, considere uma das seguintes opções para permitir imagens certificados no Edge Microgateway.

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

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

      Isso está documentado no documento Node.js site.

    .

    Opção 2: configurar o arquivo de configuração YAML do Edge Microgateway para confiar nesses dados específicos certificado desse servidor

    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 Converter certificados em formato compatível
    2. Se houver uma cadeia de certificados, verifique se os certificados estão no ordem. O certificado de folha precisa sempre ser o primeiro, seguido pelo intermediário e o certificado raiz. Há mais explicações sobre isso no Validação da 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 essa configuração também são abordadas nos Módulo Edge Microgateway: configurar vídeo TLS unidirecional e bidirecional no sentido sul Consulte Como configurar o SSL no servidor do Edge Microgateway para mais informações.

Se o problema persistir, acesse É necessário coletar informações de diagnóstico.

Causa: o Apigee Edge Management Server usa um certificado autoassinado

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

Na 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.

Este é um exemplo do comando edgemicro configure para a nuvem privada de borda:

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á a seguinte erro 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 do Apigee Edge tenha fornecido o certificado e tem uma cópia dele.
  3. Caso contrário, execute o seguinte comando para ver 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. Trabalhar com a equipe proprietária do servidor de destino para conseguir um certificado TLS adequado assinado por um de uma autoridade certificadora (CA, na sigla em inglês) confiável.
  2. Se isso não for possível, faça o seguinte para permitir a autenticação certificados 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 Usar uma AC em que o Node.js não confia.
  5. Caso contrário, exporte uma variável de ambiente chamada NODE_EXTRA_CA_CERTS. que aponta para o arquivo da CA raiz. documentadas no documento oficial 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: 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 pode ser substituída em no arquivo config.yaml principal (logging > dir parameter). É recomendado mudar log > level para info antes de fornecer o os arquivos de registro no suporte do Apigee Edge.
  • Arquivo de configuração: a configuração principal do Edge Microgateway está no YAML na pasta padrão do Edge Microgateway, $HOME/.edgemicro. Há um arquivo de configuração padrão chamado default.yaml e um para cada ambiente. ORG-ENV-config.yaml. Fazer upload deste arquivo da organização e do ambiente afetados.

    Documentos de referência

    Configurar a interface do Edge para usar o TLS e acessar a API Edge