Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Симптом
Клиентское приложение получает HTTP-статус 503 Service Unavailable с кодом ошибки messaging.adaptors.http.flow.SslHandshakeFailed в ответ на вызовы API.
Сообщение об ошибке
Клиентское приложение получает следующий код ответа:
HTTP/1.1 503 Service Unavailable
Кроме того, вы можете увидеть следующее сообщение об ошибке:
{
"fault":{
"faultstring":"SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target",
"detail":{
"errorcode":"messaging.adaptors.http.flow.SslHandshakeFailed"
}
}
}Возможные причины
В результате сбоя в процессе SSL-рукопожатия между обработчиком сообщений Apigee Edge и бэкэнд-сервером по ряду причин может появиться код состояния 503 Service Unavailable с кодом ошибки messaging.adaptors.http.flow.SslHandshakeFailed . Сообщение об ошибке в faultstring Как правило, это указывает на возможную причину высокого уровня, которая привела к этой ошибке.
В зависимости от сообщения об ошибке, обнаруженного в faultstring , необходимо использовать соответствующие методы для устранения проблемы. В этом руководстве объясняется, как устранить эту ошибку, если вы видите сообщение об ошибке SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target в faultstring .
Эта ошибка возникает в процессе установления SSL-соединения между обработчиком сообщений Apigee Edge и бэкэнд-сервером:
- Если хранилище доверенных сертификатов обработчика сообщений Apigee Edge:
- Содержит цепочку сертификатов, которая не соответствует полной цепочке сертификатов бэкэнд-сервера, ИЛИ
- Не содержит полную цепочку сертификатов бэкэнд-сервера.
- Если цепочка сертификатов предоставлена бэкэнд-сервером:
- Содержит полное доменное имя (FQDN), которое не соответствует имени хоста, указанному в целевой конечной точке.
- Содержит некорректную или неполную цепочку сертификатов.
Возможные причины этой проблемы следующие:
| Причина | Описание | Инструкции по устранению неполадок, применимые для |
|---|---|---|
| Некорректный/неполный сертификат или цепочка сертификатов в хранилище доверенных сертификатов обработчика сообщений. | Сертификат и/или его цепочка, хранящиеся в хранилище доверенных сертификатов обработчика сообщений Apigee Edge, не соответствуют цепочке сертификатов бэкэнд-сервера или не содержат полную цепочку сертификатов бэкэнд-сервера. | Пользователи частных и публичных облачных решений на периферии сети |
| Несоответствие полного доменного имени (FQDN) в сертификате бэкэнд-сервера и имени хоста в целевой конечной точке. | Сертификат, предоставленный бэкэнд-сервером, содержит полное доменное имя (FQDN), которое не соответствует имени хоста, указанному в целевой конечной точке. | Пользователи частных и публичных облачных решений на периферии сети |
| Некорректный/неполный сертификат или цепочка сертификатов, предоставленные бэкэнд-сервером. | Представленная серверной частью цепочка сертификатов либо некорректна, либо неполна. | Пользователи частных и публичных облачных решений на периферии сети |
Общие этапы диагностики
Для диагностики этой ошибки воспользуйтесь одним из следующих инструментов/методов:
Мониторинг API
Процедура №1: Использование мониторинга API
Для диагностики ошибки с помощью мониторинга API:
- Войдите в пользовательский интерфейс Apigee Edge под учетной записью пользователя с соответствующей ролью .
Переключитесь на организацию, в которой вы хотите расследовать проблему.

- Перейдите на страницу Анализ > Мониторинг API > Исследование .
- Выберите конкретный временной промежуток, в течение которого вы наблюдали ошибки.
Постройте график зависимости кода ошибки от времени .
Выберите ячейку с кодом ошибки
messaging.adaptors.http.flow.SslHandshakeFailed, как показано ниже:( Посмотреть увеличенное изображение )

Информация об ошибке с кодом
messaging.adaptors.http.flow.SslHandshakeFailedотображается следующим образом:( Посмотреть увеличенное изображение )

Нажмите «Просмотреть журналы» и разверните строку с неудачным запросом.
( Посмотреть увеличенное изображение )

