(2024-08-14 10:36:06 отредактировано djonik1562)

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

Добрый день, коллеги.
Подскажите, а как вы организовали сборку и подпись через CI/CD?
У меня всё это было на самом сервере через файл pfx, а сейчас сертификат перевыпустили, с токеном. И токен на самом сервере не работает.
Пока создание виртуалки на сервере, подключение токена туда, подключение к ней агента сборки и подписи на этой виртуалке я не вижу решения.
Как вы решаете эту проблему, подключения токена к машине с интерактивной сессией и консоли?

georgiy.karpov пишет:

Добрый день!

Ранее здесь уже неоднократно обсуждали проблему подписи из-под службы Windows для автоматизации CI/CD. У меня аналогичная ситуация – подпись работает, только если signtool запускается в интерактивной сессии.

Имеется команда

signtool.exe sign /n xxxx /debug C:\sign\assembly.dll

Если её запускать из командной строки (руками), то всё работает. При чём, даже если вызывать команду через runas без загрузки профиля (runas /noprofile). Вывод:

The following certificates were considered: ...

After EKU filter, 1 certs were left.
After expiry filter, 1 certs were left.
After Subject Name filter, 1 certs were left.
After Private Key filter, 1 certs were left.
The following certificate was selected: xxxx

Done Adding Additional Store
Successfully signed: C:\sign\assembly.dll

Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0

Если вызывать её через службу Windows (создать службу при помощи NSSM для signtool или же батника), то закрытый ключ не находится, и в любой комбинации инструментов вывод получается следующим:

The following certificates were considered: ...

After EKU filter, 1 certs were left.
After expiry filter, 1 certs were left.
After Subject Name filter, 1 certs were left.
After Private Key filter, 0 certs were left.
SignTool Error: No certificates were found that met all the given criteria.

В свойствах службы указан пользователь, в хранилище которого установлен сертификат.

Галочка "Разрешить взаимодействие с рабочим столом" в свойствах службы на поведение signtool не повлияла (добавлял системной УЗ сертификат в хранилище сертификатов для этого эксперимента).

К слову, в статье https://dev.rutoken.ru/pages/viewpage.a … =169967624 описано подписание из-под службы Windows, но по факту это не работает, ошибка та же.
Утилита psexec тоже не помогает.

Целевое решение – CI/CD с подписью кода на основе: Jenkins + signtool + Рутокен. В идеале на built-in node , хотя через агента тоже допустимо. Сейчас можно заставить это работать только подключившись к рабочему столу Windows-машины и запустив на ней агента через командную строку руками. Если же агент запускается службой или пытаться подписывать на built-in node (основной Jenkins в виде службы), то закрытый ключ находиться не будет.

Подскажите, пожалуйста, существует ли решение этой распространённой задачи по автоматизации подписи кода при помощи "Рутокен ЭЦП 3.0"?

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

djonik1562 пишет:

Добрый день, коллеги.
Подскажите, а как вы организовали сборку и подпись через CI/CD?

Есть утилита jsign, которую предлагает использовать GlobalSign, как средство подписи: https://support.globalsign.com/code-sig … rutoken-30

Это способ, не требующий каких-то специальных настроек для работы с PIN и работает как под Windows, так и в Linux.

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

anatolyb пишет:
djonik1562 пишет:

Добрый день, коллеги.
Подскажите, а как вы организовали сборку и подпись через CI/CD?

Есть утилита jsign, которую предлагает использовать GlobalSign, как средство подписи: https://support.globalsign.com/code-sig … rutoken-30

Это способ, не требующий каких-то специальных настроек для работы с PIN и работает как под Windows, так и в Linux.

Я это понимаю. Но у меня из-за того что сервер в ДЦ, не работает токен в принципе. Ни через signtool ни через jsign.
Я пробовал второй способ от GlobalSign, и у меня на шаге получения списка сертификатов - не находит ничего.

(2024-08-15 11:20:46 отредактировано anatolyb)

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

djonik1562 пишет:

Я пробовал второй способ от GlobalSign, и у меня на шаге получения списка сертификатов - не находит ничего.

Токен физически вставлен в сервер или где находится? Попробуйте получить список под пользователем SYSTEM.

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

anatolyb пишет:
djonik1562 пишет:

Я пробовал второй способ от GlobalSign, и у меня на шаге получения списка сертификатов - не находит ничего.

Токен физически вставлен в сервер или где находится? Попробуйте получить список под пользователем SYSTEM.

