502 Bad Gateway - Certificato autofirmato nella catena

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

Sintomo

L'applicazione client riceve un codice di risposta HTTP di 502 con il messaggio Bad Gateway come risposta per le chiamate API in Edge Microgateway.

In alternativa, l'amministratore riceverà un errore self signed certificate in certificate chain durante l'esecuzione del comando edgemicro configure.

Messaggio di errore

Il client visualizzerà il seguente messaggio di risposta:

HTTP/1.1 502 Bad Gateway

Due esempi comuni di risposte di errore sono:

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

In alternativa, questo errore può verificarsi durante l'esecuzione di 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' }

Possibili cause

Causa Descrizione Istruzioni per la risoluzione dei problemi applicabili a
Il server di destinazione presenta un certificato autofirmato Edge Microgateway verificherà il certificato del server di destinazione e, se non è attendibile, genererà un errore di runtime. Utenti di cloud pubblico e privato perimetrale
Apigee Edge Management Server utilizza un certificato autofirmato Quando configuri Edge Microgateway per la prima volta, si connetterà ad Apigee Edge tramite TLS per eseguire il bootstrap. Se Edge presenta un certificato autofirmato, l'operazione non andrà a buon fine. Utenti del cloud privato perimetrale

Causa: il server di destinazione presenta un certificato autofirmato

Se un certificato autofirmato viene presentato dal server di destinazione alla connessione verso sud, Edge Microgateway genererà, per impostazione predefinita, questo errore perché non considera attendibili i certificati autofirmati.

Diagnostica

Potresti notare il seguente errore nei log (/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][]

Il codice di errore SELF_SIGNED_CERT_IN_CHAIN indica che molto probabilmente Edge Microgateway ha ricevuto un certificato autofirmato dal server di destinazione. Per verificarlo, segui questi passaggi:

  1. Esegui questo comando openssl per verificare la catena di certificati del server di destinazione:
    echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
    
  2. Se la catena di certificati del server di destinazione è effettivamente autofirmata, è questa la causa del problema.

    Nell'esempio seguente, puoi notare che il server di destinazione presenta un certificato autofirmato:

    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
    

Risoluzione

  1. Collabora con il team proprietario del server di destinazione per ottenere un certificato TLS appropriato firmato da un'autorità di certificazione (CA) attendibile.
  2. Se ciò non è possibile, prendi in considerazione una delle seguenti opzioni per consentire i certificati autofirmati in Edge Microgateway.

    Opzione 1: imposta una proprietà di sistema per consentire a Edge Microgateway di considerare attendibili tutti i certificati

    1. Se utilizzi docker, consulta Utilizzo di una CA non considerata attendibile da Node.js
    2. In caso contrario, esporta una variabile di ambiente denominata NODE_EXTRA_CA_CERTS, puntando al file CA principale.

      È documentato sul sito web ufficiale di Node.js.

    Opzione 2: configura il file di configurazione YAML Edge Microgateway per considerare attendibile il certificato specifico per il server di destinazione

    1. Assicurati di avere il certificato (o la catena) del server di destinazione in formato PEM. Per convertire altri formati di certificato in PEM, segui le istruzioni in Convertire i certificati nel formato supportato.
    2. Se esiste una catena di certificati, assicurati che i certificati siano nell'ordine corretto. Il certificato foglia deve essere sempre prima, seguito dal certificato intermedio e poi dal certificato radice. Ulteriori spiegazioni su questo argomento sono disponibili nella pagina Convalida della catena di certificati.

      Nell'esempio seguente abbiamo configurato il file CA attendibile per untrusted-root.badssl.com.

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

    Le istruzioni per la configurazione sono descritte anche nel video Edge Microgateway Module - Configure 1-way and 2-way Southbound TLS. Per saperne di più, consulta la sezione Configurazione di SSL sul server Edge Microgateway.

Se il problema persiste, vai alla pagina Devi raccogliere dati diagnostici.

Causa: il server di gestione Apigee Edge Management utilizza un certificato autofirmato

Quando Edge Microgateway viene configurato per la prima volta, uno dei comandi che devi eseguire è edgemicro configure o edgemicro private configure. Questo comando eseguirà il bootstrap del cluster e contatterà Apigee Edge per scaricare le informazioni richieste.

Per il cloud privato Edge, l'URL del server di gestione è determinato dall'argomento -m. Se hai attivato TLS per il server di gestione, Edge Microgateway proverà a verificare il certificato presentato dal server di gestione.

Di seguito è riportato un esempio di comando edgemicro configure per Edge Private Cloud:

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 il server di gestione è configurato con un certificato autofirmato, nell'output della console verrà visualizzato il seguente errore.

{ 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' }

Diagnostica

  1. In questo caso, il server di gestione (management.apigee-dev.net) potrebbe restituire un certificato TLS autofirmato.
  2. È probabile che l'amministratore di sistema Apigee Edge abbia fornito il certificato e ne abbia una copia.
  3. In caso contrario, esegui questo comando per ottenere informazioni sul certificato:
    echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
    
  4. Se il server di gestione ha un certificato autofirmato, è questa la causa di questo problema.

Risoluzione

  1. Collabora con il team proprietario del server di destinazione per ottenere un certificato TLS appropriato firmato da un'autorità di certificazione (CA) attendibile.
  2. Se ciò non è possibile, procedi nel seguente modo per consentire i certificati autofirmati in Edge Microgateway.

  3. Imposta una proprietà di sistema per consentire a Edge Microgateway di considerare attendibili tutti i certificati.
  4. Se utilizzi docker, consulta Utilizzo di una CA non considerata attendibile da Node.js.
  5. In caso contrario, esporta una variabile di ambiente denominata NODE_EXTRA_CA_CERTS, puntando al file CA radice.Questa operazione è documentata sul sito web ufficiale di Node.js.

Devi raccogliere dati diagnostici

Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni diagnostiche e contatta l'assistenza Apigee Edge:

  • File di log: la cartella predefinita è /var/tmp, ma può essere sostituita nel file config.yaml principale (logging > dir parameter). È consigliabile modificare log > level in info prima di fornire i file di log all'Assistenza Apigee Edge.
  • File di configurazione: la configurazione principale di Edge Microgateway si trova nel file YAML nella cartella Edge Microgateway predefinita, $HOME/.edgemicro. Esiste un file di configurazione predefinito denominato default.yaml, seguito da uno per ogni ambiente ORG-ENV-config.yaml. Carica il file per intero per l'organizzazione e l'ambiente interessati.

    Documenti di riferimento

    Configura l'interfaccia utente Edge per utilizzare TLS per accedere all'API Edge