Вы просматриваете документацию 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, скорее всего, получил самоподписанный сертификат от целевого сервера. Для подтверждения этого выполните следующие действия:
- Выполните следующую команду
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-сертификат, подписанный доверенным центром сертификации (CA).
Если это невозможно, рассмотрите один из следующих вариантов, позволяющих использовать самоподписанные сертификаты в Edge Microgateway.
Вариант №1: Установите системное свойство, разрешающее Edge Microgateway доверять всем сертификатам.
- Если вы используете Docker , обратитесь к разделу «Использование центра сертификации, которому Node.js не доверяет».
В противном случае, экспортируйте переменную среды с именем
NODE_EXTRA_CA_CERTS, указывающую на корневой файл центра сертификации.Это задокументировано на официальном сайте Node.js.
Вариант №2: Настройте конфигурационный файл Edge Microgateway в формате YAML таким образом, чтобы он доверял конкретному сертификату для целевого сервера.
- Убедитесь, что сертификат (или цепочка) целевого сервера находится в формате 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-сертификат, подписанный доверенным центром сертификации (CA).
Если это невозможно, выполните следующие действия, чтобы разрешить использование самоподписанных сертификатов в Edge Microgateway.
- Установите системное свойство, разрешающее Edge Microgateway доверять всем сертификатам.
- Если вы используете Docker , обратитесь к разделу «Использование центра сертификации, которому Node.js не доверяет».
- В противном случае, экспортируйте переменную окружения с именем
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.