Возможность установки CKA_ID и CKA_LABEL через Рутокен Плагин

Возникла необходимость в Рутокен Плагин API задавать атрибуты CKA_ID и CKA_LABEL для сертификата.
Для закрытого ключа существует уже метод https://plugin.api.rutoken.ru/CryptoPlu … tKeyLabel,
Хотелось бы получить аналогичные методы (в паре с getKeyLabel) и для сертификата.

Мотивация:

Google Chrome на nix based системах при запросе сервером клиентского сертификата,
в окно клиентских сертификатов выводит отфильтрованный список следующим образом:
он для каждого уникального CKA_ID и CKA_LABEL он берет первый попавшийся сертификат.
Мы выписываем сертификаты через Рутокен Плагин, а он к сожалению не позволяет устанавливать кастомный CKA_ID и CKA_LABEL,
и выставляет всегда значение "Rutoken Plugin". Таким образом когда на токене один подходящий сертификат то все в порядке.
Но когда более одного, Chrome выводит только один и это является проблемой.

Re: Возможность установки CKA_ID и CKA_LABEL через Рутокен Плагин

vasiliyz, добрый день!

Функция https://plugin.api.rutoken.ru/CryptoPlu … ateKeyPair имеет параметр id в котором в виде hex строки с заделителем ":" можно задать CKA_ID.

Расскажите поподробнее про ваш сценарий работы в Google Chrome и детальным описанием шагов: как браузер работает объектами Рутокен Плагина, где отображаются сертификаты и другие необходимые подробности.
Рассмотрим его вместе с разработчиками.

Re: Возможность установки CKA_ID и CKA_LABEL через Рутокен Плагин

vasiliyz, уточните, пожалуйста, также, что вы хотите различать:

1) На Рутокене есть несколько разных "контейнеров" состоящих из "одна пара + 1 сертификат"
2) На Рутокене есть несколько сертификатов к одной паре
3) Какая-то комбинация из пунктов выше

Re: Возможность установки CKA_ID и CKA_LABEL через Рутокен Плагин

Наc интересует вариант "контейнера": одной ключевой паре соответствует один сертификат.

Выписываем сертификат следующим образом:
1) pluginObject.generateKeyPair(selectedDeviceId, undefined, sn,
{publicKeyAlgorithm: pluginObject.PUBLIC_KEY_ALGORITHM_RSA, id: sn},)
2) pluginObject.createPkcs10(selectedDeviceId, sn, subject, {}, {hashAlgorithm: pluginObject.HASH_TYPE_SHA256, id: sn})
3) csr подписываем и получаем сертификат
4) pluginObject.importCertificate(selectedDeviceId, cert, pluginObject.CERT_CATEGORY_USER)

Для настройки Google Chrome на Ubuntu для работы с сертификатами с токена используем команду:
modutil -dbdir sql:.pki/nssdb/ -add "My Token" -libfile /path/to/librtpkcs11ecp.so
(https://linuxkamarada.com/en/2019/09/26 … 5cBthxByJE)

Далее хотим выполнить аутентификацию на сайте через Google Chrome на Ubuntu. Если на токене сертификатов больше одного, то при открытие сайта в окне "Выбор сертификата" показывается только один сертификат, а если зайти в chrome://settings/certificates, то там видны все сертификаты.

Пример окна "Выбор сертификата":
(my_token_cert7 имеет CKA_LABEL=Rutoken Plugin)
https://forum.rutoken.ru/uploads/images/2022/12/7209c7401bdd319f8ee27c779a577409.png

Если открыть chrome://settings/certificates и нажать на просмотр сертификата, то там пишется "Инструмент просмотра сертификатов Rutoken ECP <no label>:Rutoken Plugin", где строка после ":" это CKA_LABEL сертификата. То есть для всех сертификатов, выписанных с помощью плагина, будет одно CKA_LABEL="Rutoken Plugin".

Пример окна "просмотр сертификата" сертификата my_token_cert7:
https://forum.rutoken.ru/uploads/images/2022/12/326194ee34674f1a43ec7eb810f7d43f.png

Теперь выписываем сертификат с помощью PKCS11 без плагина следующим образом:

CK_ATTRIBUTE certificateTemplate[] =
{
  { CKA_VALUE, certDer, certSize }, 
  { CKA_CLASS, &certificateObject, certificateObjectSize }, 
  { CKA_ID, &keyPairId, keyPairIdSize }, 
  { CKA_LABEL, &LabelName, LabelNameSize }, // задаем уникальный label
...
};
rv = functionList->C_CreateObject(session, certificateTemplate, arraysize(certificateTemplate),
&certificate);

И если выписать сертификат таким образом, т.е. если задавать уникальные CKA_LABEL объектов именно сертификатов (а не ключевой пары), то в окне "Выбор сертификата" видны все сертификаты.

Пример окна "Выбор сертификата" после задания уникальных меток:
(my_token_cert10 и my_token_cert11 имеет CKA_LABEL отличный между собой и отличный от CKA_LABEL my_token_cert7)
https://forum.rutoken.ru/uploads/images/2022/12/2bd530f2eba6622cb9e02a6ade5ce638.png

Пример окна "просмотр сертификата" сертификата my_token_cert11:
https://forum.rutoken.ru/uploads/images/2022/12/47b70c91b4a982031b0653b76bccee3f.png

Интересует возможность изменить CKA_LABEL для сертификата с помощью Рутокен Плагин API, чтобы иметь возможность видеть все сертификаты в окне "Выбор сертификата" при аутентификации.

Re: Возможность установки CKA_ID и CKA_LABEL через Рутокен Плагин

vasiliyz, спасибо за информацию. Передал информацию разработчикам. Пока можем предложить вариант смены CKA_LABEL у объектов после генерации пары и импорта сертификата через Рутокен Плагин.

Re: Возможность установки CKA_ID и CKA_LABEL через Рутокен Плагин

Да, мы сейчас именно так и делаем. Для этого приходится устанавливать доп. ПО на рабочие станции, из-за их большого количества на порядки увеличивается условная "стоимость" обслуживания. Мы были бы очень признательны, если бы в Плагин был добавлен необходимый нам функционал

Re: Возможность установки CKA_ID и CKA_LABEL через Рутокен Плагин

Павел Анфимов, приветствую! Есть ли новости от разработчиков?

Re: Возможность установки CKA_ID и CKA_LABEL через Рутокен Плагин

vasiliyz, добрый день!

Сожалеем о доставленных неудобствах.
Запрашиваемая вами функциональность попала в бэклог ближайшей версии Рутокен Плагина, но пока сроков по ее разработке дать не можем. Обязательно оповестим вас в этом треде, когда версия будет выпущена.

Re: Возможность установки CKA_ID и CKA_LABEL через Рутокен Плагин

vasiliyz, добрый день!

Выпустили Рутокен Плагин 4.9,где теперь возможно задать/прочитать метки сертификатов, с помощью методов setCertLabel()/getCertLabel().

Полный change log: https://www.rutoken.ru/support/release/plugin.html