Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Симптом
Клиентское приложение получает код состояния 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"
}
}
}Возможные причины
Вы можете получить код состояния 503 Service Unavailable с кодом ошибки messaging.adaptors.http.flow.SslHandshakeFailed из-за сбоя во время процесса установления связи SSL между процессором сообщений Apigee Edge и внутренним сервером по ряду причин. Сообщение об ошибке в 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, не соответствуют цепочке сертификатов внутреннего сервера или не содержат полную цепочку сертификатов внутреннего сервера. | Пользователи Edge частного и публичного облака |
| Несоответствие полного доменного имени в сертификате внутреннего сервера и имени хоста в целевой конечной точке. | Сертификат, представленный внутренним сервером, содержит полное доменное имя, не соответствующее имени хоста, указанному в целевой конечной точке. | Пользователи Edge частного и публичного облака |
| Неправильный/неполный сертификат или цепочка сертификатов, представленная внутренним сервером. | Цепочка сертификатов, представленная внутренним сервером, неверна или неполна. | Пользователи Edge частного и публичного облака |
Общие этапы диагностики
Для диагностики этой ошибки используйте один из следующих инструментов/методов:
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 (записанные аналитические данные) в трассировке и щелкните его.
Прокрутите вниз до раздела «Заголовки ошибок сведений о фазе» и определите значения 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-код неисправности | messaging.adaptors.http.flow.SslHandshakeFailed |
| X-Apigee-источник-ошибки | target |
| X-Apigee-Message-ID | MESSAGE_ID |
НГИНКС
Процедура №3: Использование журналов доступа NGINX
Чтобы диагностировать ошибку с помощью журналов доступа NGINX:
- Если вы являетесь пользователем частного облака , вы можете использовать журналы доступа NGINX для определения ключевой информации о
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-код неисправности messaging.adaptors.http.flow.SslHandshakeFailedX-Apigee-источник-ошибки 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 на внутреннем сервере или процессоре сообщений. Предпочтительно перехватывать их на внутреннем сервере, поскольку пакеты расшифровываются на внутреннем сервере.
Используйте следующую команду tcpdump для захвата пакетов TCP/IP:
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: процессор сообщений отправляет сообщение
FIN, ACK, за которым следуютRST, ACKв пакете № 48 .Это означает, что проверка сертификата внутреннего сервера процессором сообщений не удалась. Это связано с тем, что процессор сообщений не имеет сертификата, соответствующего сертификату внутреннего сервера, или не может доверять сертификату внутреннего сервера сертификатам, доступным в его хранилище доверенных сертификатов (процессора сообщений).
Вы можете вернуться и просмотреть пакет № 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, используемые в этом примере, описаны в разделе «Использование завитка».
Пример вывода:
Сертификаты из примера хранилища доверенных сертификатов
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, используемые в этом примере, описаны в разделе «Использование завитка».
Пример вывода
Подробная информация о
serverCertпоказывает субъект и эмитента следующим образом:Сертификат листа/субъекта:
"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.
Причина: несоответствие полного доменного имени в сертификате внутреннего сервера и имени хоста в целевой конечной точке.
Если внутренний сервер представляет цепочку сертификатов, содержащую полное доменное имя, которое не соответствует имени хоста, указанному в целевой конечной точке, то процесс сообщений 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:
<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. Определите полное доменное имя в сертификате внутреннего сервера с помощью команды
openssl, как показано ниже:openssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
Например:
openssl s_client -connect backend.company.com:443
Изучите раздел
Certificate chainи обратите внимание на полное доменное имя, указанное как часть 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, и полное доменное имя, полученное на шаге 2, не совпадают, это и есть причина ошибки.
- В приведенном выше примере имя хоста в целевой конечной точке —
backend.company. com. Однако полное доменное имя в сертификате внутреннего сервера —backend.apigee. net. Поскольку они не совпадают, вы получаете эту ошибку.
Разрешение
Эту проблему можно решить одним из следующих способов:
Правильное полное доменное имя
Обновите хранилище ключей внутреннего сервера, указав правильное полное доменное имя, действительную и полную цепочку сертификатов:
- Если у вас нет сертификата внутреннего сервера с правильным полным доменным именем, приобретите соответствующий сертификат в соответствующем центре сертификации (центр сертификации).
Убедитесь, что у вас есть действительная и полная цепочка сертификатов внутреннего сервера .
- Получив действительную и полную цепочку сертификатов с правильным полным доменным именем внутреннего сервера в листовом сертификате или сертификате объекта, идентичном имени узла, указанному в целевой конечной точке, обновите хранилище ключей серверной части , указав полную цепочку сертификатов.
Правильный серверный сервер
Обновите целевую конечную точку, указав правильное имя хоста внутреннего сервера:
- Если имя узла было неверно указано в целевой конечной точке, обновите целевую конечную точку, чтобы она имела правильное имя узла, соответствующее полному доменному имени в сертификате внутреннего сервера.
Сохраните изменения в прокси API.
В приведенном выше примере, если имя хоста внутреннего сервера было указано неправильно, вы можете исправить это, используя полное доменное имя из сертификата внутреннего сервера, то есть
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 :
- Если вы являетесь пользователем Public Cloud , предоставьте следующую информацию:
- Название организации
- Имя среды
- Имя 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, захватываемые внутренним сервером или процессором сообщений.
- Вывод команды «Получить все сертификаты для API хранилища ключей или хранилища доверенных сертификатов», а также сведения о каждом сертификате, полученном с помощью API хранилища ключей или хранилища доверенных сертификатов .
Ссылки
- Сертификат Цепочка доверия
- команда OpenSSL