Вы просматриваете документацию 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, скорее всего, получил самозаверяющий сертификат от целевого сервера. Чтобы убедиться в этом, выполните следующие действия:
- Запустите следующую команду
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
, указывающую на корневой файл CA.Это задокументировано на официальном сайте Node.js.
Вариант № 2. Настройте файл конфигурации YAML Edge Microgateway, чтобы доверять этому конкретному сертификату для этого целевого сервера.
- Убедитесь, что у вас есть сертификат (или цепочка) целевого сервера в формате PEM. Чтобы преобразовать другие форматы сертификатов в PEM, следуйте инструкциям в разделе Преобразование сертификатов в поддерживаемый формат .
Если существует цепочка сертификатов, убедитесь, что сертификаты расположены в правильном порядке. Листовой сертификат всегда должен быть первым, за ним следует промежуточный сертификат, а затем корневой сертификат. Более подробное объяснение можно найти в разделе «Проверка цепочки сертификатов» .
В следующем примере мы настроили доверенный файл 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' }
Диагностика
- В этом случае Сервер управления (
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 для доступа к Edge API.