Вопрос:
После замены сертификата на опубликованном сервере Indeed Key часть устройств перестала получать пуш, а также им невозможно зарегистрировать новый аутентификатор Indeed Key. Из-за чего воспроизводится данное поведение?
Ошибка:
В логах firebase для проблемных устройств видим данную ошибку:
| [ 2] ERROR | CoroutinesRetrofitRepository$registerUserOnServer$1::invokeSuspend::15 | java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
Она интерпретируется так: устройству не удаётся установить доверительные отношения с сервером Indeed Key.
Причины возникновения ошибки:
- Сертификат для Indeed Key сервера выпущен не доверенным УЦ (либо это самоподписанный сертификат, либо выпущен УЦ, которому девайс не доверяет).
- Неподдерживаемый протокол.
- Сертификат просрочен.
- Не сконфигурирована цепочка сертификатов.
Возможные решения ошибки:
- Выпустить сертификат, которому будет доверять девайс/приложение.
- Выпустить сертификат с нашего УЦ.
- Разрешить использование TLS 1.2 и (опционально) TLS 1.3 на сервере Indeed Key, т.к. Android-приложение может работать только с ними. Кроме того, проверить, какие наборы шифров и в каком порядке включены на сервере (чем выше - тем приоритетнее и безопаснее):
// TLSv1.3. CipherSuite.TLS_AES_128_GCM_SHA256, CipherSuite.TLS_AES_256_GCM_SHA384, CipherSuite.TLS_CHACHA20_POLY1305_SHA256,
// TLSv1.0, TLSv1.1, TLSv1.2. CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, CipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, CipherSuite.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
// не рекомендуется использовать! CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256, CipherSuite.TLS_RSA_WITH_AES_256_GCM_SHA384, CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA, CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA, CipherSuite.TLS_RSA_WITH_3DES_EDE_CBC_SHA
- Перевыпустить сертификат.
- Настроить цепочку сертификатов.
Чтобы точечно выявить причину ошибку, рекомендуем:
- Собрать серверные логи для core и Indeed Key. Например, в случае, когда сертификат был просрочен, ошибка, свидетельствующая о невозможности установить доверительные отношения также возникнет между серверами AM и Indeed Key, будет зафиксирована в логах core.
- Проверить сертификат открыв ссылку в браузере. Если сертификат не является доверенным или просрочен, в браузере будет отображаться следующая ошибка:

Также, стоит иметь в виду, что браузеры на базе Chromium и Firefox проверяют действительность сертификатов используя как локальное доверенное хранилище сертификатов, так и в хранилище Mozilla. Из-за этого может возникнуть следующая ситуация: в браузере сертификат будет отображаться валидным, так как не просрочен и корневой сертификат УЦ присутствует в хранилище Mozilla, но на устройстве корневой сертификат УЦ отсутствует, из-за чего нарушаются доверительные отношения между устройством и сервером.
- Проверить цепочку сертификатов при помощи команды в openSSL:
openssl s_client -debug -connect url:port
- Проверить наличие корневых и промежуточных сертификатов УЦ. Например, корневой сертификат HARICA TLS RSA Root CA 2021 присутствует в хранилище Mozilla, из-за чего браузер считает его валидным, но не присутствует на устройствах с OC Android ниже 14-й версии. Установка данного сертификат на сервер Indeed Key или публикатор вызовет ошибку установления доверительных отношений между устройствами и сервером. Из-за данной ошибки устройства, у которых данный сертификат отсутствует не смогут получать push и регистрировать аутентификатор.
Проверка наличия корневых сертификатов происходит следующим образом:
- Для устройств с OC Android: в настройках найдите пункт доверенные сертификаты или надёжные сертификаты, как на скриншоте. Далее проверьте, присутствует ли сертификат, установленный на сервере.

- Для устройств Apple: проверьте наличие сертификата, установленного на сервере, на данном сайте.
|