Документация
ОС Аврора 5.0.1

rpmsign-external

Пакет rpmsign-external-tool предоставляет библиотеку и утилиту командной строки rpmsign-external для подписывания установочных пакетов приложений ОС Аврора.

Подписание пакета

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

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

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

При выполнении команды потребуется ввести кодовую фразу ключа. Чтобы избежать необходимости интерактивного ввода (например, при сборке в конвейере CI/CD), кодовая фраза может быть задана в переменной окружения KEY_PASSPHRASE:

KEY_PASSPHRASE=12345678 rpmsign-external sign \
	--key {key}.pem \
	--cert {cert}.pem \
	{package_name}.rpm

Иногда может потребоваться заменить существующую подпись новой (например, если используются отдельные ключи разработки и производства). Это можно сделать с помощью флага --force:

rpmsign-external sign \
	--force \
	--key {key}.pem \
	--cert {cert}.pem \
	{package_name}.rpm

Если в пакете нет подписей, --force будет действовать так же, как обычная команда sign. Но когда пакет уже подписан, все подписи до типа предоставленного сертификата будут удалены.

То есть:

  • Если был предоставлен сертификат разработчика, то подписи разработчика и источника будут удалены.
  • Если был предоставлен сертификат источника, то будет удалена только подпись источника (подпись разработчика останется нетронутой).

Подписание нескольких пакетов

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

rpmsign-external sign \
	--key {key}.pem \
	--cert {cert}.pem \
	{package_1}.rpm ... {package_N}.rpm

По умолчанию, подписание будет выполняться параллельно с максимальным количеством заданий, установленным на getconf _NPROCESSORS_ONLN. Переопределить это поведение можно с помощью параметра --jobs, например:

rpmsign-external sign \
	--jobs 2 \
	--key {key}.pem \
	--cert {cert}.pem \
	{package_1}.rpm ... {package_N}.rpm

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

Нужно иметь в виду, что все другие команды, связанные с пакетами (delete, verify, dump) также принимают несколько пакетов одновременно, но только подписание работает параллельно.

Если необходимо подписать большое количество пакетов (например, целый репозиторий), то один из самых простых способов подписать их все — выполнить следующую команду:

find . -name "*.rpm" -exec rpmsign-external sign \
	-k {key}.pem \
	-c {cert}.pem \
	{} +

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

Чтобы проверить подпись пакета, необходимо указать путь к корневому сертификату CA (например, ca.pem):

rpmsign-external verify \
	--root-cert ca.pem \
	{package_name}.rpm

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

rpmsign-external dump
	{package_name}.rpm

Удаление подписи из пакета

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

rpmsign-external delete -l {package_name}.rpm

Для удаления всех подписей из пакета:

rpmsign-external delete {package_name}.rpm

Ротация ключей

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

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

  • закрытый ключ старого подписывающего лица old-key.pem;
  • старый сертификат подписавшего old-cert.pem;
  • закрытый ключ нового подписавшего key.pem;
  • сертификат нового подписывающего лица cert.pem.

Чтобы сгенерировать цепочку подтверждения ротации, необходимо выполнить следующую команду:

rpmsign-external rotate \
	--old-key old-key.pem \
	--old-cert old-cert.pem \
	--new-key key.pem \
	--new-cert cert.pem \
	--out rotation-chain.pem

После создания цепочки подтверждения ротации rotation-chain.pem её можно использовать при подписании пакета:

rpmsign-external sign \
	--key key.pem \
	--cert cert.pem \
	--rotate rotation-chain.pem \
	{package_name}.rpm

Не нужно создавать этот файл перед каждым подписанием. Его нужно сгенерировать один раз, а затем использовать везде, где потребуется подписать пакет.

Если все пакеты были обновлены, старый ключ заменён на новый, можно прекратить включать цепочку ротации в подпись. Иногда требуется обеспечить максимальную совместимость, чтобы иметь возможность обновлять даже самую старую версию пакета, например, ротация от key A к key B, а затем к key C — и этого можно достигнуть, добавив предыдущую цепочку подтверждений ротации к новой:

rpmsign-external rotate \
	--old-key {key-A}.pem \
	--old-cert {cert-A}.pem \
	--new-key {key-B}.pem \
	--new-cert {cert-B}.pem \
	--out {rotation-chain-A-B}.pem

rpmsign-external rotate \
	--prepend {rotation-chain-A-B}.pem \
	--old-key {key-B}.pem \
	--old-cert {cert-B}.pem \
	--new-key {key-C}.pem \
	--new-cert {key-C}.pem \
	--out {rotation-chain-A-B-C}.pem

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.