Подписание кода Microsoft Authenticode в Linux с помощью Jsign

Jsign это независимый от платформы Java-инструмент с открытым исходным кодом для подписи кода Microsoft Authenticode. Jsign легко интегрируется с системами сборки, такими как Maven, Gradle и Ant, или может использоваться непосредственно из командной строки.

В этом руководстве мы рассмотрим использование Jsign из командной строки Linux для Подпись кода OV / IV и Подпись кода EV. Поскольку Jsign основан на Java, вы также можете использовать его в системах Windows и MacOS.

Установить Jsign

Сначала вам нужно скачать и установить Jsign. В Сайт Jsign включает ссылки на пакеты Debian и RPM для легкой установки в большинстве популярных систем Linux, а также .jar .

Подпись кода OV / IV

Этот раздел относится только к сертификатам подписи кода индивидуальной проверки (IV) и проверки организации (OV), которые были заказаны до 1 июня 2023 года. С 1 июня 2023 г., сертификаты SSL.com для подписи кода IV и OV начали выдаваться либо на USB-токенах Федерального стандарта обработки информации 140-2 (FIPS 140-2), либо через нашу облачную службу подписи кода eSigner. 

Для подписи кода OV/IV вы можете использовать сертификат, хранящийся в хранилище ключей Java или файле PKCS#12 (PFX). Во всех примерах кода ниже замените значения, показанные ЗАГЛАВНЫМИ БУКВАМИ, фактическими значениями.

  1. Сначала используйте keytool команда, чтобы получить alias значение для использования при подписании:
    keytool -list -v -keystore PKCS12-FILE.p12 -storetype PKCS12 -storepass PKCS12-ПАРОЛЬ
  2. Проверьте вывод вашего keytool команда для строки, начинающейся с Alias name:.
    Тип хранилища ключей: PKCS12 Поставщик хранилища ключей: SUN Хранилище ключей содержит 1 запись Псевдоним: 1 Дата создания: 18 января 2021 г. Тип записи: PrivateKeyEntry Длина цепочки сертификатов: 4 ...

    В приведенном выше примере Alias name is 1.

  3. Используйте команду, подобную следующей, чтобы подписать файл и поставить отметку времени:
    • jsign команда установлена ​​в масштабе всей системы:
      jsign --keystore KEYSTORE.p12 --alias Псевдоним-ИМЯ --storetype PKCS12 --storepass PKCS12-ПАРОЛЬ --tsaurl http://ts.ssl.com --tsmode RFC3161 FILE-TO-SIGN
    • С Jsigner .jar файл:
      java -jar jsign-3.1.jar --keystore KEYSTORE.p12 --alias ALIAS-NAME --storetype PKCS12 --storepass PKCS12-PASSWORD --tsaurl http://ts.ssl.com --tsmode RFC3161 FILE-TO- ПОДПИСАТЬ
  4. Если ваша команда выполнена успешно, вы должны увидеть следующий результат:
    Добавление подписи Authenticode в example.exe
Примечание: По умолчанию SSL.com поддерживает метки времени из ключей ECDSA.

Если вы столкнулись с этой ошибкой: The timestamp certificate does not meet a minimum public key length requirement, вам следует обратиться к поставщику программного обеспечения, чтобы разрешить временные метки из ключей ECDSA.

Если ваш поставщик программного обеспечения не может разрешить использование обычной конечной точки, вы можете использовать эту устаревшую конечную точку. http://ts.ssl.com/legacy чтобы получить временную метку из модуля временных меток RSA.

Подпись кода EV

