502 Bad Gateway - Self-signed certificate in chain (502 Ошибка шлюза – сертификат с собственной подписью в цепочке)

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

Symptom

Клиентское приложение получает код 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 проверит сертификат целевого сервера и, если он не будет доверенным, вызовет ошибку времени выполнения. Пользователи общедоступного и частного облака Edge
Сервер управления 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, подписанный доверенным центром сертификации (ЦС).
  2. Если это невозможно, воспользуйтесь одним из следующих вариантов, чтобы разрешить самоподписанные сертификаты в Edge Microgateway.

    Вариант 1. Задайте системное свойство, чтобы Edge Microgateway доверял всем сертификатам

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

      Подробную информацию можно найти на официальном сайте Node.js.

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

    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, подписанный доверенным центром сертификации (ЦС).
  2. Если это невозможно, выполните следующие действия, чтобы разрешить самозаверяющие сертификаты в Edge Microgateway.

  3. Задайте системное свойство, чтобы Edge Microgateway доверял всем сертификатам.
  4. Если вы используете Docker, ознакомьтесь с разделом Использование ЦС, которому не доверяет Node.js.
  5. В противном случае экспортируйте переменную среды с именем NODE_EXTRA_CA_CERTS, указывающую на файл корневого ЦС.Подробная информация приведена на официальном сайте 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