- В окне «Журналы» обратите внимание на следующие сведения:
- Идентификатор сообщения запроса
- Код состояния:
503 - Источник неисправности:
target - Код ошибки:
messaging.adaptors.http.flow.SslHandshakeFailed
След
Процедура №2: Использование инструмента трассировки
Для диагностики ошибки с помощью инструмента трассировки:
- Включите сеанс трассировки и либо
- Дождитесь появления ошибки
503 Service Unavailableс кодом ошибкиmessaging.adaptors.http.flow.SslHandshakeFailedили - Если вы можете воспроизвести проблему, выполните вызов API для воспроизведения ошибки
503 Service Unavailable
- Дождитесь появления ошибки
Убедитесь, что параметр «Показывать все FlowInfos» включен:

- Выберите один из запросов, завершившихся неудачей, и изучите трассировку.
- Проследите за различными этапами трассировки и определите место возникновения сбоя.
Ошибка обычно возникает после этапа "Начался поток целевого запроса" , как показано ниже:
( Посмотреть увеличенное изображение )

- Обратите внимание на следующие значения из трассировки:
- Ошибка:
SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target - error.cause:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target - error.class:
com.apigee.errors.http.server.ServiceUnavailableException - Значение ошибки
SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetуказывает на то, что SSL Handshake завершился неудачей, поскольку обработчик сообщений Apigee Edge не смог проверить сертификат бэкэнд-сервера.
- Ошибка:
- Перейдите к этапу AX (Analytics Data Recorded) в трассировке и щелкните по нему.
Прокрутите вниз до раздела «Заголовки ошибок в подробностях этапа» и определите значения X-Apigee-fault-code , X-Apigee-fault-source и X-Apigee-Message-ID, как показано ниже:
( Посмотреть увеличенное изображение )

- Обратите внимание на значения X-Apigee-fault-code , X-Apigee-fault-source и X-Apigee-Message-ID :
| Заголовки ошибок | Ценить |
|---|---|
| X-Apigee-fault-code | messaging.adaptors.http.flow.SslHandshakeFailed |
| X-Apigee-fault-source | target |
| X-Apigee-Message-ID | MESSAGE_ID |
NGINX
Процедура №3: Использование журналов доступа NGINX
Для диагностики ошибки с помощью журналов доступа NGINX:
- Если вы используете частное облако , то можете использовать журналы доступа NGINX для получения ключевой информации об ошибке HTTP
503 Service Unavailable. Проверьте журналы доступа NGINX:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log- Проверьте, были ли какие-либо ошибки
503с кодом ошибкиmessaging.adaptors.http.flow.SslHandshakeFailedза определенный период времени (если проблема возникала ранее) или есть ли запросы, которые по-прежнему завершаются с ошибкой503. Если вы обнаружите ошибки
503с кодом X-Apigee-fault-code, соответствующим значениюmessaging.adaptors.http.flow.SslHandshakeFailed, определите значение X-Apigee-fault-source.Пример ошибки 503 из журнала доступа NGINX:
( Посмотреть увеличенное изображение )

