503 Служба недоступна — ошибка рукопожатия SSL

Вы просматриваете документацию 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:

  1. Войдите в пользовательский интерфейс Apigee Edge под учетной записью пользователя с соответствующей ролью .
  2. Переключитесь на организацию, в которой вы хотите расследовать проблему.

  3. Перейдите на страницу Анализ > Мониторинг API > Исследование .
  4. Выберите конкретный временной промежуток, в течение которого вы наблюдали ошибки.
  5. Постройте график зависимости кода ошибки от времени .

  6. Выберите ячейку с кодом ошибки messaging.adaptors.http.flow.SslHandshakeFailed , как показано ниже:

    ( Посмотреть увеличенное изображение )

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

    ( Посмотреть увеличенное изображение )

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

    ( Посмотреть увеличенное изображение )

  9. В окне «Журналы» обратите внимание на следующие сведения:
    • Идентификатор сообщения запроса
    • Код состояния: 503
    • Источник неисправности: target
    • Код ошибки: messaging.adaptors.http.flow.SslHandshakeFailed

След

Процедура №2: Использование инструмента трассировки

Для диагностики ошибки с помощью инструмента трассировки:

  1. Включите сеанс трассировки и либо
    • Дождитесь появления ошибки 503 Service Unavailable с кодом ошибки messaging.adaptors.http.flow.SslHandshakeFailed или
    • Если вы можете воспроизвести проблему, выполните вызов API для воспроизведения ошибки 503 Service Unavailable
  2. Убедитесь, что параметр «Показывать все FlowInfos» включен:

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

    ( Посмотреть увеличенное изображение )

  6. Обратите внимание на следующие значения из трассировки:
    • Ошибка: 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 не смог проверить сертификат бэкэнд-сервера.
  7. Перейдите к этапу AX (Analytics Data Recorded) в трассировке и щелкните по нему.
  8. Прокрутите вниз до раздела «Заголовки ошибок в подробностях этапа» и определите значения X-Apigee-fault-code , X-Apigee-fault-source и X-Apigee-Message-ID, как показано ниже:

    ( Посмотреть увеличенное изображение )

  9. Обратите внимание на значения X-Apigee-fault-code , X-Apigee-fault-source и X-Apigee-Message-ID :
  10. Заголовки ошибок Ценить
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target
    X-Apigee-Message-ID MESSAGE_ID

NGINX

Процедура №3: ​​Использование журналов доступа NGINX

Для диагностики ошибки с помощью журналов доступа NGINX:

  1. Если вы используете частное облако , то можете использовать журналы доступа NGINX для получения ключевой информации об ошибке HTTP 503 Service Unavailable .
  2. Проверьте журналы доступа NGINX:

    /opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log

  3. Проверьте, были ли какие-либо ошибки 503 с кодом ошибки messaging.adaptors.http.flow.SslHandshakeFailed за определенный период времени (если проблема возникала ранее) или есть ли запросы, которые по-прежнему завершаются с ошибкой 503 .
  4. Если вы обнаружите ошибки 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.SslHandshakeFailed
    X-Apigee-fault-source target

Журналы обработчика сообщений