Вы также можете использовать Jsign с сертификатом подписи кода EV. В данном примере используется SSL.com Сертификат подписи кода EV установлен на Ключ безопасности с проверкой FIPS 140-2 USB-токен.

  1. Сначала убедитесь, что OpenSC установлен в вашей системе, поэтому он может связываться с вашим токеном через API PKCS # 11. В дистрибутивах на основе Debian, таких как Ubuntu, вы можете установить OpenSC с apt:
    sudo apt установить opensc
  2. Затем создайте файл конфигурации. Имя файла произвольно, но для приведенных ниже примеров команд мы будем использовать eToken.cfg. Обратите внимание, что путь к opensc-pkcs11.so может отличаться в зависимости от вашей установки OpenSC, поэтому проверьте перед созданием файла конфигурации.
    name = OpenSC-PKCS11 description = SunPKCS11 через библиотеку OpenSC = /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so slotListIndex = 0
  3. Использовать keytool команда, чтобы получить alias значение для использования при подписании:
    keytool -list -v -keystore НЕТ -storetype PKCS11 -storepass TOKEN-PIN -providerClass sun.security.pkcs11.SunPKCS11 -providerArg eToken.cfg
  4. Проверьте вывод вашего keytool команда для строки, начинающейся с Alias name:. Если ваш токен содержит несколько сертификатов, проверьте даты действия и эмитента в выходных данных по вашему сертификату. Обратите внимание, что сертификаты подписи кода EV, выпущенные на YubiKey с SSL.com, должны иметь псевдоним Certificate for PIV Authentication.
    Псевдоним: Сертификат для аутентификации PIV Тип записи: PrivateKeyEntry Длина цепочки сертификатов: 1 Сертификат [1]: Владелец: OID.1.3.6.1.4.1.311.60.2.1.3 = US, OID.1.3.6.1.4.1.311.60.2.1.2 .2.5.4.15 = Невада, OID. 20081614243 = Частная организация, CN = SSL Corp, СЕРИЙНЫЙ НОМЕР = NV2, O = SSL Corp, L = Хьюстон, ST = TX, C = США. Эмитент: CN = SSL.com EV Code Signing Intermediate. CA RSA R7299, O = SSL Corp, L = Хьюстон, ST = Техас, C = США Серийный номер: 93f57a3bac6570c781580f63172e17 Действителен с: Пт, 12 апреля, 46:04:2020 EDT 17 до: Сб, 12 апреля 46:04:2021 EDT XNUMX
  5. Используйте команду, подобную следующей, чтобы подписать файл и поставить отметку времени:
    • jsign команда установлена ​​в масштабе всей системы:
      jsign --keystore eToken.cfg --alias "Сертификат для аутентификации PIV" --storetype PKCS11 --storepass TOKEN-PIN --tsaurl http://ts.ssl.com --tsmode RFC3161 FILE-TO-SIGN
    • С Jsigner .jar файл:
      java -jar jsign-3.1.jar --keystore eToken.cfg --alias «Сертификат для аутентификации PIV» --storetype PKCS11 --storepass TOKEN-PIN --tsaurl http://ts.ssl.com --tsmode ФАЙЛ RFC3161 -ПОДПИСЫВАТЬ
  6. Если ваша команда выполнена успешно, вы должны увидеть следующий результат:
    Добавление подписи Authenticode в example.exe
Примечание: По умолчанию SSL.com поддерживает метки времени из ключей ECDSA.

Если вы столкнулись с этой ошибкой: The timestamp certificate does not meet a minimum public key length requirement, вам следует обратиться к поставщику программного обеспечения, чтобы разрешить временные метки из ключей ECDSA.

Если ваш поставщик программного обеспечения не может разрешить использование обычной конечной точки, вы можете использовать эту устаревшую конечную точку. http://ts.ssl.com/legacy чтобы получить временную метку из модуля временных меток RSA.

Проверить цифровую подпись

  1. Вы можете убедиться, что ваша цифровая подпись действительна, просмотрев сведения о подписи в Windows.
    Цифровая подпись в порядке
  2. Вы также можете использовать ЗнакИнструмент в Windows для проверки цифровой подписи.
    signtool.exe verify / pa 'C: \ Users \ Aaron Russell \ Desktop \ example.exe' Файл: C: \ Users \ Aaron Russell \ Desktop \ example.exe Метка времени алгоритма индекса =========== ============================= 0 sha256 RFC3161 Успешно проверено: C: \ Users \ Aaron Russell \ Desktop \ example.exe

Подпишитесь на рассылку новостей SSL.com

Не пропустите новые статьи и обновления с SSL.com

Будьте в курсе и будьте в безопасности

SSL.com является мировым лидером в области кибербезопасности, PKI и цифровые сертификаты. Подпишитесь, чтобы получать последние новости отрасли, советы и анонсы продуктов от SSL.com.

Мы будем рады вашим отзывам

Пройдите наш опрос и поделитесь с нами своими мыслями о своей недавней покупке.