(2024-07-27 10:14:08 отредактировано anatolyb)

GlobalSign и Рутокен

Эпизод I.

Выпустили сертификат подписи кода от GlobalSign. У них есть официальная инструкция по выпуску и использованию: https://support.globalsign.com/code-sig … rutoken-30

Несколько удивил сам процесс и результат. В процессе задействовано приложение Fortify (https://github.com/PeculiarVentures/fortify/) и браузерная часть. Представитель GS прислал Рутокен ЭЦП 3.0 3220 для использования.

Инструкцию следует интерпретировать так, что если планируется использовать signtool, то во время процедуры нужно использовать драйверы 4.17.0.0 или новее. Кроссплатформенная утилита jsign (Windows/Linux), которую можно использовать вместо signtool, и у которой нет проблемы ввода PIN должна работать и при создании ключа с более ранними драйверами.

Первая попытка выпустить сертификат окончилось ошибкой. Генерация ключа RSA 4096 на Рутокен 3220 небыстрая операция и процесс окончился таймаутом...

Комментарий про скорость работы можно посмотреть по ссылке https://forum.rutoken.ru/post/24887/#p24887:

Евгений Мироненко пишет:

cy, да, Рутокен ЭЦП 3.0 3220, к сожалению, имеет отнюдь не лучшую скорость подписи RSA4096. По нашим внутренним измерениям одна операция подписи без накладных расходов на токенах этой модели занимает 6 секунд.
Быстрая подпись RSA4096 реализована в токенах Рутокен ЭЦП 3.0 3120 и Рутокен ЭЦП 3.0 3150: в них само выполнение команды подписи RSA4096 занимает около 250 мс. С учетом накладных расходов у меня с токеном Рутокен ЭЦП 3.0 3120 подпись 256 файлов четырьмя батчами по 64 файла занимает около 75 секунд (время может немного плавать), 8 батчей по 32 файла -- около 70 секунд.

Из самого GlobalSign ответили, что они не поддерживают EC-криптографию для CodeSign:

...At this point, all code signing certificates are issued using RSA algorithm...

Вторая попытка выпуска сертификата прошла успешно (быстрее вводился PIN-код).

Для проверки результата была запущена утилита pkcs11-tool, что бы вывести список объектов на токене. Результат удивил:

Public Key Object; RSA 4096 bits
  label:      RSA
  ID:         618ba098e429bda788874a13f382a22d
  Usage:      encrypt, verify
  Access:     local
Private Key Object; RSA 
  label:      RSA
  ID:         618ba098e429bda788874a13f382a22d
  Usage:      decrypt, sign
  Access:     sensitive, always sensitive, never extractable, local
Public Key Object; RSA 4096 bits
  label:      RSA
  ID:         618ba098e429bda788874a13f382a22d
  Usage:      encrypt, verify
  Access:     none
Public Key Object; RSA 4096 bits
  label:      RSA
  ID:         0120b2555e805969b5f96f0a8a09bc9c
  Usage:      encrypt, verify
  Access:     local
Private Key Object; RSA 
  label:      RSA
  ID:         0120b2555e805969b5f96f0a8a09bc9c
  Usage:      decrypt, sign
  Access:     sensitive, always sensitive, never extractable, local
Public Key Object; RSA 4096 bits
  label:      RSA
  ID:         0120b2555e805969b5f96f0a8a09bc9c
  Usage:      encrypt, verify
  Access:     none
Public Key Object; RSA 4096 bits
  label:      RSA
  ID:         0120b2555e805969b5f96f0a8a09bc9c
  Usage:      encrypt, verify
  Access:     none
Public Key Object; RSA 4096 bits
  label:      RSA
  ID:         0120b2555e805969b5f96f0a8a09bc9c
  Usage:      encrypt, verify
  Access:     none
Data object 3257969126
  label:          'X509 Request'
  application:    'webcrypto-p11'
  app_id:         -1
  flags:           modifiable
Data object 3257969130
  label:          'X509 Request'
  application:    'webcrypto-p11'
  app_id:         -1
  flags:           modifiable
Certificate Object; type = X.509 cert
  label:      RSA
  subject:    DN: ...
  serial:     6E0C...
  ID:         0120b2555e805969b5f96f0a8a09bc9c

Остались следы от первой неудачной попытки, ну ладно. Но зачем-то записалось куча публичных ключей. И остались следы в виде Data object. Причем, уникальностью меток даже не заморачивались (а это критично для Java, например) и два сертификата на одном токене таким образом, полагаю, не сделать.

Интересно, что это, косорукость разработчиков?

Re: GlobalSign и Рутокен

Эпизод II.

Т.к. показавшийся беспорядок на токене не давал покоя, было принято решение почистить объекты с помощью pkcs11-tool. В результате остались объекты: privkey, pubkey с атрибутами local и cert. Подпись работает, все ок.

Однако, просмотр, что находится на токене через панель управления Рутокен ничего не показывал.

https://forum.rutoken.ru/uploads/images/2024/07/77c0d19a4ca783233ec354ab19845af7.png

Т.к. захотелось что-то сделать, что бы там пусто не было, наобум был придуман план: удалить сертификат через pkcs11-tool и импортировать сертификат через панель управления.

Сертификат удалился без проблем, но импорт ни через панель управления, ни через pkcs11-tool уже не работал:

error: PKCS11 function C_CreateObject failed: rv = CKR_FUNCTION_FAILED (0x6)

Приплыли... В таком виде, без сертификата на борту, токен с помощью jsign уже использовать не получился.

Re: GlobalSign и Рутокен

Эпизод III.

Т.к. перевыпуск сертификата сейчас небыстрая процедура, пошли поиски альтернативного решения.

Опытным путем установлено, что за сертификат отвечают файлы:

3F00/1000/1001/8001/03CB
3F00/1000/1001/8001/8000

С другого токена они были перенесены на проблемный токен утилитой opensc-explorer. После этого, в pkcs11-tool сертификат оказался виден, а jsign заработал.

Счастливый конец.