Вы просматриваете документацию по 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, скорее всего, получил самозаверяющий сертификат от целевого сервера. Вот как убедиться, что это условие выполнено:
- Выполните следующую команду
openssl, чтобы проверить цепочку сертификатов целевого сервера:echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
-
Если цепочка сертификатов целевого сервера действительно самозаверяющая, то это и является причиной проблемы.
В примере ниже целевой сервер предоставляет самоподписанный сертификат:
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
Разрешение
- Обратитесь к команде, которая управляет целевым сервером, чтобы получить действительный сертификат TLS, подписанный доверенным центром сертификации (ЦС).
Если это невозможно, воспользуйтесь одним из следующих вариантов, чтобы разрешить самоподписанные сертификаты в Edge Microgateway.
Вариант 1. Задайте системное свойство, чтобы Edge Microgateway доверял всем сертификатам
- Если вы используете Docker, ознакомьтесь с разделом Использование ЦС, которому не доверяет Node.js.
В противном случае экспортируйте переменную среды с именем
NODE_EXTRA_CA_CERTS, указывающую на файл корневого ЦС.Подробную информацию можно найти на официальном сайте Node.js.
Вариант 2. Настройте файл конфигурации YAML Edge Microgateway, чтобы доверять определенному сертификату для целевого сервера
- Убедитесь, что у вас есть сертификат целевого сервера (или цепочка сертификатов) в формате PEM. Чтобы преобразовать сертификаты других форматов в PEM, следуйте инструкциям в разделе Преобразование сертификатов в поддерживаемый формат.
Если есть цепочка сертификатов, убедитесь, что они расположены в правильном порядке. Сначала должен идти конечный сертификат, затем промежуточный, а потом корневой. Подробнее об этом рассказывается в разделе Проверка цепочки сертификатов.
В примере ниже показано, как настроить файл доверенного центра сертификации для
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' }диагностика;
- В этом случае сервер управления (
management.apigee-dev.net) может возвращать самозаверяющий сертификат TLS. - Скорее всего, сертификат предоставил системный администратор Apigee Edge, и у него есть его копия.
- В противном случае выполните следующую команду, чтобы получить информацию о сертификате:
echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
- Если на сервере управления используется самозаверяющий сертификат, это и является причиной проблемы.
Разрешение
- Обратитесь к команде, которая управляет целевым сервером, чтобы получить действительный сертификат TLS, подписанный доверенным центром сертификации (ЦС).
Если это невозможно, выполните следующие действия, чтобы разрешить самозаверяющие сертификаты в Edge Microgateway.
- Задайте системное свойство, чтобы Edge Microgateway доверял всем сертификатам.
- Если вы используете Docker, ознакомьтесь с разделом Использование ЦС, которому не доверяет Node.js.
- В противном случае экспортируйте переменную среды с именем
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