Процедура №4: Использование журналов процессора сообщений

  1. Определите идентификатор сообщения одного из запросов, завершившихся с ошибкой, используя мониторинг API, инструмент трассировки или журналы доступа NGINX, как описано в разделе «Общие шаги диагностики» .
  2. Найдите идентификатор конкретного сообщения запроса в журнале обработчика сообщений ( /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 не смог проверить сертификат бэкэнд-сервера.

Причина: Некорректный/неполный сертификат или цепочка сертификатов в хранилище доверенных сертификатов обработчика сообщений.

Диагноз

  1. Определите код ошибки и источник ошибки, используя мониторинг API, инструмент трассировки или журналы доступа NGINX, как описано в разделе «Общие шаги диагностики» .
  2. Если код ошибки равен messaging.adaptors.http.flow.SslHandshakeFailed , то для определения сообщения об ошибке используйте один из следующих методов:
  3. Если сообщение об ошибке выглядит так 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. Этап 1: Определение цепочки сертификатов бэкэнд-сервера.
  2. Этап 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

  1. Если вы используете публичное облако , то перехватывайте TCP/IP-пакеты на бэкэнд-сервере.
  2. Если вы используете частное облако , то можете перехватывать TCP/IP-пакеты на бэкэнд-сервере или в обработчике сообщений. Предпочтительно перехватывать их на бэкэнд-сервере, поскольку расшифровка пакетов происходит именно там.
  3. Для захвата TCP/IP-пакетов используйте следующую команду tcpdump :

    tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
    
  4. Проанализируйте 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: сравните сертификат бэкэнд-сервера с сертификатами, хранящимися в хранилище доверенных сертификатов обработчика сообщений .

Фаза 2

Этап 2: Сравните сертификат бэкэнд-сервера с сертификатами, хранящимися в хранилище доверенных сертификатов обработчика сообщений.

  1. Определите цепочку сертификатов бэкэнд-сервера .
  2. Определите сертификат, хранящийся в хранилище доверенных сертификатов обработчика сообщений, выполнив следующие шаги:
    1. Получите имя ссылки на хранилище доверенных сертификатов из элемента 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>
    2. В приведенном выше примере имя ссылки TrustStore — myCompanyTruststoreRef .
    3. В пользовательском интерфейсе Edge выберите «Среды» > «Ссылки» . Запишите имя в столбце «Ссылка» для конкретной ссылки на хранилище доверенных сертификатов. Это будет имя вашего хранилища доверенных сертификатов.

      ( Посмотреть увеличенное изображение )

    4. В приведенном выше примере имя хранилища доверенных сертификатов следующее:

      myCompanyTruststoreRef : myCompanyTruststore

  3. Получите сертификаты, хранящиеся в хранилище доверенных сертификатов (определенном на предыдущем шаге), используя следующие API:

    1. Получить все сертификаты для хранилища ключей или хранилища доверенных сертификатов . Этот 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"
      

      Где:

      Пример выходных данных:

      В качестве примеров сертификатов для хранилища доверенных myCompanyTruststore используются следующие:

      [
        "serverCert"
      ]
    2. Получение сведений о конкретном сертификате из хранилища ключей или хранилища доверенных сертификатов . Этот 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"
      

      Где:

      Пример выходных данных

      В подробной информации о 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",
  4. Убедитесь, что фактический сертификат сервера, полученный на шаге 1, и сертификат, хранящийся в хранилище доверенных сертификатов, полученный на шаге 3, совпадают. Если они не совпадают, то это и является причиной проблемы.

    Рассмотрим по одному сертификату из приведенного выше примера:

    1. Сертификат листа:

      С серверной части:

      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",

      Конечный сертификат, хранящийся в хранилище доверенных сертификатов, совпадает с сертификатом бэкэнд-сервера.

    2. Сертификат о прохождении промежуточного курса:

      С серверной части:

      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",

      Промежуточный сертификат, хранящийся в хранилище доверенных сертификатов, соответствует сертификату бэкэнд-сервера.

    3. Корневой сертификат:

      С серверной части:

      s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
      i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1

      В хранилище доверенных сертификатов обработчика сообщений полностью отсутствует корневой сертификат.

    4. Поскольку корневой сертификат отсутствует в хранилище доверенных сертификатов, обработчик сообщений выдает следующее исключение:

      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 .

Разрешение

  1. Убедитесь, что у вас имеется корректная и полная цепочка сертификатов бэкэнд-сервера.
  2. Если вы являетесь пользователем публичного облака , следуйте инструкциям в разделе «Обновление TLS-сертификата для облака» , чтобы обновить сертификат в хранилище доверенных сертификатов обработчика сообщений Apigee Edge.
  3. Если вы используете частное облако , следуйте инструкциям в разделе «Обновление 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 .

Диагноз

  1. Проверьте конкретную целевую конечную точку в 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 .

  2. Определите полное доменное имя (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.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 .

  3. Если имя хоста бэкэнд-сервера, полученное на шаге 1, и полное доменное имя (FQDN), полученное на шаге 2, не совпадают, то это и является причиной ошибки.
  4. В приведенном выше примере имя хоста в целевой конечной точке — backend.company. com . Однако полное доменное имя (FQDN) в сертификате бэкэнд-сервера — backend.apigee. net . Поскольку они не совпадают, возникает эта ошибка.

Разрешение

Эту проблему можно решить одним из следующих способов:

Правильное полное доменное имя (FQDN)

Обновите хранилище ключей на бэкэнд-сервере, указав правильное полное доменное имя (FQDN) и действительную и полную цепочку сертификатов:

  1. Если у вас нет сертификата бэкэнд-сервера с правильным полным доменным именем (FQDN), получите соответствующий сертификат у уполномоченного центра сертификации (CA).
  2. Убедитесь, что у вас имеется действительная и полная цепочка сертификатов бэкэнд-сервера .

  3. После того как у вас будет действительная и полная цепочка сертификатов с правильным полным доменным именем (FQDN) бэкэнд-сервера в конечном сертификате или сертификате сущности, идентичным имени хоста, указанному в целевой конечной точке, обновите хранилище ключей бэкэнда, указав полную цепочку сертификатов.

Правильный сервер бэкэнда

Обновите целевую конечную точку, указав правильное имя хоста бэкэнд-сервера:

  1. Если в целевой конечной точке было неверно указано имя хоста, обновите целевую конечную точку, указав правильное имя хоста, соответствующее полному доменному имени (FQDN) в сертификате бэкэнд-сервера.
  2. Сохраните изменения в 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>

Причина: Некорректный/неполный сертификат или цепочка сертификатов, предоставленные бэкэнд-сервером.

Диагноз

  1. Получите цепочку сертификатов бэкэнд-сервера, выполнив команду 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
       
  2. Убедитесь, что у вас имеется правильная и полная цепочка сертификатов, как описано в разделе «Проверка цепочки сертификатов» .
  3. Если у вас отсутствует действительная и полная цепочка сертификатов для бэкэнд-сервера, то это и является причиной проблемы.

    В приведенной выше цепочке сертификатов серверной части отсутствует корневой сертификат. Поэтому возникает эта ошибка.

Разрешение

Обновите хранилище ключей на бэкэнд-сервере, указав действительную и полную цепочку сертификатов:

  1. Убедитесь, что у вас имеется действительная и полная цепочка сертификатов бэкэнд-сервера .

  2. Обновите действительную и полную цепочку сертификатов в хранилище ключей бэкэнд-сервера .

Если проблема сохраняется, перейдите к разделу «Необходимо собрать диагностическую информацию» .

Необходимо собрать диагностическую информацию.

Если проблема сохраняется даже после выполнения вышеуказанных инструкций, соберите следующую диагностическую информацию и обратитесь в службу поддержки 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.

Ссылки