Токен да, физически вставлен в сервер.
А как получить список от SYSTEM? я cmd запускаю от админа и в ней пробую.

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

djonik1562 пишет:

А как получить список от SYSTEM? я cmd запускаю от админа и в ней пробую.

Я попробовал под SYSTEM (и под другими аккаунтами), с ходу не получилось.

Из "простых решений" остается -- или запускать в интерактивной сессии (не RDP), или запускать на Linux.

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

anatolyb пишет:
djonik1562 пишет:

А как получить список от SYSTEM? я cmd запускаю от админа и в ней пробую.

Я попробовал под SYSTEM (и под другими аккаунтами), с ходу не получилось.

Из "простых решений" остается -- или запускать в интерактивной сессии (не RDP), или запускать на Linux.

Хотя нет, нашел проблему, токен не пробросился в виртуальную машину.

После устранения проблемы все работает. По сути, Рутокен виден службам или задачам из планировщика заданий Windows.

Проверял командой:

pkcs11-tool --module rtPKCS11ECP.dll --list-objects >> scan.txt 2>&1

потом смотрел содержимое scan.txt.

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

anatolyb пишет:
anatolyb пишет:
djonik1562 пишет:

А как получить список от SYSTEM? я cmd запускаю от админа и в ней пробую.

Я попробовал под SYSTEM (и под другими аккаунтами), с ходу не получилось.

Из "простых решений" остается -- или запускать в интерактивной сессии (не RDP), или запускать на Linux.

Хотя нет, нашел проблему, токен не пробросился в виртуальную машину.

После устранения проблемы все работает. По сути, Рутокен виден службам или задачам из планировщика заданий Windows.

Проверял командой:

pkcs11-tool --module rtPKCS11ECP.dll --list-objects >> scan.txt 2>&1

потом смотрел содержимое scan.txt.

Ну я и буду на сервере создавать виртуалку, туда пробрасывать токен и там подписывать.

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

djonik1562 пишет:

Ну я и буду на сервере создавать виртуалку, туда пробрасывать токен и там подписывать.

Подытоживая, при подключении по RDP токен не виден. Но службам или программам из планировщика он виден.

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

anatolyb пишет:
djonik1562 пишет:

Ну я и буду на сервере создавать виртуалку, туда пробрасывать токен и там подписывать.

Подытоживая, при подключении по RDP токен не виден. Но службам или программам из планировщика он виден.

Спасибо Вам большущее! Просто огромное за это сообщение! Я упускал слона во всех обсуждениях видимо, пытался увидеть и попробовать от пользователя. И вот я сборку запустил от имени NetworkService а не от моего пользователя, и там уже ключ действительно читается!
Спасибо огромное!

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

Здравствуйте.
На днях получили новый сертификат на токен и теперь при билде ПО с автоматизацией подписания через signtool есть проблемы в связи с необходимостью ввода PIN.
Про java читал, но смущают отзывы, что там подписание работает в разы медленнее signtool.

Вышлите, пожалуйста, инструкцию по кэшированию PIN хранилища токена для подписания через signtool.

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

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

(2024-09-09 16:39:27 отредактировано alexander.kholodov.90)

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

Добрый день.

Ранее мы использовали SafeNet eToken и команду для подписи

signtool sign /f mycert.cer /csp "eToken Base Cryptographic Provider" /k "[{{TokenPasswordHere}}]=KeyContainerNameHere" myfile.exe

Это работало. Решение подсмотрели на https://stackoverflow.com/a/54439759

После перехода на Rutoken аналогичная команда перестала работать. В TokenPasswordHere указываем значение PIN. В KeyContainerNameHere идентификатор контейнера. Оба корректные. В качестве криптоправайдера пробовали и "Microsoft Base Smart Card Crypto Provider" и "Aktiv ruToken CSP v1.0". В первом случае ошибка

The following certificate was selected:
    Issued to: *****
    Issued by: GlobalSign GCC R45 CodeSigning CA 2020
    Expires:   Tue Oct 07 15:39:59 2025
    SHA1 hash: *****

SignTool Error: No private key is available

В втором случае открывается окно "Connect Rutoken ..." и больше ничего не происходит.

Аргументы signtool /csp /k использовались для подписывания файлов без необходимости указания PIN вручную.

Сертификат установлен корректно, подписывание с ручным вводом PIN работает.

Вышлите, пожалуйста, Вашу инструкцию по кэшированию PIN хранилища токена для подписания через signtool.

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

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