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

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

Назначение Алгоритм Имя файла закрытого ключа по умолчанию Имя файла запроса на сертификат по умолчанию Имя файла сертификата по умолчанию
1 Подпись бинарных файлов и библиотек внутри RPM-пакета RSA 2048 binaries-key.pem binaries-csr.pem binaries-cert.pem
2 Подпись RPM-пакетов ГОСТ Р 34.10-2012 (256 бит) packages-key.pem packages-csr.pem packages-cert.pem
3 Подпись RPM-пакетов (от имени клиента) ГОСТ Р 34.10-2012 (256 бит) packages-key.pem packages-csr.pem packages-client-cert.pem

Приведённые в этом руководстве команды следует выполнять в среде сборки, кроме тех, для которых явно указано, что они должны быть выполнены на устройстве. На устройстве команды из этого руководства следует запускать с правами суперпользователя, которые можно получить, выполнив devel-su и указав пароль пользователя nemo, заданный в настройках режима разработчика.

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

  • {package_name}.rpm — установочный пакет ПО;
  • {binaries_key}.pem — закрытый ключ подписи бинарных файлов;
  • {packages_key}.pem — закрытый ключ подписи пакетов;
  • {binaries_cert}.pem — сертификат подписи бинарных файлов;
  • {binaries_cert}.der — сертификат подписи бинарных файлов (в формате DER);
  • {packages_cert}.pem — сертификат подписи пакетов.
  • {packages_client_cert}.pem — сертификат подписи пакетов от имени компании-клиента.

Получение сертификатов

Для генерации ключевых пар и запросов на сертификаты используется команда:

customer-gen-csrs \
    --common-name "{company_name}" \
    --binaries-key {binaries_key}.pem \
    --packages-key {packages_key}.pem

где {company_name} — название компании.

В процессе выполнения команды запрашиваются пароли для шифрования файлов с закрытыми ключами. Результатом работы скрипта, кроме указанных файлов ключей, станут два файла запросов в рабочей директории: binaries-csr.pem и packages-csr.pem. Полученные файлы запросов (но не файлы ключей) необходимо передать полномочному представителю компании ООО «Открытая мобильная платформа», а взамен — получить подписанные файлы сертификатов: binaries-cert.pem, binaries-cert.der и packages-cert.pem.

Если компания-разработчик планирует проводить тестирование ПО на целевой сертифицированной версии ОС Аврора, дополнительно потребуется сертификат компании-клиента для подписи RPM-пакета. Чтобы получить сертификат компании-клиента packages-client-cert.pem, нужно также запросить его у полномочного представителя компании ООО «Открытая мобильная платформа». Создавать дополнительные ключи и запросы на сертификат для этого не нужно.

Корневые сертификаты ООО «Открытая мобильная платформа» доступны по ссылкам: rootcacert-omp.pem, ima-root-ca.x509.pem.

Их можно загрузить командами:

curl -L http://community.omprussia.ru/files/doc/rootcacert-omp.pem -o rootcacert-omp.pem
curl -L http://community.omprussia.ru/files/doc/ima-root-ca.x509.pem -o ima-root-ca.x509.pem

Проверка сертификатов

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

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

echo "test" > testfile
openssl smime -sign \
    -in testfile \
    -signer {binaries_cert}.pem \
    -inkey {binaries_key}.pem \
    -out testfile.sig
openssl smime -verify \
    -in testfile.sig \
    -signer {binaries_cert}.pem \
    -CAfile ima-root.ca.x509.pem

Аналогично для проверки сертификата подписи пакетов:

echo "test" > testfile
openssl smime -sign \
    -in testfile \
    -signer {packages_cert}.pem \
    -inkey {packages_key}.pem \
    -out testfile.sig.gost
openssl smime -verify \
    -in testfile.sig.gost \
    -signer {packages_cert}.pem \
    -CAfile rootcacart-omp.pem

Проверка сертификата компании-клиента происходит так же, только вместо {packages_cert}.pem используется {packages_client_cert}.pem.

Установка сертификатов

На целевом устройстве сертификат компании-разработчика {binaries_cert}.der должен быть расположен в директории /etc/keys/ima и присутствовать в выводе команды

# cat /proc/keys

Если директория /etc/keys/ima отсутствует, её нужно создать, например, выполнив на устройстве:

# mkdir /etc/keys
# mkdir /etc/keys/ima

После копирования файла сертификата потребуется его регистрация, которая может быть осуществлена с помощью перезагрузки устройства или выполнения на нём команды

# /usr/libexec/ima/load-certificates

Подпись приложения

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

customer-sign \
    --binaries-key {binaries_key}.pem \
    --packages-key {packages_key}.pem \
    --packages-cert {packages_cert}.pem \
    {package_name}.rpm

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

Если требуется, подпись от имени компании-клиента может быть добавлена командой:

ompcert-cli sign {package_name}.rpm {packages_key}.pem {packages_client_cert}.pem

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

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

rpm -q --qf  '[%{FILENAMES}\n%{FILESIGNATURES}\n]' {package_name}.rpm | grep -A1 /usr/bin/ | tail -n 1 | cut -c 7-14

Результатом её работы будут четыре байта, например, такие: de39e183. Такая же последовательность байтов должна присутствовать в выводе команды, выполненной на целевом устройстве с установленным сертификатом {binaries_cert}.der:

# cat /proc/keys

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

openssl rsa -outform DER -RSAPublicKey_out -in {binaries_key}.pem | openssl dgst -sha1 -hex | sed 's/.*\(........\)$/\1/'

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

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

  • просмотр важных атрибутов подписи (имени субъекта, метки и ID ключа):
ompcert-cli dump {package_name}.rpm
  • проверка подписи:
ompcert-cli verify {package_name}.rpm -r rootcacert-omp.pem

Запуск на устройстве

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

Перед установкой на устройство с целевой сертифицированной ОС, приложение проходит валидацию непосредственно на устройстве. Если валидация не будет пройдена успешно, приложение не установится.

Чтобы избежать ошибок при установке, рекомендуется проверить проект приложения c помощью Валидатора RPM-пакетов.