Подписание установочных пакетов

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

Используются следующие обозначения:

{package_name}.rpm
Установочный пакет ПО.
{key}.pem
Закрытый ключ подписи пакетов.
{cert}.pem
Сертификат подписи пакетов.
{cert_client}.pem
Сертификат подписи пакетов от имени компании-клиента.
Назначение Алгоритм Файл закрытого ключа Файл запроса Файл сертификата
Подписание RPM-пакетов ГОСТ Р 34.10-2012 (256 бит) {key}.pem csr.pem {cert}.pem
Подписание RPM-пакетов от имени клиента ГОСТ Р 34.10-2012 (256 бит) {key}.pem csr.pem {cert_client}.pem

Для подписания пакета необходимы:

  • Сертификат подписывающей стороны ({cert}.pem). Для получения сертификата см. раздел Выпуск сертификата.
  • Закрытый ключ подписывающей стороны ({key}.pem). Для создания ключа см. раздел Генерация ключа.

Для разработки и отладки можно использовать публичные ключевые пары.

Необходимые утилиты

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

  • rpmsign-external-tool;
  • OpenSSL (не требуется для подписания пакетов, но используется при генерации запроса на получение сертификата и генерации ключей).

Публичные ключевые пары

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

Для каждого профиля валидации используется своя пара. Для профиля regular ключ и сертификат можно скачать свободно: regular_key.pem, regular_cert.pem. Ключи для других профилей можно запросить, отправив письмо на dev-support@omp.ru.

Генерация ключа

Чтобы сгенерировать ключ RSA (2048), нужно выполнить следующую команду:

$ openssl genpkey \
    -engine gost \
    -algorithm rsa \
    -pkeyopt rsa_keygen_bits:2048 \
    -out {key}.pem
    -aes256

В процессе выполнения команды запрашиваются пароли для шифрования файла с закрытым ключом.

После выполнения команды ключ будет сохранён в файл {key}.pem.

Подробнее про генерацию ключа см. openssl genpkey.

Выпуск сертификата

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

Чтобы получить сертификат, разработчик должен сначала сгенерировать CSR (запрос на сертификат для подписания пакетов).

Чтобы создать запрос на получение сертификата, нужно подготовить файл настроек запроса csr.conf, который имеет следующий вид:

[ req ]
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = v3_usr

[ req_distinguished_name ]
CN = {COMMON_NAME}

[ v3_usr ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid

{COMMON_NAME} следует заменить на доменное имя сайта компании. Например, для компании «Открытая мобильная платформа»‎, официальный сайт которой находится по адресу omp.ru, в качестве {COMMON_NAME} используется omp.ru.

Затем необходимо сгенерировать файл запроса:

openssl req -new -utf8 -batch \
    -config csr.conf \
    -key {key}.pem \
    -out {csr}.pem

После выполнения команды запрос будет сохранен в файл {csr}.pem. Этот файл (но не файл ключа) необходимо отправить письмом на dev-support@omp.ru. В ответ будет прислан сгенерированный файл {cert}.pem.

Подробнее про генерацию файла запроса см. openssl req.

Подписание установочного файла

Чтобы подписать пакет, нужно выполнить следующую команду:

rpmsign-external sign \
    --key {key}.pem \
    --cert {cert}.pem \
    {package-name}.rpm

При выполнении команды потребуется ввести кодовую фразу ключа.

Подробнее про генерацию файла запроса см. rpmsign-external sign.

Проверка подписи приложения

Просмотр важных атрибутов подписи (имени субъекта, метки и ID ключа):

$ rpmsign-external dump {package_name}.rpm

Проверка подписи:

$ rpmsign-external verify -r rootcacert-omp.pem {package_name}.rpm

Подробнее про верификацию файла запроса см. rpmsign-external verify.

Подписание приложений в Aurora IDE

Aurora IDE не предоставляет функций для создания ключей и запросов на получение сертификата разработчика, эти задачи необходимо решать при помощи утилит командной строки, как описано выше.

Функция подписания приложения перед его установкой на устройство управляется из Aurora IDE, для этого необходимо:

  1. Переключить IDE в режим «Проекты» и открыть настройки запуска необходимого комплекта для сборки.

  2. Выбрать метод запуска. Подписание пакетов приложения доступно только для следующих методов:

    • «Build RPM Package For Manual Deployment»;
    • «Deploy As RPM Package».
  3. Включить подписание RPM-пакета нажатием кнопки (см. скриншот).

    Настройка подписания в Aurora IDE

  4. Раскрыть вкладку «RPM Sign» нажатием кнопки «Подробнее» и указать:

    • путь к файлу ключа {key}.pem;
    • путь к файлу сертификата {cert}.pem.