Главная/Установка/SSL для приложения

SSL для мобильного приложения: сертификат для API и закрепление ключа

SSL для мобильного приложения настраивают на сервере, с которым оно общается: приложению нужен обычный доверенный сертификат на домен API, например api.example.com, с полной цепочкой. Отдельный сертификат внутри приложения не нужен, а закрепление ключа (pinning) добавляют, только когда требуется защита от подмены центра сертификации.

5 мин чтенияДанные проверены 19 октября 2026

Ответ за 30 секунд

Приложению нужен обычный сертификат на домен API с полной цепочкой, бесплатного Let's Encrypt хватает. Закрепление ключа без запасного ломает приложение при первой же смене сертификата у всех, кто не успел обновиться.

Let's Encrypt для домена бесплатный, платный AlphaSSL стоит 1 000 ₽ за 6 месяцев, 7 дней на возврат (Таймвеб, на 19 октября 2026).

Что проверить в сертификате API перед выпуском приложения

01 · 1 мин

Какой SSL-сертификат нужен серверу мобильного приложения#

Мобильные системы сами запрещают обмен по голому http. Начиная с Android 9 (API 28) открытый трафик по умолчанию отключён, а iOS через App Transport Security требует https с TLS 1.2 или новее, исключения для отдельных доменов прописывают в Info.plist. Значит, API нужен адрес с https и сертификатом, которому система доверяет.

Подойдёт обычный DV-сертификат на домен API. Let's Encrypt устанавливается так же, как для сайта, и шифрует ровно так же, как платный. Платный берут ради гарантийной выплаты или сертификата с проверкой организации, а не для работы приложения.

Приложения доверяют тому же списку корневых сертификатов, что и система, поэтому самоподписанный сертификат в боевом API не работает. Для разработки есть выход, о нём ниже.

02 · 1 мин

Почему приложение не подключается, хотя сайт в браузере открывается#

Самая частая причина: сервер отдаёт только свой сертификат без промежуточного. Браузеры часто докачивают недостающее сами и скрывают проблему, а библиотеки приложений этого не делают и отвечают ошибкой проверки. Остальные причины: истёк срок (сертификат истёк), имя в сертификате не совпадает с адресом, сертификат выпущен на другой домен.

openssl s_client -connect api.example.com:443 -servername api.example.com -showcerts </dev/null 2>/dev/null | grep -c "BEGIN CERTIFICATE"

Если команда выводит 1, сервер отдаёт один сертификат без цепочки. Для Let's Encrypt правильно 2 и больше: файл fullchain.pem содержит оба. Подробнее: проверка цепочки сертификатов и устройство цепочки.

03 · 1 мин

Как проверять приложение с локальным https при разработке#

Эмулятор Android видит локальный сервер компьютера по адресу 10.0.2.2. Выпустите сертификат на это имя с помощью mkcert (SSL для localhost) и подключите корневой файл только в отладочной сборке. Для приложений с API 24 и выше сертификаты, добавленные пользователем вручную, по умолчанию не считаются доверенными, поэтому нужна явная настройка:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="@raw/debug_cas"/>
        </trust-anchors>
    </debug-overrides>
</network-security-config>

Файл лежит в res/xml/network_security_config.xml, подключается атрибутом android:networkSecurityConfig у тега application, а сертификат кладут в res/raw/debug_cas. В релизной сборке раздел игнорируется. Не отключайте проверку сертификата в коде и не принимайте любые сертификаты: приложение останется без защиты, а такой код легко попадает в релиз.

04 · 1 мин

Что такое закрепление сертификата и нужно ли оно приложению#

Закрепление (certificate pinning) заставляет приложение принимать только соединения с заранее известным ключом сервера. Обычная проверка верит любому центру из системного списка, закреплённая верит только вашему ключу. Это защита от выпуска поддельного сертификата на ваш домен, и нужна она банкам, платёжным и медицинским приложениям. Для каталога или новостей хватает обычной проверки.

Цена выше пользы там, где ключ меняют часто. У приложений на Android закрепление включается в той же конфигурации:

<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">api.example.com</domain>
        <pin-set expiration="2027-12-31">
            <pin digest="SHA-256">ОСНОВНОЙ_ХЕШ=</pin>
            <pin digest="SHA-256">ЗАПАСНОЙ_ХЕШ=</pin>
        </pin-set>
    </domain-config>
</network-security-config>

Хеш открытого ключа получают из сертификата, а запасной берут от ключа, который сейчас на сервере не используется:

openssl x509 -in cert.pem -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64

Документация Android советует всегда добавлять запасной ключ: без него смена ключа или центра ломает соединение, пока не выйдет обновление приложения. Дата окончания спасает приложения, которые не обновляются, но после неё закрепление перестаёт защищать. Certbot при продлении по умолчанию создаёт новый ключ, поэтому закреплять ключ листового сертификата Let's Encrypt без плана смены нельзя. В iOS закрепление включается ключом NSPinnedDomains в Info.plist (iOS 14 и новее). Если сервер должен проверять и само приложение, для этого есть клиентские сертификаты: mTLS.

Инструмент · 1 мин

Что проверить в сертификате API перед выпуском приложения#

Отметьте пункты: чек-лист покажет следующий шаг.

Чек-лист: сертификат API готов к релизу приложения

Отмечайте пункты по мере готовности, чек-лист подскажет следующий шаг

06 · 1 мин

Вопросы о сертификате для мобильного приложения#

Нужен ли отдельный SSL-сертификат для мобильного приложения?

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

Можно ли использовать самоподписанный сертификат в мобильном приложении?

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

Почему мобильное приложение выдаёт ошибку SSL, а сайт открывается в браузере?

Чаще всего сервер не отдаёт промежуточный сертификат: браузер его докачивает, библиотека приложения нет. Проверьте цепочку командой openssl и используйте fullchain.pem.

Что случится с приложением, если сертификат API истёк?

Запросы начнут завершаться ошибкой сразу у всех пользователей: окна «всё равно продолжить», как в браузере, в приложении нет. Включите автопродление и уведомление о сбое.

Почему этому можно верить

Как мы проверяли

Документация и провайдерыКоманды выпуска и установки сверены с документацией, дата указана.
Всё можно повторитьКоманды certbot и openssl описаны так, что их повторит любой читатель.
Независимый справочникНе связан с центрами сертификации и честно говорит, когда хватает бесплатного SSL.

Источники цифр на этой странице: SSL-сертификаты Таймвеб, timeweb.com/ru/services/domains/ssl, проверено 19 октября 2026; Let's Encrypt: документация, letsencrypt.org/docs, проверено 19 октября 2026; mkcert: README (установка, имена файлов, rootCA-key.pem, телефоны), github.com/FiloSottile/mkcert, проверено 19 октября 2026; Android Developers: Network security configuration (pin-set, debug-overrides, cleartext), developer.android.com/privacy-and-security/security-config, проверено 19 октября 2026.

SBРедакция SSLBase · обновлено 19 октября 2026

Подключите SSL к сайту

От бесплатного Let's Encrypt до платных сертификатов GlobalSign с гарантийной выплатой и установкой под ключ. Любой можно вернуть за 7 дней.

  • Бесплатный Let's Encrypt на домен
  • Платные от 1 000 ₽ за 6 месяцев
  • Wildcard на все поддомены
  • 7 дней на возврат
Чек-лист