Re: Использование signtool c Рутокен ЭЦП 3.0 с не экспортируемым сертифика

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

Re: Использование signtool c Рутокен ЭЦП 3.0 с не экспортируемым сертифика

eie пишет:

Добрый день. Подскажите, есть ли подвижки...

Попробуйте способ, описанный здесь - https://superuser.com/questions/1643401 … in-session

Нам удалось этим способом подписать файл в 1.6 ГБ (вся моя эпопея описана выше)

C:\Tools\PSTools\psexec -accepteula -u домен\пользователь -p пароль "C:\Program Files (x86)\Windows Kits\10\App Certification Kit\signtool.exe" sign /debug /fd sha256 /sha1 D4....77 /td SHA256 /tr http://timestamp.globalsign.com/tsa/r6advanced1 "myexe.exe"

Re: Использование signtool c Рутокен ЭЦП 3.0 с не экспортируемым сертифика

mdomnitch пишет:

Попробуйте способ, описанный здесь - https://superuser.com/questions/1643401 … in-session

Нам удалось этим способом подписать файл в 1.6 ГБ (вся моя эпопея описана выше)

C:\Tools\PSTools\psexec -accepteula -u домен\пользователь -p пароль "C:\Program Files (x86)\Windows Kits\10\App Certification Kit\signtool.exe" sign /debug /fd sha256 /sha1 D4....77 /td SHA256 /tr http://timestamp.globalsign.com/tsa/r6advanced1 "myexe.exe"

