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

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

Симптом

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

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

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

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

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 проверит сертификат целевого сервера, и, если он не является доверенным, выдаст ошибку времени выполнения. Пользователи Edge Public и Private Cloud
Сервер управления Apigee Edge использует самозаверяющий сертификат. При первой настройке 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 , указывающую на корневой файл CA.

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

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

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

      В следующем примере мы настроили доверенный файл CA для 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 для доступа к Edge API.