502 Bad Gateway – Certificat autosigné dans la chaîne

Vous consultez la documentation d'Apigee Edge.
Consultez la documentation Apigee X.
en savoir plus

Problème constaté

L'application cliente reçoit un code de réponse HTTP 502 avec le message Bad Gateway comme réponse aux appels d'API dans Edge Microgateway.

L'administrateur peut également recevoir une erreur self signed certificate in certificate chain lors de l'exécution de la commande edgemicro configure.

Message d'erreur

Le client verra le message de réponse suivant:

HTTP/1.1 502 Bad Gateway

Voici deux exemples courants de réponses d'erreur:

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

Cette erreur peut également se produire lors de l'exécution de 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' }

Causes possibles

Cause Description Instructions de dépannage applicables
Le serveur cible présente un certificat autosigné Edge Microgateway vérifie le certificat du serveur cible et, s'il n'est pas approuvé, génère une erreur d'exécution. Utilisateurs Edge Public and Private Cloud
Le serveur de gestion Apigee Edge utilise un certificat autosigné. Lorsque vous configurez Edge Microgateway pour la première fois, elle se connecte à Apigee Edge via TLS pour l'amorçage. Si Edge présente un certificat autosigné, cette opération échoue. Utilisateurs de cloud privé périphérique

Cause: le serveur cible présente un certificat autosigné

Si un certificat autosigné est présenté par le serveur cible au niveau de la connexion directe sud, Edge Microgateway génèrera par défaut cette erreur, car il ne fait pas confiance aux certificats autosignés.

Diagnostic

L'erreur suivante peut apparaître dans les journaux (/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][]

Le code d'erreur SELF_SIGNED_CERT_IN_CHAIN indique que Edge Microgateway a très probablement reçu un certificat autosigné de la part du serveur cible. Pour le vérifier, procédez comme suit:

  1. Exécutez la commande openssl suivante pour vérifier la chaîne de certificats du serveur cible :
    echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
    
  2. Si la chaîne de certificat du serveur cible est effectivement autosignée, c'est la cause du problème.

    Dans l'exemple suivant, le serveur cible présente un certificat autosigné:

    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
    

Résolution

  1. Collaborez avec l'équipe propriétaire du serveur cible pour obtenir un certificat TLS approprié, signé par une autorité de certification de confiance.
  2. Si cela n'est pas possible, envisagez l'une des options suivantes pour autoriser les certificats autosignés dans Edge Microgateway.

    Option n° 1: définissez une propriété système pour autoriser Edge Microgateway à approuver tous les certificats

    1. Si vous utilisez Docker, consultez Utiliser une autorité de certification non approuvée par Node.js.
    2. Sinon, exportez une variable d'environnement appelée NODE_EXTRA_CA_CERTS, pointant vers le fichier d'autorité de certification racine.

      Ce processus est documenté sur le site Web officiel de Node.js.

    Option 2: Configurer le fichier de configuration YAML Edge Microgateway pour approuver ce certificat spécifique pour ce serveur cible

    1. Assurez-vous de disposer du certificat (ou de la chaîne) du serveur cible au format PEM. Pour convertir d'autres formats de certificats au format PEM, suivez les instructions de la section Convertir des certificats dans un format compatible.
    2. S'il existe une chaîne de certificats, assurez-vous que les certificats sont dans le bon ordre. Le certificat d'entité finale doit toujours apparaître en premier, suivi du certificat intermédiaire, puis du certificat racine. Pour en savoir plus, consultez la section Valider la chaîne de certificats.

      Dans l'exemple suivant, nous avons configuré le fichier d'autorité de certification de confiance pour untrusted-root.badssl.com.

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

    Les instructions de configuration sont également traitées dans la vidéo Module Edge Microgateway – Configurer le protocole TLS unidirectionnel et bidirectionnel dans la plage Sud. Pour en savoir plus, consultez la section Configurer SSL sur le serveur Edge Microgateway.

Si le problème persiste, consultez Recueil d'informations de diagnostic.

Cause: le serveur de gestion Apigee Edge utilise un certificat autosigné.

Lorsque Edge Microgateway est configuré pour la première fois, l'une des commandes que vous devez exécuter est edgemicro configure ou edgemicro private configure. Cette commande amorcera le cluster et contactera Apigee Edge pour télécharger les informations requises.

Pour le cloud privé Edge, l'URL du serveur de gestion est déterminée par l'argument -m. Si vous avez activé le protocole TLS pour le serveur de gestion, Edge Microgateway tente de vérifier le certificat présenté par le serveur de gestion.

Voici un exemple de commande edgemicro configure pour 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

Si le serveur de gestion est configuré avec un certificat autosigné, l'erreur suivante s'affiche dans le résultat de la 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' }

Diagnostic

  1. Dans ce cas, il est possible que le serveur de gestion (management.apigee-dev.net) renvoie un certificat TLS autosigné.
  2. Il est probable que votre administrateur système Apigee Edge ait fourni le certificat et en possède une copie.
  3. Sinon, exécutez la commande suivante pour obtenir des informations sur le certificat :
    echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
    
  4. Si le serveur de gestion dispose d'un certificat autosigné, c'est la cause du problème.

Résolution

  1. Collaborez avec l'équipe propriétaire du serveur cible pour obtenir un certificat TLS approprié, signé par une autorité de certification de confiance.
  2. Si cela n'est pas possible, procédez comme suit pour autoriser les certificats autosignés dans Edge Microgateway.

  3. Définissez une propriété système pour autoriser Edge Microgateway à approuver tous les certificats.
  4. Si vous utilisez Docker, consultez Utiliser une autorité de certification non approuvée par Node.js.
  5. Sinon, exportez une variable d'environnement appelée NODE_EXTRA_CA_CERTS qui pointe vers le fichier CA racine.Cela est documenté sur le site Web officiel de Node.js.

Vous devez collecter des informations de diagnostic

Si le problème persiste même après avoir suivi les instructions ci-dessus, rassemblez les informations de diagnostic suivantes, puis contactez l'assistance Apigee Edge:

  • Fichiers journaux: le dossier par défaut est /var/tmp, mais il peut être ignoré dans le fichier config.yaml principal (logging > dir parameter). Il est recommandé de remplacer log > level par info avant de fournir les fichiers journaux à l'assistance Apigee Edge.
  • Fichier de configuration: la configuration principale d'Edge Microgateway se trouve dans le fichier YAML du dossier Edge Microgateway par défaut, $HOME/.edgemicro. Il existe un fichier de configuration par défaut nommé default.yaml, puis un fichier pour chaque environnement ORG-ENV-config.yaml. Importez ce fichier complet pour l'organisation et l'environnement concernés.

    Documents de référence

    Configurez l'interface utilisateur Edge pour utiliser TLS afin d'accéder à l'API Edge