Как исправить ошибку сертификата «Trust anchor for certification path not found» в мобильном клиенте 1С на Android

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При развертывании и тестировании мобильных клиентов «1С:Предприятие» разработчики часто сталкиваются с ситуацией, когда подключение к базе данных по защищенному протоколу HTTPS завершается критической ошибкой. На экранах мобильных устройств под управлением операционной системы Android появляется неприятное системное сообщение: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. Для оперативного уведомления о таких сбоях есть мониторинг ошибок 1С с уведомлениями в Telegram.

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

Выясняем причину: почему Android ругается на сертификат?

Для начала проанализируем природу ошибки. Буквальный перевод сообщения Trust anchor for certification path not found звучит как «Якорь доверия для пути сертификации не найден». Это означает, что операционная система Android не смогла построить полную и непрерывную цепочку доверия (SSL Chain) от конечного SSL-сертификата вашего веб-сервера (где опубликована информационная база 1С) до доверенного корневого сертификата (Root CA), который встроен в саму операционную систему мобильного устройства.

Возникает логичный вопрос: почему на персональных компьютерах под управлением Windows, macOS или даже на мобильных устройствах с iOS подключение к этой же базе 1С проходит абсолютно успешно, а Android выдает ошибку? Этому есть два ключевых объяснения:

  1. Строгие требования Android к цепочке SSL: Настольные операционные системы и iOS умеют «на лету» запрашивать и скачивать недостающие промежуточные (Intermediate) сертификаты из интернета, используя специальное поле в сертификате — Authority Information Access (AIA). Операционная система Android делать этого по умолчанию не умеет. Ей критически важно, чтобы веб-сервер в момент первоначального SSL-рукопожатия (Handshake) сразу отдавал клиенту всю цепочку: основной сертификат домена + промежуточные сертификаты.
  2. Изменения в политике безопасности Android 7.0 (Nougat) и выше: Начиная с версии Android 7.0, Google кардинально изменил подход к безопасности сетевых соединений. Теперь любые приложения (включая собранные мобильные клиенты 1С) по умолчанию доверяют только системным сертификатам, которые жестко зашиты в саму операционную систему производителем устройства. Сертификатам, которые пользователь вручную скачал, открыл и установил через настройки телефона (так называемые пользовательские сертификаты), мобильные приложения больше не доверяют, если это явно не разрешено в их конфигурации.

Рассмотрим по шагам три основных метода решения этой проблемы, начиная с самого правильного и заканчивая компромиссными вариантами для внутренних тестовых контуров.

Решение 1. Правильная настройка веб-сервера (Рекомендуемый способ)

В подавляющем большинстве случаев корень проблемы кроется в некорректной настройке веб-сервера, публикующего базу 1С (Apache, Nginx или IIS). Сервер настраивают так, что он отдает только конечный SSL-сертификат домена, забывая прикрепить промежуточные сертификаты удостоверяющего центра. Нам необходимо заставить веб-сервер отдавать полную цепочку сертификатов.

Для проверки цепочки вашего веб-сервера рекомендуется воспользоваться специализированными внешними тестами SSL (например, популярными онлайн-сервисами проверки SSL-сертификатов). Если тест указывает на ошибку Chain issues: Incomplete или Extra download required, вам обязательно нужно перенастроить сервер.

Настройка веб-сервера Apache

Если публикация выполнена на веб-сервере Apache, найдите файл конфигурации виртуального хоста (обычно это httpd.conf, httpd-ssl.conf или файлы в директории sites-enabled). В блоке конфигурации <VirtualHost> проверьте директивы сертификатов:


SSLCertificateFile /etc/ssl/certs/your_domain.crt
SSLCertificateKeyFile /etc/ssl/private/your_domain.key
SSLCertificateChainFile /etc/ssl/certs/intermediate.crt

Настройка веб-сервера Nginx

В веб-сервере Nginx файл, на который указывает директива ssl_certificate, обязательно должен быть комбинированным (так называемый fullchain). Этот файл должен содержать ваш основной SSL-сертификат домена, а сразу под ним — промежуточный сертификат УЦ без каких-либо пустых строк между блоками.

Для создания такого файла объедините их содержимое в текстовом редакторе или выполните команду в консоли сервера:

cat your_domain.crt intermediate.crt > fullchain.pem

После этого убедитесь, что в конфигурационном файле Nginx прописан именно этот объединенный файл:


server {
    listen 443 ssl;
    server_name 1c.company.ru;

    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/your_domain.key;
    
    # ... оставшаяся часть конфигурации ...
}

Настройка веб-сервера IIS (Internet Information Services)

