Вы просматриваете документацию 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.SslHandshakeFailed
X-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-1
NIOThread@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-1
NIOThread@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 target
at 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.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В приведенном выше примере полное доменное имя внутреннего сервера —
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.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 - Убедитесь, что у вас есть правильная и полная цепочка сертификатов, как описано в разделе «Проверка цепочки сертификатов» .
Если у вас нет действительной и полной цепочки сертификатов для внутреннего сервера, это и есть причина этой проблемы.
В приведенном выше примере цепочки сертификатов внутреннего сервера корневой сертификат отсутствует. Поэтому вы получаете эту ошибку.
Разрешение
Обновите хранилище ключей внутреннего сервера, указав действительную и полную цепочку сертификатов:
Убедитесь, что у вас есть действительная и полная цепочка сертификатов внутреннего сервера .
- Обновите действительную и полную цепочку сертификатов в хранилище ключей внутреннего сервера .
Если проблема не устранена, перейдите к разделу «Необходимо собрать диагностическую информацию» .
Необходимо собрать диагностическую информацию
Если проблема не устранена даже после выполнения приведенных выше инструкций, соберите следующую диагностическую информацию и обратитесь в службу поддержки 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