Поделиться через


Устранение ошибок взаимной проверки подлинности в Шлюз приложений

Узнайте, как устранять проблемы с взаимной проверкой подлинности при использовании Шлюза приложений.

Обзор

После настройки взаимной проверки подлинности в Шлюзе приложений при попытке использовать эту функцию может возникнуть ряд ошибок. К распространенным причинам ошибок относятся следующие:

  • отправлен сертификат или цепочка сертификатов без сертификата корневого ЦС;
  • отправлена цепочка сертификатов с несколькими сертификатами корневого ЦС;
  • отправлена цепочка сертификатов, содержащая только сертификат конечного объекта без сертификата ЦС;
  • ошибки проверки из-за несоответствия различающегося имени издателя.

Мы рассмотрим различные сценарии, которые вы можете встретить, и опишем способы устранения неполадок. Затем мы перечислим коды ошибок и объясним возможные причины возникновения ошибок взаимной проверки подлинности. Все сбои проверки подлинности сертификата клиента должны привести к коду ошибки HTTP 400.

Сценарий с устранением неполадок: проблемы с конфигурацией

Есть несколько сценариев, связанных с попытками настроить взаимную проверку подлинности. Мы рассмотрим, как устранить некоторые типичные проблемы.

Самозаверяющий сертификат

Проблема

Переданный сертификат клиента является самозаверяющим сертификатом, из-за чего возникает код ошибки ApplicationGatewayTrustedClientCertificateDoesNotContainAnyCACertificate.

Решение

Убедитесь в наличии у самозаверяющего сертификата, который вы используете, расширения BasicConstraintsOid = "2.5.29.19", которое указывает, что субъект может действовать как ЦС. Это обеспечит использование сертификата в качестве сертификата ЦС. Дополнительные сведения о создании самозаверяющих сертификатов клиентов см. в статье Сертификаты доверенных клиентов.

Сценарий с устранением неполадок: проблемы с подключением

Возможно, вы настроили взаимную проверку подлинности без проблем, но при отправке запросов в Шлюз приложений возникли неполадки. В следующем разделе описаны некоторые распространенные проблемы и их решения. Свойство sslClientVerify можно найти в журналах доступа Шлюза приложений.

SslClientVerify имеет значение NONE

Проблема

Для свойства sslClientVerify в журналах доступа отображается значение NONE.

Решение

Это видно, когда клиент не отправляет сертификат клиента при отправке запроса к Шлюзу приложений. Это может произойти, если клиент, отправляющий запрос к Шлюзу приложений, не настроен правильно для использования сертификатов клиента. Один из способов убедиться, что настройка проверки подлинности клиента в Шлюзе приложений работает ожидаемым образом, — использовать следующую команду OpenSSL:

openssl s_client -connect <hostname:port> -cert <path-to-certificate> -key <client-private-key-file> 

Флаг -cert — это сертификат конечного объекта, а флаг -key — файл закрытого ключа клиента.

Дополнительные сведения об использовании команды OpenSSL s_client см. на странице руководства.

SslClientVerify имеет значение FAILED

Проблема

Для свойства sslClientVerify в журналах доступа отображается значение FAILED.

Решение