Приведенная выше запись из журнала доступа NGINX содержит следующие значения для X-Apigee-fault-code и X-Apigee-fault-source:
Заголовки Ценить X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailedX-Apigee-fault-source target
Журналы обработчика сообщений
Процедура №4: Использование журналов процессора сообщений
- Определите идентификатор сообщения одного из запросов, завершившихся с ошибкой, используя мониторинг API, инструмент трассировки или журналы доступа NGINX, как описано в разделе «Общие шаги диагностики» .
Найдите идентификатор конкретного сообщения запроса в журнале обработчика сообщений (
/opt/apigee/var/log/edge-message-processor/logs/system.log). Вы можете увидеть следующую ошибку:org:myorg env:test api:MyProxy rev:1
messageid:myorg-28247-3541813-1NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context.handshakeFailed() : SSLClientChannel[Connected: Remote:X.X.X.X:443 Local:192.168.194.140:55102]@64596 useCount=1 bytesRead=0 bytesWritten=0 age=233ms lastIO=233ms isOpen=true handshake failed, message: General SSLEngine problemУказанная выше ошибка свидетельствует о сбое SSL-рукопожатия между обработчиком сообщений и серверной частью.
Затем возникнет исключение с подробным трассировочным стеком, как показано ниже:
org:myorg env:test api:MyProxy rev:1
messageid:myorg-28247-3541813-1NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - RequestWriteListener.onException() : RequestWriteListener.onException(HTTPRequest@1522922c) javax.net.ssl.SSLHandshakeException: General SSLEngine problem at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1478) at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535) ... <snipped> Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem at sun.security.ssl.Alerts.getSSLException(Alerts.java:203) at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1728) ... <snipped>Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetat sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397) at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302) ... <snipped>Обратите внимание, что сбой при установлении соединения произошел по следующей причине:
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetЭто указывает на то, что SSL-рукопожатие не удалось, поскольку обработчик сообщений Apigee Edge не смог проверить сертификат бэкэнд-сервера.
Причина: Некорректный/неполный сертификат или цепочка сертификатов в хранилище доверенных сертификатов обработчика сообщений.
Диагноз
- Определите код ошибки и источник ошибки, используя мониторинг API, инструмент трассировки или журналы доступа NGINX, как описано в разделе «Общие шаги диагностики» .
- Если код ошибки равен
messaging.adaptors.http.flow.SslHandshakeFailed, то для определения сообщения об ошибке используйте один из следующих методов: - Найдите причину ошибки с помощью инструмента трассировки, как описано в разделе «Общие шаги диагностики».
- Найдите исключение, используя журналы обработчика сообщений, как описано в разделе «Общие шаги диагностики».
- Найдите
faultstringв ответе на ваш API-запрос, как показано в сообщении об ошибке. - Если сообщение об ошибке выглядит так
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target", это означает, что SSL-рукопожатие не удалось, поскольку обработчик сообщений Apigee Edge не смог проверить сертификат бэкэнд-сервера.
Отладку этой проблемы можно провести в два этапа:
- Этап 1: Определение цепочки сертификатов бэкэнд-сервера.
- Этап 2: Сравните цепочку сертификатов, хранящуюся в хранилище доверенных сертификатов обработчика сообщений.
Фаза 1
Этап 1: Определение цепочки сертификатов бэкэнд-сервера.
Для определения цепочки сертификатов бэкэнд-сервера используйте один из следующих методов:
openssl
Выполните команду openssl , указав имя хоста на бэкэнд-сервере, следующим образом:
openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#
Обратите внимание на цепочку сертификатов из вывода указанной выше команды:
Пример цепочки сертификатов бэкэнд-сервера из вывода команды openssl:
Certificate chain 0 s:/CN=mocktarget.apigee.net i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4 1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1 2 s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
tcpdump
- Если вы используете публичное облако , то перехватывайте TCP/IP-пакеты на бэкэнд-сервере.
- Если вы используете частное облако , то можете перехватывать TCP/IP-пакеты на бэкэнд-сервере или в обработчике сообщений. Предпочтительно перехватывать их на бэкэнд-сервере, поскольку расшифровка пакетов происходит именно там.
Для захвата TCP/IP-пакетов используйте следующую команду tcpdump :
tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
Проанализируйте TCP/IP-пакеты с помощью инструмента Wireshark или аналогичного инструмента, с которым вы знакомы.
Пример анализа Tcpdump
( Посмотреть увеличенное изображение )

- Пакет № 43: Обработчик сообщений (Источник) отправил сообщение
Client Helloна серверную часть (Назначение). - Пакет № 44: Серверная часть подтверждает получение сообщения
Client Helloот обработчика сообщений. - Пакет № 45: Сервер отправляет сообщение
Server Helloвместе со своим сертификатом. - Пакет № 46: Обработчик сообщений подтверждает получение сообщения
Server Helloи сертификата. Пакет № 47: В пакете № 48 процессор сообщений отправляет сообщение
FIN, ACKза которым следуетRST, ACK.Это указывает на то, что проверка сертификата бэкэнд-сервера обработчиком сообщений завершилась неудачей. Это происходит потому, что у обработчика сообщений нет сертификата, соответствующего сертификату бэкэнд-сервера, или он не может доверять сертификату бэкэнд-сервера среди сертификатов, имеющихся в его (обработчика сообщений) хранилище доверенных сертификатов.
Вы можете вернуться и просмотреть пакет № 45 , чтобы определить цепочку сертификатов, отправленную бэкэнд-сервером.
( Посмотреть увеличенное изображение )