Здравствуйте! Спасибо за интересную идею! Всячески попробовал, покрутил, но, к сожалению, пока не удалось заставить работать, в момент выполнения psexec выходит ошибка "signtool exited with error code 1." :(

Re: Использование signtool c Рутокен ЭЦП 3.0 с не экспортируемым сертифика

eie пишет:
mdomnitch пишет:

Попробуйте способ, описанный здесь - https://superuser.com/questions/1643401 … in-session

Нам удалось этим способом подписать файл в 1.6 ГБ (вся моя эпопея описана выше)

C:\Tools\PSTools\psexec -accepteula -u домен\пользователь -p пароль "C:\Program Files (x86)\Windows Kits\10\App Certification Kit\signtool.exe" sign /debug /fd sha256 /sha1 D4....77 /td SHA256 /tr http://timestamp.globalsign.com/tsa/r6advanced1 "myexe.exe"

Здравствуйте! Спасибо за интересную идею! Всячески попробовал, покрутил, но, к сожалению, пока не удалось заставить работать, в момент выполнения psexec выходит ошибка "signtool exited with error code 1." :(

Еще раз спасибо mdomnitch за рабочую идею.
Удалось заставить GitLab подписывать файлы. Но не напрямую указывая в сценарии команды, а вызывая их из локального скрипта *.ps1.
Как выглядит подписывание:
Закидываем на раннер PSTools.
В локальной директории на раннере создаем скрипт, например, C:\Temp\script.ps1
следующего содержания:

C:\PSTools\PsExec.exe -accepteula -u Administrator -p pass "c:\Program Files (x86)\Windows Kits\10\bin\10.0.20348.0\x64\signtool.exe" sign /tr http://timestamp.globalsign.com/tsa/r6advanced1 /td SHA256 /fd SHA256 /sha1 b5***d8 /v C:\GitLab-Runner\builds\..\..\..\file.exe

и просто вызываем его в сценарии .gitlab-ci.yml

  script:
      -  C:\Temp\script.ps1

https://forum.rutoken.ru/uploads/images/2024/04/deec9873a80090f99fcef103cf067bc6.jpg

и еще интересным получился вариант удаленного ручного интерактивного подписывания (может кому пригодится):

PS C:\Users\User> C:\PSTools\PsExec.exe \\remote_host -accepteula -i -u Administrator -p pass "c:\Program Files (x86)\Windows Kits\10\bin\10.0.20348.0\x64\signtool.exe" sign /tr http://timestamp.globalsign.com/tsa/r6advanced1 /td SHA256 /fd SHA256 /sha1 b5***d8 /v C:\GitLab-Runner\builds\..\..\..\file.exe

без ключа -i не работало, токен при этом стоит в remote_host.
Конечно же, предварительно выполнены манипуляции для отключения пин-кода по инструкции тех. поддержки форума.

Re: Использование signtool c Рутокен ЭЦП 3.0 с не экспортируемым сертифика

Нашел решение проблемы с подписанием .dig-файлов без необходимости ручного ввода пин-кода:
https://forum.rutoken.ru/post/23493/#p23493
https://forum.rutoken.ru/post/22671/#p22671
https://forum.rutoken.ru/post/22673/#p22673

Вместо signtool используйте osslsigncode на линуксе (https://github.com/mtrojnar/osslsigncode).


На примере Debian 10, первым делом устанавливаем все нужные либы для рутокена, указанные в документации, проверяем, что токен подцепился, и запоминаем его серийный номер (понадобится дальше).

Также надо установить libengine-pkcs11-openssl, opensc, opensc-pkcs11.

Скачиваем SDK рутокена, в нём нужно найти либу <rutoken sdk>/pkcs11/lib/linux_glibc-x86_64/librtpkcs11ecp.so, для удобства сохраним этот путь в переменную:

export RUTOKEN_PKCS11_MODULE="<абсолютный путь к librtpkcs11ecp.so>"

Нужно получить ID сертификата, которым собираемся подписывать:

pkcs11-tool --module "$RUTOKEN_PKCS11_MODULE" -O -l

Будет запрошен пин-код, после чего выведен список всех ключей и сертификатов на токене. Находим нужный сертификат, запоминаем его ID, проверяем, что в списке ключей есть Private Key Object с таким же ID.

Теперь нам понадобится сама утилита osslsigncode — на новых дистрибутивах она может быть доступна в репозиториях, но на Debian 10 слишком старая версия, так что пришлось скомпилировать самостоятельно.

Первым делом проверяем, что osslsigncode вообще может подписать файл напрямую:

export PKCS11_CERT='pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;serial=<серийный номер токена>;id=<id сертификата>?pin-value=<пин-код>'

osslsigncode sign -pkcs11module "$RUTOKEN_PKCS11_MODULE" -pkcs11cert "$PKCS11_CERT" -in input.exe -out input.signed.exe

Где:

  • <серийный номер токена> должен быть сконвертирован в шестнадцатеричную систему (printf '%x\n' <десятичный номер>);

  • <id сертификата> должен быть разделен символом % через каждые два символа (например, если id был 12345678aabbccdd, то нужно указывать %12%34%56%78%aa%bb%cc%dd)

  • <пин-код> указываем как есть, если содержит только латиницу и цифры, иначе может понадобиться закодировать строчку в utf-8 и эскейпнуть байты аналогично id сертификата — это я не проверял.

Если всё получилось и на винде подпись бинарника отображается и валидна, можем пробовать подписать аналогично signtool /dg:

Генерируем файл с запросом на подпись на машине без токена (это может быть даже винда, т.к. osslsigncode доступен в MSYS2):

osslsigncode extract-data -h sha256 -in input.exe -out input.exe.p7s

Переносим файл input.exe.p7s на машину с токеном, и на ней вызываем:

osslsigncode sign -pkcs11module "$RUTOKEN_PKCS11_MODULE" -pkcs11cert "$PKCS11_CERT" -in input.exe.p7s -out input.exe.signature.p7b

В случае успеха будет сгенерирован файл подписи input.exe.signature.p7b, который переносим обратно на первую машину, после чего аттачим подпись к исходному бинарнику:

osslsigncode attach-signature -sigin input.exe.signature.p7b -CAfile globalsign.pem -h sha256 -in input.exe -out input.signed.exe

Обязательно нужно указывать файл с сертификатами CA, начиная от корневого и включая все промежуточные для вашего сертификата (их можно экспортировать из винды, сконвертировать каждый в PEM с помощью openssl, объединить их в один файл тупой конкатенацией в порядке от корневого к последнему из промежуточных). Для globalsign у меня в этом файле оказалось два сертификата — 1 корневой и 1 промежуточный.

Дальше можем добавить таймстамп с помощью osslsigncode, либо через signtool — как вам удобнее. У первого есть преимущество — поддерживает прокси, а вот signtool этого не умеет.

(2024-04-12 15:23:59 отредактировано Korsar13)

Re: Использование signtool c Рутокен ЭЦП 3.0 с не экспортируемым сертифика

В общем, аналогичная проблема с signtool.exe если работать через ssh.

Один и тот же юзер, запускаю через psexec -u builder -p ... -- подписывает как надо, подхватывая закэшированный пин-код.
запускаю через ssh builder@localhost -- SignTool Error: No private key is available.

И что делать? Jenkins билд-агенты поднимает через ssh, никакой графической сессии там нет.

Re: Использование signtool c Рутокен ЭЦП 3.0 с не экспортируемым сертифика

вроде бы для Microsoft Smart Card Key Storage Provider есть возможность через /kc подсунуть пин-код, и винда сама его передает токену: https://medium.com/@joshualipson/ev-cod … 00fb8e8be6

но я не нашел, каким образом надо составить параметр /kc чтобы работало с рутокеном.
пробовал /kc "[Aktiv Rutoken ECP 0{{12345678}}]=айди.контейнера" но не сработало
id контейнера -- вторая строчка сертификата в панели рутокена, либо можно запустить certutl -SCInfo и посмотреть в самом начале выдачи Key Container = ......

Re: Использование signtool c Рутокен ЭЦП 3.0 с не экспортируемым сертифика

Кажется, нашел воркараунд.

странный вариант

ssh builder@localhost psexec -u builder -p ПАРОЛЬ sign.cmd

работает (с потерей всего вывода, остается только проверка exit code)

Re: Использование signtool c Рутокен ЭЦП 3.0 с не экспортируемым сертифика

Добрый вечер!

Пытаюсь автоматизировать подпись для интеграции в наш CI/CD. Вручную подпись проходит без проблем, запрашивает PIN, после чего ввожу и все отрабатывает.

Хотелось бы узнать есть ли способ автоматизировать процесс? Попробовал разные варианты, которые писали здесь, но что-то ничего не помогло.

Re: Использование signtool c Рутокен ЭЦП 3.0 с не экспортируемым сертифика

Здравствуйте andrei.aliashkevich, ответил вам на почту указанную при регистрации.

Re: Использование signtool c Рутокен ЭЦП 3.0 с не экспортируемым сертифика

Отлично, спасибо!

Re: Использование signtool c Рутокен ЭЦП 3.0 с не экспортируемым сертифика

Здравствуйте!

Также пытаюсь встроить подпись кода в gitlab CI/CD. Вручную подписать получается (подключаюсь к раннеру по rdp), в пайплайне нет.

Пыталась изменять пользователя из под которого запускается служба gitlab-runner и пробовала запускать локальный powershell скрипт. В обоих случаях процесс зависает, я так понимаю, что ожидает ввода пароля.

Прочитала, что техподдержка высылает инструкции по отключению пин кода. Могу я их тоже получить?

Re: Использование signtool c Рутокен ЭЦП 3.0 с не экспортируемым сертифика

Maria Nikonova, отправил вам инструкцию на почту указанную при регистрации.

Re: Использование signtool c Рутокен ЭЦП 3.0 с не экспортируемым сертифика

спасибо!

Re: Использование signtool c Рутокен ЭЦП 3.0 с не экспортируемым сертифика

Здравствуйте!

У меня не получается подписывать файлы с помощью signtool, если сертификат зарегистрирован через "Aktiv ruToken CSP v1.0".
При этом, если его перерегистрировать через "Microsoft Base Smart Card Crypto Provider", то подпись работает. Но в этом случае, я не могу кэшировать пин по инструкции, которую мне выслали, а мне нужно встроить подпись кода в CI/CD.

Для экспорта из  реестра и записи на рутокен использовала инструкцию: https://dev.rutoken.ru/pages/viewpage.a … d=94570411.
Подскажите пожалуйста, что я не так делаю?