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
Для подписи кода OV/IV вы можете использовать сертификат, хранящийся в хранилище ключей Java или файле PKCS#12 (PFX). Во всех примерах кода ниже замените значения, показанные ЗАГЛАВНЫМИ БУКВАМИ, фактическими значениями.
- Сначала используйте
keytool
команда, чтобы получитьalias
значение для использования при подписании:keytool -list -v -keystore PKCS12-FILE.p12 -storetype PKCS12 -storepass PKCS12-ПАРОЛЬ
- Проверьте вывод вашего
keytool
команда для строки, начинающейся сAlias name:
.Тип хранилища ключей: PKCS12 Поставщик хранилища ключей: SUN Хранилище ключей содержит 1 запись Псевдоним: 1 Дата создания: 18 января 2021 г. Тип записи: PrivateKeyEntry Длина цепочки сертификатов: 4 ...
В приведенном выше примере
Alias name
is1
. - Используйте команду, подобную следующей, чтобы подписать файл и поставить отметку времени:
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- ПОДПИСАТЬ
- Если ваша команда выполнена успешно, вы должны увидеть следующий результат:
Добавление подписи Authenticode в example.exe
Если вы столкнулись с этой ошибкой:
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-токен.
- Сначала убедитесь, что OpenSC установлен в вашей системе, поэтому он может связываться с вашим токеном через API PKCS # 11. В дистрибутивах на основе Debian, таких как Ubuntu, вы можете установить OpenSC с
apt
:sudo apt установить opensc
- Затем создайте файл конфигурации. Имя файла произвольно, но для приведенных ниже примеров команд мы будем использовать
eToken.cfg
. Обратите внимание, что путь кopensc-pkcs11.so
может отличаться в зависимости от вашей установки OpenSC, поэтому проверьте перед созданием файла конфигурации.name = OpenSC-PKCS11 description = SunPKCS11 через библиотеку OpenSC = /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so slotListIndex = 0
- Использовать
keytool
команда, чтобы получитьalias
значение для использования при подписании:keytool -list -v -keystore НЕТ -storetype PKCS11 -storepass TOKEN-PIN -providerClass sun.security.pkcs11.SunPKCS11 -providerArg eToken.cfg
- Проверьте вывод вашего
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
- Используйте команду, подобную следующей, чтобы подписать файл и поставить отметку времени:
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 -ПОДПИСЫВАТЬ
- Если ваша команда выполнена успешно, вы должны увидеть следующий результат:
Добавление подписи Authenticode в example.exe
Если вы столкнулись с этой ошибкой:
The timestamp certificate does not meet a minimum public key length requirement
, вам следует обратиться к поставщику программного обеспечения, чтобы разрешить временные метки из ключей ECDSA.Если ваш поставщик программного обеспечения не может разрешить использование обычной конечной точки, вы можете использовать эту устаревшую конечную точку.
http://ts.ssl.com/legacy
чтобы получить временную метку из модуля временных меток RSA.Проверить цифровую подпись
- Вы можете убедиться, что ваша цифровая подпись действительна, просмотрев сведения о подписи в Windows.
- Вы также можете использовать ЗнакИнструмент в 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