В случае использования IIS на операционной системе Windows Server, веб-сервер строит цепочку автоматически на основе системного хранилища сертификатов. Чтобы IIS корректно отдавал промежуточный сертификат мобильным клиентам Android, вам необходимо:

  1. Открыть оснастку управления сертификатами локального компьютера (выполнить команду certlm.msc).
  2. Импортировать промежуточный сертификат вашего УЦ в контейнер «Промежуточные центры сертификации» (Intermediate Certification Authorities).
  3. Убедиться, что корневой сертификат УЦ находится в контейнере «Доверенные корневые центры сертификации» (Trusted Root Certification Authorities).
  4. Перезапустить веб-сервер IIS.

Решение 2. Разрешение пользовательских сертификатов при сборке Мобильного клиента

Если в вашей компании развернут собственный внутренний удостоверяющий центр (например, Active Directory Certificate Services) или вы используете самоподписанный (Self-Signed) SSL-сертификат для тестирования, то внешние доверенные центры вам помочь не смогут. Пользователям придется устанавливать корневой сертификат вашего предприятия на свои Android-устройства вручную.

Однако, как мы выяснили ранее, мобильный клиент 1С на Android 7.0+ по умолчанию проигнорирует этот вручную установленный сертификат. Чтобы заставить собранное мобильное приложение доверять пользовательским сертификатам, разработчику необходимо внести изменения в конфигурацию сетевой безопасности при сборке мобильного приложения. Для быстрой настройки связи подойдёт готовое мобильное приложение для взаимодействия с 1С.

Разберем процесс настройки по шагам:

Шаг 1. Создайте в ресурсах вашего Android-проекта файл конфигурации сетевой безопасности с именем network_security_config.xml. Этот файл должен располагаться по пути res/xml/network_security_config.xml. Добавьте в него следующее XML-содержимое:


<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" /> 
        </trust-anchors>
    </base-config>
</network-security-config>

Параметр <certificates src="user" /> является ключевым в данном конфигурационном файле. Он явно указывает операционной системе Android, что данное конкретное приложение имеет разрешение доверять сертификатам, которые пользователь самостоятельно импортировал в систему через настройки безопасности телефона.

Шаг 2. Зарегистрируйте этот конфигурационный файл в манифесте вашего мобильного приложения. Откройте файл AndroidManifest.xml, найдите тег <application> и добавьте к нему атрибут, указывающий на созданные правила сетевой безопасности:


<application
    android:networkSecurityConfig="@xml/network_security_config"
    ... >
    ...
</application>

После выполнения этих манипуляций соберите мобильный клиент заново в Сборщике мобильных приложений 1С. Теперь приложение без проблем подключится к веб-серверу, на котором установлен внутренний или самоподписанный сертификат, при условии, что корневой сертификат предварительно установлен в настройки безопасности Android-смартфона.

Решение 3. Обходной путь для разработчиков (Отключение проверки сертификатов)

Во время активной разработки, отладки кода или проведения быстрых демонстрационных тестов настройка полноценного SSL и сборка приложения с файлами конфигурации могут отнять слишком много драгоценного времени. В таких сугубо тестовых сценариях допустимо применить временное «топорное» решение, о котором упоминалось на форуме, — отключить проверку валидности SSL-сертификатов в настройках подключения мобильного клиента.

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

Важное предупреждение о безопасности: Никогда не оставляйте отключенной проверку сертификатов в рабочей (продуктовой) среде! Отключение валидации SSL делает ваше мобильное приложение уязвимым для атак класса «Человек посередине» (Man-in-the-Middle, MitM). Злоумышленники в публичной или корпоративной Wi-Fi сети смогут легко перехватить трафик мобильного клиента 1С, включая логины, пароли и конфиденциальные коммерческие данные вашей компании.

Проблема устаревания корневых сертификатов на старых версиях Android

Иногда ошибка возникает на старых смартфонах (с версиями Android 5.0 - 7.0), которые давно перестали получать обновления безопасности от производителей. На таких устройствах системное хранилище доверенных корневых сертификатов банально устарело. Например, в нем может отсутствовать новый корневой сертификат удостоверяющего центра Let's Encrypt (ISRG Root X1) или актуальные корневые сертификаты Минцифры России.

В этом случае пользователю необходимо вручную скачать актуальный корневой файл сертификата (в формате .crt, .cer или .der) с официального сайта соответствующего удостоверяющего центра, зайти в настройки Android по пути «Безопасность» -> «Учетные данные» -> «Установка из памяти устройства» и инсталлировать его в систему.

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

← На главную