- В этом примере видно, что сервер отправил конечный сертификат с
common name (CN) = mocktarget.apigee.net, за которым следует промежуточный сертификат сCN= GTS CA 1D4и корневой сертификат сCN = GTX Root R1.
Если вы установили, что проверка сертификата сервера не удалась, перейдите к этапу 2: сравните сертификат бэкэнд-сервера с сертификатами, хранящимися в хранилище доверенных сертификатов обработчика сообщений .
- Пакет № 43: Обработчик сообщений (Источник) отправил сообщение
Фаза 2
Этап 2: Сравните сертификат бэкэнд-сервера с сертификатами, хранящимися в хранилище доверенных сертификатов обработчика сообщений.
- Определите цепочку сертификатов бэкэнд-сервера .
- Определите сертификат, хранящийся в хранилище доверенных сертификатов обработчика сообщений, выполнив следующие шаги:
Получите имя ссылки на хранилище доверенных сертификатов из элемента
TrustStoreв разделеSSLInfoвTargetEndpoint.Рассмотрим пример раздела
SSLInfoв конфигурацииTargetEndpoint:<TargetEndpoint name="default"> ... <HTTPTargetConnection> <Properties /> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>ref://myKeystoreRef</KeyStore> <KeyAlias>myKey</KeyAlias> <TrustStore> ref://myCompanyTrustStoreRef </TrustStore> </SSLInfo> </HTTPTargetConnection> ... </TargetEndpoint>- В приведенном выше примере имя ссылки
TrustStore—myCompanyTruststoreRef. В пользовательском интерфейсе Edge выберите «Среды» > «Ссылки» . Запишите имя в столбце «Ссылка» для конкретной ссылки на хранилище доверенных сертификатов. Это будет имя вашего хранилища доверенных сертификатов.
( Посмотреть увеличенное изображение )

