502 Bad Gateway — Самоподписанный сертификат в цепочке

Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee
X.info

Симптом

Клиентское приложение получает HTTP-ответ с кодом 502 и сообщением Bad Gateway в ответ на вызовы API в Edge Microgateway.

В качестве альтернативы, при выполнении команды edgemicro configure администратор получит ошибку self signed certificate in certificate chain .

Сообщение об ошибке

Клиент увидит следующее ответное сообщение:

HTTP/1.1 502 Bad Gateway

Два распространённых примера ошибок в ответах:

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

Кроме того, эта ошибка может возникнуть при выполнении 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' }

Возможные причины

Причина Описание Инструкции по устранению неполадок, применимые для
Целевой сервер предоставляет самоподписанный сертификат. Edge Microgateway проверит сертификат целевого сервера, и если он не является доверенным, выдаст ошибку во время выполнения. Пользователи публичных и частных облачных сервисов на периферии сети
Сервер управления Apigee Edge Management Server использует самоподписанный сертификат. При первой настройке Edge Microgateway он подключится к Apigee Edge по протоколу TLS для начальной загрузки. Если Edge предоставит самоподписанный сертификат, это не удастся. Пользователи Edge Private Cloud

Причина: Целевой сервер предоставляет самоподписанный сертификат.

Если целевой сервер предоставляет самоподписанный сертификат в исходящем соединении, то Edge Microgateway по умолчанию выдаст эту ошибку, поскольку он не доверяет самоподписанным сертификатам.

Диагноз

В логах ( /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][]

Код ошибки SELF_SIGNED_CERT_IN_CHAIN ​​указывает на то, что Edge Microgateway, скорее всего, получил самоподписанный сертификат от целевого сервера. Для подтверждения этого выполните следующие действия:

  1. Выполните следующую команду openssl , чтобы проверить цепочку сертификатов целевого сервера:
    echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
    
  2. Если цепочка сертификатов целевого сервера действительно самоподписана, то это и является причиной проблемы.

    В следующем примере обратите внимание, что целевой сервер предоставляет самоподписанный сертификат:

    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

Разрешение

  1. В сотрудничестве с командой, владеющей целевым сервером, необходимо получить надлежащий TLS-сертификат, подписанный доверенным центром сертификации (CA).
  2. Если это невозможно, рассмотрите один из следующих вариантов, позволяющих использовать самоподписанные сертификаты в Edge Microgateway.

    Вариант №1: Установите системное свойство, разрешающее Edge Microgateway доверять всем сертификатам.

    1. Если вы используете Docker , обратитесь к разделу «Использование центра сертификации, которому Node.js не доверяет».
    2. В противном случае, экспортируйте переменную среды с именем NODE_EXTRA_CA_CERTS , указывающую на корневой файл центра сертификации.

      Это задокументировано на официальном сайте Node.js.

    Вариант №2: Настройте конфигурационный файл Edge Microgateway в формате YAML таким образом, чтобы он доверял конкретному сертификату для целевого сервера.

    1. Убедитесь, что сертификат (или цепочка) целевого сервера находится в формате PEM. Для преобразования сертификатов других форматов в формат PEM следуйте инструкциям в разделе «Преобразование сертификатов в поддерживаемые форматы» .
    2. Если существует цепочка сертификатов, убедитесь, что сертификаты расположены в правильном порядке. Конечный сертификат всегда должен быть первым, за ним следует промежуточный сертификат, а затем корневой сертификат. Более подробное объяснение этому приведено в разделе «Проверка цепочки сертификатов» .

      В следующем примере мы настроили файл доверенного центра сертификации для untrusted-root.badssl.com .

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

    Инструкции по настройке также описаны в видеоролике «Модуль Edge Microgateway — Настройка одностороннего и двустороннего TLS-соединения в южном направлении» . Дополнительную информацию см. в разделе «Настройка SSL на сервере Edge Microgateway» .

Если проблема сохраняется, перейдите к разделу «Необходимо собрать диагностическую информацию» .

Причина: Сервер управления Apigee Edge использует самоподписанный сертификат.

При первой настройке Edge Microgateway одной из команд, которую вам потребуется выполнить, будет edgemicro configure или edgemicro private configure . Эта команда инициализирует кластер и свяжется с Apigee Edge для загрузки необходимой информации.

Для Edge Private Cloud URL-адрес сервера управления определяется аргументом -m . Если для сервера управления включена поддержка TLS , Edge Microgateway попытается проверить сертификат, предоставленный сервером управления.

Пример команды edgemicro configure для 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

Если на сервере управления используется самоподписанный сертификат, то в консоли появится следующая ошибка.

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

Диагноз

  1. В этом случае сервер управления ( management.apigee-dev.net ) может возвращать самоподписанный TLS-сертификат.
  2. Вполне вероятно, что ваш системный администратор Apigee Edge предоставил сертификат и имеет его копию.
  3. В противном случае выполните следующую команду, чтобы получить информацию о сертификате:
    echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
    
  4. Если на сервере управления используется самоподписанный сертификат, то это и является причиной проблемы.

Разрешение

  1. В сотрудничестве с командой, владеющей целевым сервером, необходимо получить надлежащий TLS-сертификат, подписанный доверенным центром сертификации (CA).
  2. Если это невозможно, выполните следующие действия, чтобы разрешить использование самоподписанных сертификатов в Edge Microgateway.

  3. Установите системное свойство, разрешающее Edge Microgateway доверять всем сертификатам.
  4. Если вы используете Docker , обратитесь к разделу «Использование центра сертификации, которому Node.js не доверяет».
  5. В противном случае, экспортируйте переменную окружения с именем NODE_EXTRA_CA_CERTS , указывающую на корневой файл CA. Это описано на официальном сайте Node.js.

Необходимо собрать диагностическую информацию.

Если проблема сохраняется даже после выполнения вышеуказанных инструкций, соберите следующую диагностическую информацию и обратитесь в службу поддержки Apigee Edge :

  • Файлы журналов : папка по умолчанию — /var/tmp , но её можно изменить в основном файле config.yaml ( logging > dir parameter ). Рекомендуется изменить log > level на info перед отправкой файлов журналов в службу поддержки Apigee Edge .
  • Файл конфигурации : Основная конфигурация Edge Microgateway находится в YAML-файле в папке Edge Microgateway по умолчанию, $HOME/.edgemicro . Существует файл конфигурации по умолчанию под названием default.yaml , а также по одному файлу для каждой среды: ORG - ENV - config.yaml . Загрузите этот файл полностью для затронутой организации и среды.

    Справочные документы

    Настройте пользовательский интерфейс Edge для использования TLS для доступа к API Edge.