Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Symptom
Клиентское приложение получает ответ HTTP 400 – неверный запрос с сообщением Ошибка сертификата SSL. Эта ошибка обычно отправляется пограничным маршрутизатором в двусторонней конфигурации TLS, включенной для входящего подключения к Apigee Edge.
Сообщение об ошибке
Клиентское приложение получает следующий код ответа:
HTTP/1.1 400 Bad Request
а затем следующую страницу с ошибкой HTML:
<html>
<head>
<title>400 The SSL certificate error</title>
</head>
<body bgcolor="white">
<center> <h1>400 Bad Request</h1>
</center>
<center>The SSL certificate error</center>
<hr>
<center>nginx</center>
</body>
</html>Возможные причины
Возможные причины:
| Cause | Описание | Инструкции по устранению неполадок, применимые к |
| Срок действия сертификата клиента истек | Срок действия сертификата, отправленного клиентом, истек. | Пользователи частного и общедоступного облака Edge |
| Клиент отправил неправильный сертификат | Эта ошибка возникает, если сертификат, отправленный клиентским приложением, не совпадает с сертификатом, хранящимся в хранилище доверенных сертификатов маршрутизатора Edge. | Пользователи частного и общедоступного облака Edge |
| В хранилище доверенных сертификатов отсутствует корневой сертификат клиента | Эта ошибка возникает, если корневой сертификат, подписанный ЦС клиента, отсутствует в хранилище доверенных сертификатов маршрутизатора Edge. | Пользователи частного и общедоступного облака Edge |
| Сертификаты клиента не загружаются в маршрутизатор Edge | Эта ошибка возникает, если клиентские сертификаты, загруженные в хранилище доверенных сертификатов, не загружаются в маршрутизатор. | Пользователи Edge Private Cloud |
Причина: срок действия сертификата клиента истек
Эта проблема обычно возникает при двустороннем протоколе TLS, когда срок действия сертификата, отправленного клиентом, истек. При двустороннем TLS-подключении клиент и сервер обмениваются открытыми сертификатами для установления соединения. Клиент проверяет сертификат сервера, а сервер – сертификат клиента.
В Edge двусторонняя аутентификация TLS реализована на уровне виртуального хоста, где сертификат сервера добавляется в хранилище ключей, а сертификат клиента – в хранилище доверенных сертификатов.
Если во время подтверждения TLS будет обнаружено, что срок действия сертификата клиента истек, сервер отправит ошибку 400 (неверный запрос) с сообщением Ошибка SSL-сертификата.
диагностика;
Войдите в интерфейс Edge и посмотрите конфигурацию определенного виртуального хоста (Admin > Virtual Hosts), для которого выполняется запрос к API, или используйте API для получения виртуального хоста Management API, чтобы получить определение определенного виртуального хоста.
Обычно виртуальный хост для двусторонней связи TLS выглядит следующим образом:
<VirtualHost name="myTLSVHost"> <HostAliases> <HostAlias>api.myCompany.com</HostAlias> </HostAliases> <Port>443</Port> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>ref://myKeystoreRef</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> <TrustStore>ref://myTruststoreRef</TrustStore> </SSLInfo> </VirtualHost>Определите ссылку на хранилище доверенных сертификатов, используемую в виртуальном хосте. В примере выше имя ссылки на хранилище доверенных сертификатов – myTruststoreRef.
- Определите хранилище доверенных сертификатов, на которое указывает ссылка.
- В интерфейсе Edge выберите Admin > Environments > References и найдите название ссылки на хранилище доверенных сертификатов.
Запомните название в столбце Ссылка для определенной ссылки на хранилище доверенных сертификатов. Это будет название хранилища доверенных сертификатов.
Рисунок 1 В примере выше обратите внимание, что myTruststoreRef содержит ссылку на myTruststore. Таким образом, название хранилища доверенных сертификатов – myTruststore.
- В интерфейсе Edge выберите Admin > Environments > TLS Keystores (Администратор > Среды > Хранилища ключей TLS), перейдите к хранилищам ключей TLS и найдите хранилище доверенных сертификатов, найденное на шаге 3.
Выберите сертификат в хранилище доверенных сертификатов, определенном на шаге 3, как показано ниже.
Рисунок 2 В примере выше сертификат с псевдонимом
client-cert-markwимеет статус "Срок действия истек".- Проверьте, не истек ли срок действия сертификата для псевдонима сертификата в хранилище доверенных сертификатов.
- Если срок действия сертификата не истек, перейдите к разделу Общие шаги диагностики для других причин.
Разрешение
Получите новый сертификат и загрузите его:
- Создайте новое хранилище доверенных сертификатов, например myNewTruststore.
- Загрузите новый сертификат в созданное хранилище доверенных сертификатов.
Измените ссылку на хранилище доверенных сертификатов, используемую в определенном виртуальном хосте, чтобы она указывала на новое хранилище. Для этого выполните инструкции из раздела Как изменить ссылку.
В описанном выше примере укажите ссылку myTruststoreRef на myNewTruststore.
Распространенные шаги диагностики для других причин
- Чтобы устранить эту проблему, вам нужно будет захватить пакеты TCP/IP с помощью инструмента tcpdump.
- Если вы используете частное облако, то можете захватывать пакеты TCP/IP в клиентском приложении или маршрутизаторе.
- Если вы используете общедоступное облако, захватите пакеты TCP/IP в клиентском приложении.
Определив, где вы хотите перехватывать пакеты TCP/IP, используйте следующую команду tcpdump:
tcpdump -i any -s 0 host <IP address> -w <File name>
Примечание. Если вы получаете пакеты TCP/IP на маршрутизаторе, используйте общедоступный IP-адрес клиентского приложения в команде
tcpdump.Если вы получаете пакеты TCP/IP в клиентском приложении, используйте общедоступный IP-адрес имени хоста, используемого в виртуальном хосте в команде
tcpdump.Подробнее об этом инструменте и других вариантах команды можно узнать на сайте tcpdump.
- Проанализируйте собранные пакеты TCP/IP с помощью инструмента Wireshark или другого аналогичного инструмента, с которым вы знакомы.
Ниже приведен анализ образцов данных пакетов TCP/IP с помощью инструмента Wireshark.
- Пакет № 30 в tcpdump (изображение ниже) показывает, что клиентское приложение (источник) отправило сообщение"Client Hello" маршрутизатору (получателю).
- Пакет 34 показывает, что маршрутизатор подтверждает сообщение Client Hello от клиентского приложения.
- Маршрутизатор отправляет сообщение "Server Hello" в пакете № 35, а затем отправляет свой сертификат и запрашивает у клиентского приложения его сертификат в пакете № 38.
- В пакете № 38, в котором маршрутизатор отправляет пакет Certificate Request, проверьте раздел Distinguished Names, в котором приведена информация о сертификате клиента, его цепочке и центрах сертификации, принимаемых маршрутизатором (сервером).
Клиентское приложение отправляет свой сертификат в пакете № 41. Проверьте раздел Certificate Verify в пакете № 41 и определите сертификат, отправленный клиентским приложением.
Рисунок 4 - Проверьте, совпадают ли субъект и издатель сертификата и его цепочки, отправленные клиентским приложением (пакет № 41), с принятым сертификатом и его цепочкой от маршрутизатора (пакет № 38). Если они не совпадают, это и есть причина ошибки. Поэтому маршрутизатор (сервер) отправляет зашифрованное оповещение (пакет № 57), а затем FIN, ACK (пакет № 58) клиентскому приложению, после чего подключение завершается.
- Несоответствие сертификата и его цепочки может быть вызвано сценариями, описанными в следующих разделах.
Причина: клиент отправил неправильный сертификат
Обычно это происходит, если субъект/издатель сертификата и/или его цепочки, отправленных клиентским приложением, не соответствует сертификату и/или его цепочке, хранящимся в хранилище доверенных сертификатов маршрутизатора (сервера).
диагностика;
Войдите в интерфейс Edge и посмотрите конфигурацию определенного виртуального хоста (Admin > Virtual Hosts), для которого выполняется запрос к API, или используйте API для получения виртуального хоста Management API, чтобы получить определение определенного виртуального хоста.
Обычно виртуальный хост для двусторонней связи TLS выглядит следующим образом:
<VirtualHost name="myTLSVHost"> <HostAliases> <HostAlias>api.myCompany.com</HostAlias> </HostAliases> <Port>443</Port> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>ref://myKeystoreRef</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> <TrustStore>ref://myCompanyTruststoreRef</TrustStore> </SSLInfo> </VirtualHost>- Определите ссылку на хранилище доверенных сертификатов, используемую в виртуальном хосте.
В примере выше имя ссылки на хранилище доверенных сертификатов – myCompanyTruststoreRef.
- Определите хранилище доверенных сертификатов, на которое указывает ссылка.
- В интерфейсе Edge выберите Admin > Environments References (Администратор > Ссылки на среды) и найдите название ссылки на хранилище доверенных сертификатов.
Запомните название в столбце Ссылка для определенной ссылки на хранилище доверенных сертификатов. Это будет название хранилища доверенных сертификатов.
Рисунок 5 В приведенном выше примере обратите внимание, что myCompanyTruststoreRef содержит ссылку на myCompanyTruststore. Таким образом, название хранилища доверенных сертификатов – myCompanyTruststore.
- Получите сертификаты, хранящиеся в хранилище доверенных сертификатов (определенном на предыдущем шаге), с помощью следующих API:
Как получить список сертификатов для API хранилища ключей или доверенного хранилища
Этот API перечисляет все сертификаты в определенном хранилище доверенных сертификатов.
Получите сведения о сертификате из API хранилища ключей или доверенного хранилища.
Этот API возвращает информацию об определенном сертификате в определенном хранилище доверенных сертификатов.
- Проверьте, совпадают ли издатель и субъект каждого сертификата и его цепочки, хранящихся в myCompanyTruststore, с издателем и субъектом сертификата и его цепочки, указанными в пакетах TCP/IP (см. пакет № 38 выше). Если они не совпадают, это означает, что сертификаты, загруженные в хранилище доверенных сертификатов, не загружаются в маршрутизатор Edge. Перейдите к разделу Причина: сертификаты клиента не загружены в маршрутизатор Edge.
- Если на шаге 5 не было обнаружено несоответствия, это означает, что клиентское приложение не отправило правильный сертификат и его цепочку.
Разрешение
Убедитесь, что клиентское приложение отправляет в Edge правильный сертификат и его цепочку.
Причина: в хранилище доверенных сертификатов отсутствует корневой сертификат клиента
Эта ошибка возникает, если корневой сертификат, подписанный ЦС клиента, отсутствует в хранилище доверенных сертификатов маршрутизатора Edge.
диагностика;
Войдите в интерфейс Edge и посмотрите конфигурацию определенного виртуального хоста, для которого выполняется запрос API (Администратор > Виртуальные хосты > virtual_host) или используйте API для получения виртуального хоста, чтобы получить определение определенного виртуального хоста.
Обычно виртуальный хост для двусторонней связи TLS выглядит следующим образом:
<VirtualHost name="myTLSVHost"> <HostAliases> <HostAlias>api.myCompany.com</HostAlias> </HostAliases> <Port>443</Port> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>ref://myKeystoreRef</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> <TrustStore>ref://myCompanyTruststoreRef</TrustStore> </SSLInfo> </VirtualHost>- Определите ссылку на хранилище доверенных сертификатов, используемую в виртуальном хосте. В предыдущем примере название хранилища доверенных сертификатов – myCompanyTruststoreRef.
- Определите фактическое хранилище доверенных сертификатов, используемое ссылкой на хранилище доверенных сертификатов.
- В интерфейсе Edge выберите Admin > Environments > References и найдите название ссылки на хранилище доверенных сертификатов.
Название хранилища доверенных сертификатов для определенной ссылки на него указано в столбце Ссылка.
Рисунок 6 В этом примере обратите внимание, что в столбце "Ссылка" для myCompanyTruststoreRef указано myCompanyTruststore. Таким образом, название хранилища доверенных сертификатов – myCompanyTruststore.
- Получите сертификаты, хранящиеся в хранилище доверенных сертификатов (определенном на предыдущем шаге), с помощью следующих API:
- Как получить список сертификатов для хранилища ключей или доверенного хранилища API Этот API перечисляет все сертификаты в хранилище доверенных сертификатов.
- Получите сведения о сертификате из API хранилища ключей или доверенного хранилища. Этот API возвращает информацию об определенном сертификате в хранилище доверенных сертификатов.
Проверьте, содержит ли сертификат полную цепочку, включая корневой сертификат, отправленный определенным клиентом, как показано на пакетах TCP/IP (см. рисунок 4). Хранилище доверенных сертификатов должно содержать корневой сертификат, а также листовой сертификат клиента или листовой и промежуточный сертификаты. Если в хранилище доверенных сертификатов отсутствует действительный корневой сертификат клиента, это и является причиной ошибки.
Однако если полная цепочка сертификатов клиента, включая корневой сертификат, существует в хранилище доверия, это означает, что сертификаты, загруженные в хранилище доверия, возможно, не загружены в маршрутизатор Edge. В этом случае ознакомьтесь с разделом Причина: клиентские сертификаты не загружены в маршрутизатор Edge.
Разрешение
Убедитесь, что в хранилище доверенных сертификатов маршрутизатора Apigee Edge доступен правильный сертификат клиента, включая корневой сертификат.
Причина: сертификаты клиента не загружены в маршрутизатор Edge
- Если вы используете общедоступное облако, обратитесь в службу поддержки Apigee Edge.
- Если вы используете частное облако, выполните приведенные ниже инструкции для каждого маршрутизатора:
- Проверьте, существует ли файл
/opt/nginx/conf.d/OrgName_envName_vhostName-client.pemдля определенного виртуального хоста. Если файла нет, перейдите к разделу Решение проблемы ниже. - Если файл существует, используйте приведенную ниже команду
openssl, чтобы получить сведения о сертификатах, доступных на маршрутизаторе Edge:openssl -in <OrgName_envName_vhostName-client.pem> -text -noout
- Проверьте издателя, субъекта и дату окончания срока действия сертификата. Если какие-либо из этих значений не совпадают с тем, что было обнаружено в хранилище доверенных сертификатов в интерфейсе Edge или с помощью API управления, это и является причиной ошибки.
- Возможно, маршрутизатор не перезагрузил загруженные сертификаты.
- Проверьте, существует ли файл
Разрешение
Перезапустите маршрутизатор, чтобы загрузить последние сертификаты. Для этого выполните следующие действия:
apigee-service edge-router restart
Повторно запустите API и проверьте результаты. Если проблема не устранена, перейдите к разделу Сбор диагностической информации.
Как получить диагностическую информацию
Если проблема не устранена, соберите следующую диагностическую информацию. Свяжитесь со службой поддержки Apigee Edge и предоставьте ей собранную информацию:
- Если вы используете общедоступное облако, предоставьте следующую информацию:
- Название организации
- Название среды
- Название прокси API
- Имя виртуального хоста
- Псевдоним хоста
- Полная команда curl для воспроизведения ошибки
- Пакеты TCP/IP, захваченные в клиентском приложении
- Если вы используете частное облако, предоставьте следующую информацию:
- Имя виртуального хоста и его определение с помощью Get virtual host API.
- Псевдоним хоста
- Полное сообщение об ошибке
- Пакеты TCP/IP, захваченные в клиентском приложении или маршрутизаторе.
- Выходные данные API для получения списка сертификатов из хранилища ключей, а также сведения о каждом сертификате, полученные с помощью API для получения сведений о сертификате.
- Подробную информацию о том, какие разделы этого руководства вы уже изучили, и любые другие сведения, которые помогут нам быстрее решить проблему.