В приведенном выше примере имя хранилища доверенных сертификатов следующее:
myCompanyTruststoreRef :
myCompanyTruststore
Получите сертификаты, хранящиеся в хранилище доверенных сертификатов (определенном на предыдущем шаге), используя следующие API:
Получить все сертификаты для хранилища ключей или хранилища доверенных сертификатов . Этот API отображает список всех сертификатов в конкретном хранилище доверенных сертификатов.
Пользователь публичного облака:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
Пользователь частного облака:
curl -v -X GET http://MANAGEMENT_HOST:PORT_#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
Где:
- ORGANIZATION_NAME — это название организации.
- ENVIRONMENT_NAME — это имя среды.
- KEYSTORE_NAME — это имя хранилища ключей.
- Переменная $TOKEN устанавливается в значение вашего токена доступа OAuth 2.0, как описано в разделе «Получение токена доступа OAuth 2.0».
- Параметры
curl, используемые в этом примере, описаны в разделе «Использование curl».
Пример выходных данных:
В качестве примеров сертификатов для хранилища доверенных
myCompanyTruststoreиспользуются следующие:[ "serverCert" ]
- Получение сведений о конкретном сертификате из хранилища ключей или хранилища доверенных сертификатов . Этот API возвращает информацию о конкретном сертификате в конкретном хранилище доверенных сертификатов.
Пользователь публичного облака:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs/CERT_NAME -H "Authorization: Bearer $TOKEN"
Пользователь частного облака
curl -v -X GET http://MANAGEMENT_HOST:PORT_#>/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs/CERT_NAME -H "Authorization: Bearer $TOKEN"
Где:
- ORGANIZATION_NAME — это название организации.
- ENVIRONMENT_NAME — это имя среды.
- KEYSTORE_NAME — это имя хранилища ключей.
- CERT_NAME — это имя сертификата.
- Переменная $TOKEN устанавливается в значение вашего токена доступа OAuth 2.0, как описано в разделе «Получение токена доступа OAuth 2.0».
- Параметры
curl, используемые в этом примере, описаны в разделе «Использование curl».
Пример выходных данных
В подробной информации о
serverCertуказаны субъект и издатель следующим образом:Сертификат Leaf/Entity:
"subject": "CN=mocktarget.apigee.net", "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
Сертификат о прохождении промежуточного курса:
"subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US", "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
Убедитесь, что фактический сертификат сервера, полученный на шаге 1, и сертификат, хранящийся в хранилище доверенных сертификатов, полученный на шаге 3, совпадают. Если они не совпадают, то это и является причиной проблемы.
Рассмотрим по одному сертификату из приведенного выше примера:
- Сертификат листа:
С серверной части:
s:/CN=mocktarget.apigee.net i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
Из хранилища доверенных сертификатов обработчика сообщений (клиента):
"subject": "CN=mocktarget.apigee.net", "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
Конечный сертификат, хранящийся в хранилище доверенных сертификатов, совпадает с сертификатом бэкэнд-сервера.
- Сертификат о прохождении промежуточного курса:
С серверной части:
s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
Из хранилища доверенных сертификатов обработчика сообщений (клиента):
"subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US", "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
Промежуточный сертификат, хранящийся в хранилище доверенных сертификатов, соответствует сертификату бэкэнд-сервера.
- Корневой сертификат:
С серверной части:
s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
В хранилище доверенных сертификатов обработчика сообщений полностью отсутствует корневой сертификат.
Поскольку корневой сертификат отсутствует в хранилище доверенных сертификатов, обработчик сообщений выдает следующее исключение:
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
и возвращает клиентским приложениям
503 Service Unavailableс кодом ошибкиmessaging.adaptors.http.flow.SslHandshakeFailed.
- Сертификат листа:
Разрешение
- Убедитесь, что у вас имеется корректная и полная цепочка сертификатов бэкэнд-сервера.
- Если вы являетесь пользователем публичного облака , следуйте инструкциям в разделе «Обновление TLS-сертификата для облака» , чтобы обновить сертификат в хранилище доверенных сертификатов обработчика сообщений Apigee Edge.
- Если вы используете частное облако , следуйте инструкциям в разделе «Обновление TLS-сертификата для частного облака» , чтобы обновить сертификат в соответствии с хранилищем доверенных сертификатов обработчика сообщений Apigee Edge.
Причина: Несоответствие полного доменного имени (FQDN) в сертификате бэкэнд-сервера и имени хоста в целевой конечной точке.
Если серверная часть предоставляет цепочку сертификатов, содержащую полное доменное имя (FQDN), которое не соответствует имени хоста, указанному в целевой конечной точке, то процесс обработки сообщений Apigee Edge возвращает ошибку SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target .
Диагноз
- Проверьте конкретную целевую конечную точку в API-прокси, где вы наблюдаете эту ошибку, и запишите имя хоста бэкэнд-сервера:
Пример целевой конечной точки:
<TargetEndpoint name="default"> … <HTTPTargetConnection> <Properties /> <SSLInfo> <Enabled>true</Enabled> <TrustStore>ref://myTrustStoreRef</TrustStore> </SSLInfo> <URL>https://backend.company.com/resource</URL> </HTTPTargetConnection> </TargetEndpoint>В приведенном выше примере имя хоста бэкэнд-сервера —
backend.company.com. Определите полное доменное имя (FQDN) в сертификате бэкэнд-сервера с помощью команды
openssl, как показано ниже:openssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
Например:
openssl s_client -connect backend.company.com:443
Изучите раздел
Certificate chainи обратите внимание на полное доменное имя (FQDN), указанное в составе CN в теме конечного сертификата.Certificate chain 0 s:/
CN=backend.apigee.neti:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4 1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1 2 s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1В приведенном выше примере полное доменное имя бэкэнд-сервера —
backend.apigee.net.- Если имя хоста бэкэнд-сервера, полученное на шаге 1, и полное доменное имя (FQDN), полученное на шаге 2, не совпадают, то это и является причиной ошибки.
- В приведенном выше примере имя хоста в целевой конечной точке —
backend.company. com. Однако полное доменное имя (FQDN) в сертификате бэкэнд-сервера —backend.apigee. net. Поскольку они не совпадают, возникает эта ошибка.
Разрешение
Эту проблему можно решить одним из следующих способов:
Правильное полное доменное имя (FQDN)
Обновите хранилище ключей на бэкэнд-сервере, указав правильное полное доменное имя (FQDN) и действительную и полную цепочку сертификатов:
- Если у вас нет сертификата бэкэнд-сервера с правильным полным доменным именем (FQDN), получите соответствующий сертификат у уполномоченного центра сертификации (CA).
Убедитесь, что у вас имеется действительная и полная цепочка сертификатов бэкэнд-сервера .
- После того как у вас будет действительная и полная цепочка сертификатов с правильным полным доменным именем (FQDN) бэкэнд-сервера в конечном сертификате или сертификате сущности, идентичным имени хоста, указанному в целевой конечной точке, обновите хранилище ключей бэкэнда, указав полную цепочку сертификатов.
Правильный сервер бэкэнда
Обновите целевую конечную точку, указав правильное имя хоста бэкэнд-сервера:
- Если в целевой конечной точке было неверно указано имя хоста, обновите целевую конечную точку, указав правильное имя хоста, соответствующее полному доменному имени (FQDN) в сертификате бэкэнд-сервера.
Сохраните изменения в API-прокси.
В приведенном выше примере, если имя хоста бэкэнд-сервера было указано неверно, вы можете исправить это, используя полное доменное имя (FQDN) из сертификата бэкэнд-сервера, а именно
backend.apigee.net, следующим образом:<TargetEndpoint name="default"> … <HTTPTargetConnection> <Properties /> <SSLInfo> <Enabled>true</Enabled> <TrustStore>ref://myTrustStoreRef</TrustStore> </SSLInfo> <URL>https://backend.apigee.net/resource</URL> </HTTPTargetConnection> </TargetEndpoint>
Причина: Некорректный/неполный сертификат или цепочка сертификатов, предоставленные бэкэнд-сервером.
Диагноз
- Получите цепочку сертификатов бэкэнд-сервера, выполнив команду
opensslпо имени хоста бэкэнд-сервера следующим образом:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
Обратите внимание на
Certificate chain, полученную из результата выполнения указанной выше команды.Пример цепочки сертификатов бэкэнд-сервера из вывода команды openssl:
Certificate chain 0 s:/
CN=mocktarget.apigee.neti:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4 1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1 - Убедитесь, что у вас имеется правильная и полная цепочка сертификатов, как описано в разделе «Проверка цепочки сертификатов» .
Если у вас отсутствует действительная и полная цепочка сертификатов для бэкэнд-сервера, то это и является причиной проблемы.
В приведенной выше цепочке сертификатов серверной части отсутствует корневой сертификат. Поэтому возникает эта ошибка.
Разрешение
Обновите хранилище ключей на бэкэнд-сервере, указав действительную и полную цепочку сертификатов:
Убедитесь, что у вас имеется действительная и полная цепочка сертификатов бэкэнд-сервера .
- Обновите действительную и полную цепочку сертификатов в хранилище ключей бэкэнд-сервера .
Если проблема сохраняется, перейдите к разделу «Необходимо собрать диагностическую информацию» .
Необходимо собрать диагностическую информацию.
Если проблема сохраняется даже после выполнения вышеуказанных инструкций, соберите следующую диагностическую информацию и обратитесь в службу поддержки Apigee Edge :
- Если вы являетесь пользователем публичного облака , предоставьте следующую информацию:
- Название организации
- Название среды
- Имя API-прокси
- Выполните команду
curlдля воспроизведения ошибки. - Файл трассировки, демонстрирующий ошибку.
Вывод команды
openssl:openssl s_client -connect BACKEND_SERVER_HOST_NAME : PORT_#- TCP/IP-пакеты, перехваченные на бэкэнд-сервере.
- Если вы являетесь пользователем частного облака , предоставьте следующую информацию:
- Полное сообщение об ошибке
- пакет API-прокси
- Файл трассировки, демонстрирующий ошибку.
- Журналы обработчика сообщений
/opt/apigee/var/log/edge-message-processor/logs/system.log - Вывод команды
openssl:
openssl s_client -connect BACKEND_SERVER_HOST_NAME : PORT_# - TCP/IP-пакеты, перехваченные на бэкэнд-сервере или в обработчике сообщений.
- Результат выполнения команды Get all certificates for a keystore or truststore API, а также подробная информация о каждом сертификате, полученная с помощью команды Get Cert Details from a Keystore or Truststore API.
Ссылки
- Цепочка сертификатов доверия
- Команда OpenSSL