Существует ряд потенциальных причин сбоев в журналах доступа. Ниже приведен список распространенных причин сбоя:

  • Unable to get issuer certificate. Не удалось найти сертификат издателя сертификата клиента. Это обычно означает, что цепочка сертификатов ЦС доверенного клиента не завершается на Шлюзе приложений. Убедитесь, что цепочка сертификатов ЦС доверенного клиента, отправленная в Шлюз приложений, завершена.
  • Unable to get local issuer certificate. Не удалось найти сертификат локального издателя сертификата клиента. Это обычно означает, что цепочка сертификатов ЦС доверенного клиента не завершается на Шлюзе приложений. Убедитесь, что цепочка сертификатов ЦС доверенного клиента, отправленная в Шлюз приложений, завершена.
  • Unable to verify the first certificate. Не удалось проверить первый сертификат клиента. Эта ошибка возникает в частности, когда клиент представляет только сертификат конечного объекта, поставщик которого не является доверенным. Убедитесь, что цепочка сертификатов ЦС доверенного клиента, отправленная в Шлюз приложений, завершена.
  • Unable to verify the client certificate issuer. Не удалось проверить издателя сертификата клиента. Эта ошибка возникает, когда параметр VerifyClientCertIssuerDN имеет значение true. Обычно это происходит, когда различающееся имя издателя сертификата клиента не совпадает со значением ClientCertificateIssuerDN, извлеченным из цепочки сертификатов ЦС доверенного клиента, отправленной клиентом. Дополнительные сведения о том, как Шлюз приложений извлекает ClientCertificateIssuerDN, см. в разделе Извлечение различающегося имени издателя из Шлюза приложений. Рекомендуем убедиться, что вы отправляете в Шлюз приложений по одной цепочке сертификатов в каждом файле.
  • Назначение неподдерживаемого сертификата: убедитесь, что сертификат клиента назначает расширенное использование ключей для проверки подлинности клиента (1.3.6.1.5.5.7.3.2). Дополнительные сведения об определении использования расширенного ключа и идентификатора объекта для проверки подлинности клиента см. в RFC 3280 и RFC 5280.

Дополнительные сведения о том, как извлечь цепочки сертификатов ЦС доверенного клиента для отправки, см. в статье, посвященной извлечению цепочки сертификатов ЦС доверенного клиента.

Устранение неполадок по коду ошибки

Если вы видите любой из следующих кодов ошибок, у нас есть несколько рекомендуемых решений проблемы.

Код ошибки: ApplicationGatewayTrustedClientCertificateMustSpecifyData

Причина

Отсутствуют данные сертификата. Отправленный сертификат мог быть пустым файлом без данных сертификата.

Решение

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

Код ошибки: ApplicationGatewayTrustedClientCertificateMustNotHavePrivateKey

Причина

В цепочке сертификатов есть закрытый ключ. В цепочке сертификатов не должно быть закрытого ключа.

Решение

Проверьте отправленную цепочку сертификатов и удалите закрытый ключ, который был частью цепочки. Отправьте цепочку повторно без закрытого ключа.

Код ошибки: ApplicationGatewayTrustedClientCertificateInvalidData

Причина

Этот код ошибки может быть вызван двумя причинами.

  1. Сбой анализа из-за того, что цепочка не представлена в правильном формате. Шлюз приложений ожидает, что цепочка сертификатов находится в формате PEM и что данные сертификатов будут разделены.
  2. Средство синтаксического анализа не нашло данные для анализа. Возможно, в отправленном файле есть только разделители, но нет данных сертификата.

Решение

В зависимости от причины этой ошибки существует два возможных решения.

  • Убедитесь, что отправленная цепочка сертификатов была в правильном формате (PEM) и что данные сертификатов были правильно разделены.
  • Убедитесь, что отправленный файл сертификата содержит данные сертификата в дополнение к разделителям.

Код ошибки: ApplicationGatewayTrustedClientCertificateDoesNotContainAnyCACertificate

Причина

Отправленная цепочка сертификатов содержит только сертификат конечного объекта без сертификата ЦС. Отправка цепочки сертификатов с сертификатами ЦС и сертификатом конечного объекта допустима, так как сертификат конечного объекта будет игнорироваться, но у сертификата должен быть ЦС.

Решение

Убедитесь, что отправленная цепочка сертификатов содержит не только сертификат конечного объекта. Должно присутствовать расширение BasicConstraintsOid = "2.5.29.19", указывающее, что субъект может действовать как центр сертификации.

Код ошибки: ApplicationGatewayOnlyOneRootCAAllowedInTrustedClientCertificate

Причина

Цепочка сертификатов содержит несколько сертификатов корневого ЦС или ни одного.

Решение

Переданные сертификаты должны содержать ровно один корневой сертификат ЦС (и при необходимости любое количество промежуточных сертификатов ЦС).