Рутокен ошибка pkcs11 0x7

Содержание

  1. Ошибки Рутокен
  2. Ошибка: Сертификат ненадежен/Не удалось проверить статус отзыва
  3. Ошибка: Rutoken перестает определяться (Windows 10)
  4. Ошибка: Панель управления не видит Рутокен ЭЦП 2.0
  5. Почему компьютер не видит носитель рутокен
  6. Первичная диагностика неисправности Рутокен
  7. 1. Повреждение/разлом корпуса или USB-разъема Рутокена
  8. 3. Рутокен со следами оплавления и/или почернения корпуса изнутри носителя, отпаявшаяся микросхема или вспученная поверхность микросхемы
  9. 1. Рутокен не определяется в «Панели управления Рутокен»
  10. 2. Рутокен определяется панелью управления, кнопка «Ввести PIN-код…» активна, но авторизация с PIN-кодом пользователя/администратора выполняется с ошибкой. Дальнейшие действия зависят от формулировки возникающей ошибки:
  11. 2.1 Ошибка “Не удалось получить всю информацию о токене Код ошибки: 0x6a82 Описание ошибки: Файл/ RSF не найден”
  12. 2.2 Ошибка “Не удалось получить всю информацию о токене код ошибки: 0х6400 Описание ошибки: Состояние памяти Rutoken не изменилось”
  13. 2.3 Ошибка “Не удалось получить всю информацию о токене Код ошибки 0xF003 Описание ошибки Неверное значение”
  14. 2.4 Ошибка «Обнаружено повреждение системной области памяти (ошибка CRC)» код ошибки 0x6F20
  15. 2.5 Референсные данные не найдены
  16. 2.6 «PIN-код заблокирован»
  17. 1. Проверка целостности контейнера с сертификатом “КриптоПро CSP” или “VipNet CSP”
  18. 2. Проверка целостности сертификата с неизвлекаемыми ключами
  19. Почему компьютер не видит носитель рутокен
  20. Почему компьютер не видит рутокен
  21. Установка драйвера для Windows Vista Windows Seven
  22. Установка драйвера для Windows XP
  23. Подготовка
  24. Установка драйверов и модулей ruToken
  25. Настройка считывателя в КриптоПро
  26. Установка сертификатов
  27. Почему не виден сертификат ЭЦП на носителе
  28. Причина 1: драйвер не установлен или устройство отображается в диспетчере устройств с восклицательным знаком
  29. Причина 2: долгое опознание носителя на Windows 7
  30. Причина 3: USB-порт работает некорректно
  31. Причина 4: носитель неисправен
  32. Почему выходит ошибка при создании подписи
  33. Устранение ошибки ненайденного элемента ЭЦП
  34. Устранение ошибки с построением цепочки сертификатов

Ошибки Рутокен

Из нашей статьи вы узнаете:

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

Ошибка: Сертификат ненадежен/Не удалось проверить статус отзыва

Ошибку можно заметить на вкладке «Сертификаты» непосредственно в панели управления Рутокен. Проблема возникает во время установки ЭЦП и связана с неполной настройкой. Речь про отсутствие специального корневого доверенного сертификата, который выдает удостоверяющий центр.

Первым шагом к устранению ошибки остается обновление комплекта драйверов. Если проблема не исчезла или последние у вас имеют актуальную версию, выполните действия по следующему алгоритму:

Если в открывшемся дереве вы видите лишь ваш личный сертификат, то надо установить еще один, который был выдан в удостоверяющем центре, и сделать доверенным.

Ошибка: Rutoken перестает определяться (Windows 10)

Потенциально могут возникать периодические ошибки из-за недоступности сертификатов, невозможности запустить панель управления. Одновременно светодиод на токене горит, а сам Рутокен имеется в Диспетчере устройств. Подобная ситуация может быть связана со спецификой работы материнской платы компьютера, когда при переходе из энергосберегающего режима в штатный не происходит «пробуждения» токена. Выходом здесь станет его отключение либо повторное подключение Рутокена (для этого достаточно достать USB-токен из разъема и подключить опять).

В случае если ошибка не исчезла, обратитесь за консультацией в удостоверяющий центр, где вы оформили ЭЦП и приобрели Рутокен.

Ошибка: Панель управления не видит Рутокен ЭЦП 2.0

Для решения проблемы выполните следующие действия:

Если ничего не помогло и ошибка осталась, обращайтесь в удостоверяющий центр «Астрал». Мы предлагаем услуги по генерации ЭЦП любых типов на выгодных условиях, а также комплексное техническое сопровождение. Для решения проблем мы готовы проконсультировать по телефону либо найти выход с помощью удаленного подключения к вашему компьютеру. Получить дополнительную информацию можно по телефону либо оставив заявку на сайте. Мы оперативно ответим и предоставим консультацию.

Источник

Почему компьютер не видит носитель рутокен

Рутокен при подключении к компьютеру не отображается в Панели управления Рутокен, кнопка «Ввести PIN-код» неактивна.

image2018 5 8 14 29 34

Если используется Подключение к удаленному рабочему столу, подробную информацию можно прочитать в этой статье.

Определите модель Рутокен по маркировке на самом ключе, воспользовавшись этой инструкцией.

Возможно, не хватает питания для Рутокена. Попробуйте подключить Рутокен в другой USB-порт.

Если используется удлинитель, подключите Рутокен напрямую.

Проверьте работают ли флешки, другие токены или смарт-карты.

Модель Рутокен S должна отображаться в разделе Контроллеры USB.

image2018 5 8 14 53 13

Модели Рутокен ЭЦП 2.0, Рутокен Lite должны отображаться в разделе Устройства чтения смарт-карт.

*Иногда могут отображаться как «USB Smart Card reader», «Rutoken ECP» или «Rutoken Lite»

image2018 5 8 14 52 26

Откройте Панель управления Рутокен и перейдите на вкладку Настройки.

Проверьте значение в раскрывающемся списке Количество считывателей Рутокен S. Если установлен «0», то увеличьте это значение до 1 и примените изменения

image2018 5 8 14 56 13

Если на другом компьютере Рутокен так же не определяется, скорее всего, он вышел из строя. Обратитесь в компанию, где приобретался Рутокен для его замены.

Источник

Первичная диагностика неисправности Рутокен

В соответствии с правилами эксплуатации и хранения электронных идентификаторов Рутокен, пользователь имеет право бесплатно заменить неисправный носитель Рутокен в течение срока гарантийного обслуживания, если, в ходе проведения экспертизы, случай будет признан гарантийным.

Отправка токена на экспертизу производится через ту компанию, с которой у компании «Актив» имеются договорные отношения.

Таким образом, если вы приобретали Рутокен у одного из наших партнеров, вам нужно передать Рутокен партнеру. Если договор между вашей организацией и компанией «Актив» напрямую не заключался, и вы направите Рутокен нам, мы не сможем принять его на экспертизу.

Узнать срок гарантии на устройство Рутокен можно в той компании, в которой он приобретался.

В случае обнаружения пользователем неисправности Рутокена, советуем провести первичную диагностику носителя, прежде чем обратиться в компанию, где приобретался носитель Рутокен.

Самые частые ошибки мы собрали в этой статье.

Первичная диагностика состоит из 3 этапов:

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

Можно выделить следующие виды механических повреждений:

1. Повреждение/разлом корпуса или USB-разъема Рутокена

image2020 4 17 15 35 9 image2020 4 17 15 34 16

image2020 4 17 15 32 7

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

image2020 4 17 16 55 37 image2020 4 17 16 56 4

Рутокен со следами оплавления и/или почернения можно направить на дополнительную экспертизу. Если в ходе экспертизы будет выявлено умышленное повреждение или превышение допустимого напряжения, подаваемого в USB-порт, гарантийная замена Рутокена на новый произведена не будет.

Если при визуальном осмотре Рутокена никаких видимых повреждений не выявлено, необходимо проверить Рутокен на компьютере.

Подключите Рутокен к компьютеру и запустите «Панель управления Рутокен».

Запуск панели управления Рутокен выполняется через меню Пуск / Панель управления / Панель управления Рутокен.

image2020 4 17 17 4 50

Если Рутокен определяется в «Панели управления Рутокен», активна кнопка «Ввести PIN-код…»

Нажмите на кнопку «Информация» на вкладке «Администрирование». Ошибок возникать не должно.

Попробуйте авторизоваться с PIN-кодом пользователя и/или администратора.

Если при нажатии на кнопку «Информация» ошибок не возникает, а авторизация выполняется успешно, следует перейти к третьему этапу диагностики носителя Рутокен

(Рутокен работает корректно, необходимо проверить целостность ключевой информации на Рутокене).

После подключения Рутокена к компьютеру возможны следующие ошибки в Панели управления Рутокен:

1. Рутокен не определяется в «Панели управления Рутокен»

image2020 4 17 17 5 41

Рутокен не определяется в «Панели управления Рутокен» (список «Подключенные Рутокен» пустой) и, как следствие, неактивны кнопки «Ввести PIN-код…» и «Информация…». В данном случае необходимо воспользоваться инструкцией.

2. Рутокен определяется панелью управления, кнопка «Ввести PIN-код…» активна, но авторизация с PIN-кодом пользователя/администратора выполняется с ошибкой. Дальнейшие действия зависят от формулировки возникающей ошибки:

2.1 Ошибка “Не удалось получить всю информацию о токене Код ошибки: 0x6a82 Описание ошибки: Файл/ RSF не найден”

Oshibka

Подключите Рутокен к другому USB порту. Повторите попытку ввода PIN-кода. По возможности, установите Драйверы Рутокен на другой компьютер, подключите токен и попробуйте ввести PIN-код.

Если и на другом компьютере ошибка повторяется, значит возникло нарушение файловой системы Рутокен. Его можно отформатировать и записать ключи заново.

2.2 Ошибка “Не удалось получить всю информацию о токене код ошибки: 0х6400 Описание ошибки: Состояние памяти Rutoken не изменилось”

6400

Подключите Рутокен к другому USB порту. Повторите попытку ввести PIN-код. По возможности, установите Драйверы Рутокен на другой компьютер, подключите токен и попробуйте ввести PIN-код.

Если и на другом компьютере ошибка повторяется, значит возникло нарушение файловой системы Рутокен. Его можно отформатировать и записать ключи заново.

2.3 Ошибка “Не удалось получить всю информацию о токене Код ошибки 0xF003 Описание ошибки Неверное значение”

F003

Подключите Рутокен к другому USB порту. Повторите попытку ввести PIN-код. По возможности, установите Драйверы Рутокен на другой компьютер, подключите токен и попробуйте ввести PIN-код.

Если и на другом компьютере ошибка повторяется, значит возникло нарушение файловой системы Рутокен. Его можно отформатировать и записать ключи заново.

2.4 Ошибка «Обнаружено повреждение системной области памяти (ошибка CRC)» код ошибки 0x6F20

image2020 4 17 17 8 59

Ошибка означает, что память на носителя Рутокен была повреждена. Форматирование Рутокена не поможет. Рутокен необходимо передать в ту компанию, в которой приобретался данный носитель для отправки на экспертизу в компанию Актив.

2.5 Референсные данные не найдены

image001

Подключите Рутокен к другому USB порту. Повторите попытку ввести PIN-код. По возможности, установите Драйверы Рутокен на другой компьютер, подключите токен и попробуйте ввести PIN-код.

Если и на другом компьютере ошибка повторяется, значит возникло нарушение файловой системы Рутокен. Его можно отформатировать и записать ключи заново.

Более подробная информация об ошибке есть в статье нашей Базы Знаний.

2.6 «PIN-код заблокирован»

image2020 4 17 17 9 17

Ошибка «PIN-код заблокирован» означает, что Рутокен был заблокирован в результате превышения количества попыток ввода PIN-кода.

Если заблокирован PIN-код пользователя, воспользуйтесь инструкцией.

Если заблокирован PIN-код Администратора, воспользуйтесь инструкцией.

На третьем этапе проверяется целостность ключевой информации, которая содержится на Рутокене.

Определите модель Рутокена по инструкции.

Если используется носитель из семейства Рутокен ЭЦП, проверьте формат ключей по инструкции.

1. Проверка целостности контейнера с сертификатом “КриптоПро CSP” или “VipNet CSP”

Выполнить такую проверку можно через программу криптопровайдера, с помощью которой была сгенерирована электронная подпись пользователя, например программа «КриптоПро CSP» или «VipNet CSP»

Тестирование целостности контейнера через «КриптоПро CSP» необходимо проводить по инструкции.

Тестирование целостности контейнера через «VipNet CSP» необходимо проводить по инструкции.

Если операция по проверке ключевого контейнера выполняется без ошибок, значит ключевая информация на носителе Рутокен не повреждена.

2. Проверка целостности сертификата с неизвлекаемыми ключами

Тестирование носителей Рутокен ЭЦП 2.0 с записанными на него неизвлекаемыми ключами ЭП (PKCS#11) пользователями самостоятельно не производится. Удаленная диагностика выполняется сотрудниками технической поддержки компании Актив.

Источник

Почему компьютер не видит носитель рутокен

После прохождения проверки условий подключения по сертификату ключа проверки ЭЦП и выбора сертификата в личном кабинете юридического лица на сайте nalog.ru через Yandex браузер возникает одно из двух сообщений:

«Не удается обнаружить токен или смарт-карту. Подключите Рутокен в любой USB-порт компьютера или к картридеру» или «На Рутокене нет сертификатов. Для доступа к сайту запишите на Рутокен сертификат«.

image2019 9 5 16 7 19 image2019 9 5 16 8 6

Эти ошибки возникают в приложении Рутокен Коннект, установленном на компьютер, если не выполняются условия для успешного входа или выбран неверный вариант входа.

Необходимо определить нужно ли расширение Рутокен Коннект и какой вариант входа нужно использовать.

Расширение Рутокен Коннект должно использоваться для входа на сайт nalog.ru только если используется модель Рутокен ЭЦП 2.0 с записанным на него сертификатом формата PKCS#11 (как для ЕГАИС).

Проверка условий подключения должна завершиться успешно.

2. Если используется другая модель Рутокен и/или на Рутокене содержится сертификат формата «КриптоПро CSP», то выбран правильный вариант:

нужно выполнить одно из трех действий:

a) Удалите адрес lkul.nalog.ru:443 из настроек Рутокен Коннект

image2019 9 5 17 32 40

image2019 9 5 17 37 4

b) Или удалите Адаптер Рутокен Коннект

image2019 9 5 17 41 56

с) Или удалите приложение Рутокен Коннект

image2019 9 5 18 2 17

После выполнения одного из трех действий повторите Проверку условий подключения по сертификату ЭЦП.

Источник

Почему компьютер не видит рутокен

1. Возможно, на токене перегорел светодиод (лампочка). Для проверки следует:

5469

2. Подключить Rutoken к другому USB-порту.

3. Запустить / перезапустить службу «Смарт-карта». Для этого:

4. Переустановить драйвер Rutoken, предварительно отключив носитель от компьютера.
Для этого открыть меню «Пуск» > «Панель управления» > «Установка и удаление программ» (для ОС Windows Vista Windows Seven меню «Пуск» > «Панель управления» > «Программы и компоненты»). В списке найти пункт «Rutoken Drivers» и выбрать «Удалить». После удаления необходимо перезагрузить компьютер и установить драйвер Rutoken заново.

5. В случае, если переустановка драйвера не помогла решить ошибку, необходимо установить драйвер с помощью меню «Диспетчер устройств». Порядок установки зависит от используемой операционной системы. Ниже приведены настройки для:

Установка драйвера для Windows Vista Windows Seven

1. Кликнуть по значку «Мой компьютер» правой кнопкой мыши и выбрать элемент «Свойства».

2. В открывшемся меню выбрать «Диспетчер устройств».

picture 1502

3. В открывшемся окне проверить, нет ли в списке элемента «Другие устройства», обозначенного желтым значком.

picture 826

4. Необходимо выделить строку «ruToken» и выбрать «Обновить драйверы».

picture 827

5. Далее выбрать «Выполнить поиск драйверов на этом компьютере».

picture 828

6. Нажать на кнопку «Обзор», указать каталог C:WindowsSystem32Aktiv Co и нажать на кнопку «Далее». Указанный каталог может быть скрытым. В таком случае необходимо выбрать меню «Сервис» > «Параметры папок» > «Вид», установить переключатель «Показывать скрытые файлы, папки и диски» и повторить выбор каталога.

picture 829

7. Дождаться окончания установки и нажать на кнопку «Закрыть».

picture 830

8. После установки драйвера устройство будет отображаться в разделе «Контроллеры USB». На токене также должен загореться диод.

picture 831

Установка драйвера для Windows XP

1. Кликнуть по значку «Мой компьютер» правой кнопкой мыши и выбрать элемент «Свойства».

2. В окне «Свойства системы» перейти на вкладку «Оборудование» и нажать на кнопку «Диспетчер устройств».

picture 832

3. В открывшемся окне проверить, нет ли в списке элемента «ruToken» (либо «Неизвестное устройство»), обозначенного желтым значком. Необходимо кликнуть по нему правой кнопкой мыши и выбрать «Обновить драйвер».

picture 833

4. В окне «Мастер обновления оборудования» установить переключатель «Установка из указанного места».

picture 834

5. В открывшемся окне нажать на кнопку «Обзор», указать путь к каталогу C:Windowssystem32Aktiv Co
t USB и нажать на кнопку «Далее». Указанный каталог может быть скрытым. В таком случае необходимо выбрать меню «Сервис» > «Параметры папок» > «Вид», установить переключатель «Показывать скрытые файлы, папки и диски» и повторить выбор каталога

picture 835

6. Дождаться окончания установки и нажать на кнопку «Готово».

picture 836

7. По завершении установки драйвера устройство будет отображаться в разделе «Контроллеры универсальной последовательной шины USB». На токене также должен загореться диод.

picture 837

6. В случае если выполнение инструкций не помогло исправить ошибку, токен, скорее всего, неисправен. Чтобы в этом убедиться, следует присоединить Rutoken к компьютеру, на котором никогда не устанавливался драйвер. Если носитель работает корректно, то должен запуститься «Мастер установки нового оборудования». Если при присоединении рутокена ничего не происходит, то носитель, вероятнее всего, неисправен, и его необходимо сменить.

Если сохранилась копия сертификата, следует использовать ее для работы в системе Контур.Экстерн, предварительно установив сертификат. Если копий не сохранилось, необходимо обратиться в сервисный центр для незапланированной замены ключа.

%D0%9C%D0%B0%D1%80%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0 %D0%BE%D0%B1%D1%89 206%D1%8577 11.18

%D0%91%D0%B0%D0%BD%D0%BD%D0%B5%D1%80 216%D1%8590 11.10.17

vk 180

Подготовка

Установка драйверов и модулей ruToken

Для установки драйверов необходимо:

Настройка считывателя в КриптоПро

Откроется окно со списком установленных считывателей. Если в списке нет считывателя Все считыватели смарт-карт, нажмите кнопку «Добавить»

Если кнопка «Добавить» не активна, то нужно перейти на вкладку «Общие» и нажать на ссылку «Запустить с правами администратора».
RU 3.6 2.0

Для продолжения установки считывателя нажмите кнопку «Далее»

В следующем окне выберите считыватель Все считыватели смарт-карт и нажмите кнопку «Далее»
RU 3.6 3.0

Для продолжения установки нажмите кнопку «Далее»
RU 3.6 4.0

Установка сертификатов

Для того, чтобы система стала запрашивать ruToken при входе, с него нужно установить сертификат. Чтобы узнать, как это сделать, перейдите по данной ссылке (нажмите здесь чтобы перейти).

Иногда при работе с электронной цифровой подписью (ЭЦП) выходит ошибка о том, что ПК не видит сертификат подписи на носителе или о том, что при создании подписи была допущена ошибка. Причина может быть в неустановленном или переставшем работать драйвере, в неисправности токена или в неисправности программной части компьютера.

rabota za kompyuterom

Почему не виден сертификат ЭЦП на носителе

Обычно проблема решается простой перезагрузкой компьютера и объясняется сбоем в работе программных компонентов. Но иногда для исправления ошибки нужно переустановить драйвера или обратиться в службу технической поддержки пользователей.

Причина 1: драйвер не установлен или устройство отображается в диспетчере устройств с восклицательным знаком

Если на носителе Рутокен ЭЦП не найдено ни одного сертификата, а в диспетчере устройств носитель отображается с восклицательным знаком, то проблема кроется в драйвере.

Для исправления ситуации нужно извлечь носитель ЭЦП из компьютера и скачать последнюю версию драйвера. Скачивание нужно производить только с официальных ресурсов:

После установки драйвера нужно снова подключить носитель. Если ошибка повторяется, проверьте корректность работы токена. Для этого подключите его к другому ПК. Если носитель определился системой, то на неисправном компьютере удалите драйвер и установите его заново.

Причина 2: долгое опознание носителя на Windows 7

При работе в ОС Windows 7 драйверы могут долго назначаться. Решение проблемы — дождитесь окончания процесса или обновите версию ОС.

Причина 3: USB-порт работает некорректно

Убедитесь, что проблема в USB-порте, а не в носителе ЭЦП, для этого переключите токен к другому порту. Если носитель определился системой, то перезагрузите ПК. Обычно это помогает справиться с проблемой и запустить работу всех USB-портов. Если перезагрузка не помогла, то желательно обратиться в техническую поддержку для устранения неисправности.

sertifikat jeup ne viden na nositele

Причина 4: носитель неисправен

Если при переключении носителя к другому ПК или USB-порту флешку компьютер не видит, то проблема в носителе. Чтобы устранить неисправность, обратитесь в сервисный центр для выпуска нового токена.

Почему выходит ошибка при создании подписи

Ошибка создания подписи обычно имеет в расшифровке два значения:

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

Решение проблемы зависит от типа ошибки и обычно не требует обращения в техническую поддержку.

Устранение ошибки ненайденного элемента ЭЦП

Переустановите криптопровайдер на неисправном ПК с официального портала КриптоПро (https://www.cryptopro.ru/downloads). После этого очистите кэш и временные файлы в используемом браузере, а также кэш Java. Затем удалите личные сертификаты и сертификаты главного удостоверяющего центра. Используйте КриптоПро и заново установите новые в соответствии с именем контейнера. После установки корневых сертификатов:

Если после проделанной работы ошибка сохраняется, то нужно обратиться в сервисный центр.

Устранение ошибки с построением цепочки сертификатов

Обычно ошибку вызывает отсутствие сертификатов доверенных корневых центров. Чтобы устранить неисправность, нужно открыть список сертификатов и найти проблемный. Он будет иметь отметку о проблеме в проверке отношений:

rundll 1

Затем пользователь скачивает с официальной страницы сертификат Минкомсвязи РФ и сертификат удостоверяющего центра, имеющего проблемы в работе. Устанавливают их в раздел «‎Корневые сертификаты»‎, а пошаговый процесс выглядит так:

В нужном сертификате нажать «‎Установить».

error 02

В мастере импорта сертификатов нажать «‎Далее» и в новом окне поставить галочку напротив «‎Поместить все сертификаты в следующем хранилище». Нажать «‎Обзор».

error 03

В открывшемся списке выбрать «‎Доверенные корневые центры» и нажать последовательно «‎ОК» и «‎Далее».

error 04

Нажать «‎Готово», а затем подтвердить установку.

error 05

Дождаться установки и перезагрузить ПК. Если после этого подписание сопровождается ошибкой, то необходимо обратиться за помощью в техническую поддержку.

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

Источник

Содержание

  1. 0x54f внутренняя ошибка рутокен
  2. Стандартные коды ошибок
  3. Первичная диагностика неисправности Рутокен
  4. Первый этап диагностики — Визуальный осмотр Рутокена
  5. 1. Повреждение/разлом корпуса или USB-разъема Рутокена
  6. 2. На корпусе Рутокена видны следы попыток вскрыть носитель
  7. 3. Рутокен со следами оплавления и/или почернения корпуса изнутри носителя, отпаявшаяся микросхема или вспученная поверхность микросхемы
  8. Второй этап диагностики — Возможные ошибки при работе с Панелью управления Рутокен
  9. 1. Рутокен не определяется в «Панели управления Рутокен»
  10. 2. Рутокен определяется панелью управления, кнопка «Ввести PIN-код…» активна, но авторизация с PIN-кодом пользователя/администратора выполняется с ошибкой. Дальнейшие действия зависят от формулировки возникающей ошибки:
  11. 2.1 Ошибка “Не удалось получить всю информацию о токене Код ошибки: 0x6a82 Описание ошибки: Файл/ RSF не найден”
  12. 2.2 Ошибка “Не удалось получить всю информацию о токене код ошибки: 0х6400 Описание ошибки: Состояние памяти Rutoken не изменилось”
  13. 2.3 Ошибка “Не удалось получить всю информацию о токене Код ошибки 0xF003 Описание ошибки Неверное значение”
  14. 2.4 Ошибка «Обнаружено повреждение системной области памяти (ошибка CRC)» код ошибки 0x6F20
  15. 2.5 Референсные данные не найдены
  16. 2.6 «PIN-код заблокирован»
  17. Третий этап диагностики — Диагностика ключевой информации, содержащейся на Рутокене
  18. 1. Проверка целостности контейнера с сертификатом “КриптоПро CSP” или “VipNet CSP”
  19. 2. Проверка целостности сертификата с неизвлекаемыми ключами
  20. 0x54f внутренняя ошибка рутокен
  21. Стандартные коды ошибок
  22. Ошибки Рутокен
  23. Ошибка: Сертификат ненадежен/Не удалось проверить статус отзыва
  24. Ошибка: Rutoken перестает определяться (Windows 10)
  25. Ошибка: Панель управления не видит Рутокен ЭЦП 2.0

0x54f внутренняя ошибка рутокен

Все функции из реализации стандарта PKCS#11 возвращают различные коды ошибок. Все возвращаемые коды ошибок делятся на две большие группы:

  • стандартные коды ошибок, которые описаны в стандарте. Для каждого кода ошибки есть разъяснение, в каких ситуациях он может быть возвращен.
  • специальные коды ошибок, которые определяются каждым разработчиком реализации стандарта PKCS#11. Ситуации, в которых могут быть возвращены специальные коды ошибок разработчик реализации стандарта определяет самостоятельно.

Все функции из реализации стандарта PKCS#11 возвращают специальные коды ошибок (определяются производителем).

Все функции из реализации расширения стандарта PKCS#11 возвращают специальные коды ошибок (определяются производителем).

Стандартные коды ошибок

В силу особенностей реализации библиотек rtPKCS11 и rtPKCS11ECP некоторые стандартные функции могут вернуть стандартный код ошибки PKCS#11, не входящий в список допустимых для данной функции. Подобная ситуация является исключением. Стандартные коды ошибок, возвращаемые каждой функцией в исключительных ситуациях, перечислены в описании для каждой функции отдельно.

В таблице ниже приведен список кодов ошибок стандарта PKCS#11 и их описаний, поддерживаемых устройствами Рутокен. Подробную информацию по каждому коду ошибки можно найти в стандарте (английский язык).

Коды ошибок стандарта PKCS #11, поддерживаемые устройствами Рутокен

Источник

Первичная диагностика неисправности Рутокен

В соответствии с правилами эксплуатации и хранения электронных идентификаторов Рутокен, пользователь имеет право бесплатно заменить неисправный носитель Рутокен в течение срока гарантийного обслуживания, если, в ходе проведения экспертизы, случай будет признан гарантийным.

Отправка токена на экспертизу производится через ту компанию, с которой у компании «Актив» имеются договорные отношения.

Таким образом, если вы приобретали Рутокен у одного из наших партнеров, вам нужно передать Рутокен партнеру. Если договор между вашей организацией и компанией «Актив» напрямую не заключался, и вы направите Рутокен нам, мы не сможем принять его на экспертизу.

Узнать срок гарантии на устройство Рутокен можно в той компании, в которой он приобретался.

В случае обнаружения пользователем неисправности Рутокена, советуем провести первичную диагностику носителя, прежде чем обратиться в компанию, где приобретался носитель Рутокен.

Самые частые ошибки мы собрали в этой статье.

Первичная диагностика состоит из 3 этапов:

  1. Визуальный осмотр Рутокена. На данном этапе определяется, попадает ли Рутокен под гарантию по сроку его использования, а также выявляются механические повреждения Рутокена.
  2. Возможные ошибки в «Панели управления Рутокен» На данном этапе определяются неисправности, которые могут быть выявлены только путем подключения Рутокена к компьютеру.
  3. Диагностика ключевой информации, содержащейся на Рутокене. На данном этапе проверяется целостность ключевой информации, которая содержится на носителе Рутокен с помощью вспомогательных инструментов, таких как: “Панель управления Рутокен”, “КриптоПро CSP” или «ViPNet CSP».

Первый этап диагностики — Визуальный осмотр Рутокена

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

Можно выделить следующие виды механических повреждений:

1. Повреждение/разлом корпуса или USB-разъема Рутокена

2. На корпусе Рутокена видны следы попыток вскрыть носитель

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

Рутокен со следами оплавления и/или почернения можно направить на дополнительную экспертизу. Если в ходе экспертизы будет выявлено умышленное повреждение или превышение допустимого напряжения, подаваемого в USB-порт, гарантийная замена Рутокена на новый произведена не будет.

Второй этап диагностики — Возможные ошибки при работе с Панелью управления Рутокен

Если при визуальном осмотре Рутокена никаких видимых повреждений не выявлено, необходимо проверить Рутокен на компьютере.

Подключите Рутокен к компьютеру и запустите «Панель управления Рутокен».

Запуск панели управления Рутокен выполняется через меню Пуск / Панель управления / Панель управления Рутокен.

Если Рутокен определяется в «Панели управления Рутокен», активна кнопка «Ввести PIN-код…»

Нажмите на кнопку «Информация» на вкладке «Администрирование». Ошибок возникать не должно.

Попробуйте авторизоваться с PIN-кодом пользователя и/или администратора.

Если при нажатии на кнопку «Информация» ошибок не возникает, а авторизация выполняется успешно, следует перейти к третьему этапу диагностики носителя Рутокен

(Рутокен работает корректно, необходимо проверить целостность ключевой информации на Рутокене).

После подключения Рутокена к компьютеру возможны следующие ошибки в Панели управления Рутокен:

1. Рутокен не определяется в «Панели управления Рутокен»

Рутокен не определяется в «Панели управления Рутокен» (список «Подключенные Рутокен» пустой) и, как следствие, неактивны кнопки «Ввести PIN-код…» и «Информация…». В данном случае необходимо воспользоваться инструкцией.

2. Рутокен определяется панелью управления, кнопка «Ввести PIN-код…» активна, но авторизация с PIN-кодом пользователя/администратора выполняется с ошибкой. Дальнейшие действия зависят от формулировки возникающей ошибки:

2.1 Ошибка “Не удалось получить всю информацию о токене Код ошибки: 0x6a82 Описание ошибки: Файл/ RSF не найден”

Подключите Рутокен к другому USB порту. Повторите попытку ввода PIN-кода. По возможности, установите Драйверы Рутокен на другой компьютер, подключите токен и попробуйте ввести PIN-код.

Если и на другом компьютере ошибка повторяется, значит возникло нарушение файловой системы Рутокен. Его можно отформатировать и записать ключи заново.

2.2 Ошибка “Не удалось получить всю информацию о токене код ошибки: 0х6400 Описание ошибки: Состояние памяти Rutoken не изменилось”

Подключите Рутокен к другому USB порту. Повторите попытку ввести PIN-код. По возможности, установите Драйверы Рутокен на другой компьютер, подключите токен и попробуйте ввести PIN-код.

Если и на другом компьютере ошибка повторяется, значит возникло нарушение файловой системы Рутокен. Его можно отформатировать и записать ключи заново.

2.3 Ошибка “Не удалось получить всю информацию о токене Код ошибки 0xF003 Описание ошибки Неверное значение”

Подключите Рутокен к другому USB порту. Повторите попытку ввести PIN-код. По возможности, установите Драйверы Рутокен на другой компьютер, подключите токен и попробуйте ввести PIN-код.

Если и на другом компьютере ошибка повторяется, значит возникло нарушение файловой системы Рутокен. Его можно отформатировать и записать ключи заново.

2.4 Ошибка «Обнаружено повреждение системной области памяти (ошибка CRC)» код ошибки 0x6F20

Ошибка означает, что память на носителя Рутокен была повреждена. Форматирование Рутокена не поможет. Рутокен необходимо передать в ту компанию, в которой приобретался данный носитель для отправки на экспертизу в компанию Актив.

2.5 Референсные данные не найдены

Подключите Рутокен к другому USB порту. Повторите попытку ввести PIN-код. По возможности, установите Драйверы Рутокен на другой компьютер, подключите токен и попробуйте ввести PIN-код.

Если и на другом компьютере ошибка повторяется, значит возникло нарушение файловой системы Рутокен. Его можно отформатировать и записать ключи заново.

Более подробная информация об ошибке есть в статье нашей Базы Знаний.

2.6 «PIN-код заблокирован»

Ошибка «PIN-код заблокирован» означает, что Рутокен был заблокирован в результате превышения количества попыток ввода PIN-кода.

Если заблокирован PIN-код пользователя, воспользуйтесь инструкцией.

Если заблокирован PIN-код Администратора, воспользуйтесь инструкцией.

Третий этап диагностики — Диагностика ключевой информации, содержащейся на Рутокене

На третьем этапе проверяется целостность ключевой информации, которая содержится на Рутокене.

Определите модель Рутокена по инструкции.

Если используется носитель из семейства Рутокен ЭЦП, проверьте формат ключей по инструкции.

1. Проверка целостности контейнера с сертификатом “КриптоПро CSP” или “VipNet CSP”

Выполнить такую проверку можно через программу криптопровайдера, с помощью которой была сгенерирована электронная подпись пользователя, например программа «КриптоПро CSP» или «VipNet CSP»

Тестирование целостности контейнера через «КриптоПро CSP» необходимо проводить по инструкции.

Тестирование целостности контейнера через «VipNet CSP» необходимо проводить по инструкции.

Если операция по проверке ключевого контейнера выполняется без ошибок, значит ключевая информация на носителе Рутокен не повреждена.

2. Проверка целостности сертификата с неизвлекаемыми ключами

Тестирование носителей Рутокен ЭЦП 2.0 с записанными на него неизвлекаемыми ключами ЭП (PKCS#11) пользователями самостоятельно не производится. Удаленная диагностика выполняется сотрудниками технической поддержки компании Актив.

Если у вас возникли вопросы — обращайтесь в службу технической поддержки компании “Актив”.

Источник

0x54f внутренняя ошибка рутокен

Все функции из реализации стандарта PKCS#11 возвращают различные коды ошибок. Все возвращаемые коды ошибок делятся на две большие группы:

  • стандартные коды ошибок, которые описаны в стандарте. Для каждого кода ошибки есть разъяснение, в каких ситуациях он может быть возвращен.
  • специальные коды ошибок, которые определяются каждым разработчиком реализации стандарта PKCS#11. Ситуации, в которых могут быть возвращены специальные коды ошибок разработчик реализации стандарта определяет самостоятельно.

Все функции из реализации стандарта PKCS#11 возвращают специальные коды ошибок (определяются производителем).

Все функции из реализации расширения стандарта PKCS#11 возвращают специальные коды ошибок (определяются производителем).

Стандартные коды ошибок

В силу особенностей реализации библиотек rtPKCS11 и rtPKCS11ECP некоторые стандартные функции могут вернуть стандартный код ошибки PKCS#11, не входящий в список допустимых для данной функции. Подобная ситуация является исключением. Стандартные коды ошибок, возвращаемые каждой функцией в исключительных ситуациях, перечислены в описании для каждой функции отдельно.

В таблице ниже приведен список кодов ошибок стандарта PKCS#11 и их описаний, поддерживаемых устройствами Рутокен. Подробную информацию по каждому коду ошибки можно найти в стандарте (английский язык).

Коды ошибок стандарта PKCS #11, поддерживаемые устройствами Рутокен

Источник

Ошибки Рутокен

Из нашей статьи вы узнаете:

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

Ошибка: Сертификат ненадежен/Не удалось проверить статус отзыва

Ошибку можно заметить на вкладке «Сертификаты» непосредственно в панели управления Рутокен. Проблема возникает во время установки ЭЦП и связана с неполной настройкой. Речь про отсутствие специального корневого доверенного сертификата, который выдает удостоверяющий центр.

Первым шагом к устранению ошибки остается обновление комплекта драйверов. Если проблема не исчезла или последние у вас имеют актуальную версию, выполните действия по следующему алгоритму:

  • выберите ваш сертификат в панели управления;
  • нажмите кнопку «Свойства»;
  • выберите вкладку «Путь сертификации».

Если в открывшемся дереве вы видите лишь ваш личный сертификат, то надо установить еще один, который был выдан в удостоверяющем центре, и сделать доверенным.

Ошибка: Rutoken перестает определяться (Windows 10)

Потенциально могут возникать периодические ошибки из-за недоступности сертификатов, невозможности запустить панель управления. Одновременно светодиод на токене горит, а сам Рутокен имеется в Диспетчере устройств. Подобная ситуация может быть связана со спецификой работы материнской платы компьютера, когда при переходе из энергосберегающего режима в штатный не происходит «пробуждения» токена. Выходом здесь станет его отключение либо повторное подключение Рутокена (для этого достаточно достать USB-токен из разъема и подключить опять).

В случае если ошибка не исчезла, обратитесь за консультацией в удостоверяющий центр, где вы оформили ЭЦП и приобрели Рутокен.

Ошибка: Панель управления не видит Рутокен ЭЦП 2.0

Для решения проблемы выполните следующие действия:

  • подключите токен к другому USB-разъему или компьютеру для оценки работоспособности;
  • определите наличие устройства через «Диспетчер устройств» в разделе «Контроллеры USB»;
  • проконтролируйте наличие доступа к веткам реестра
    • HKEY_LOCAL_MACHINESOFTWAREMicrosoftCryptographyCalais и
    • HKEY_LOCAL_MACHINESOFTWAREMicrosoftCryptographyCalaisReaders у текущего пользователя и Local Service (если необходимо, то добавьте), также убедитесь, что Служба «Смарт-карта» запущена от имени NT AUTHORITYLocalService («Пуск» — «Панель управления» — «Администрирование» — «Службы»).;
  • проверьте количество считывателей в настройках панели управления (должно быть значение 1);
  • переустановите комплект драйверов для исключения сбоя программного обеспечения.

Если ничего не помогло и ошибка осталась, обращайтесь в удостоверяющий центр «Астрал». Мы предлагаем услуги по генерации ЭЦП любых типов на выгодных условиях, а также комплексное техническое сопровождение. Для решения проблем мы готовы проконсультировать по телефону либо найти выход с помощью удаленного подключения к вашему компьютеру. Получить дополнительную информацию можно по телефону либо оставив заявку на сайте. Мы оперативно ответим и предоставим консультацию.

Источник

В этой статье мы познакомимся со стандартом PKCS#11, предназначенным для работы с различными криптографическими устройствами. Для демонстрации мы будем использовать токены и смарт-карты Рутокен ЭЦП 2.0.

Чтобы вам было проще понять эту информацию, перед её прочтением желательно:

  • ознакомиться с инфраструктурой PKI;

  • знать, что такое CMS-подпись;

  • знать, для чего нужен Рутокен и что он может.

Исходя из определения из Википедии:

PKCS #11 — один из стандартов семейства Public-Key Cryptography Standards (PKCS). Он определяет платформонезависимый программный интерфейс доступа к криптографическим устройствам смарт-картам, токенам, криптографическим ускорителям, серверам ключей и другим средствам криптографической защиты информации. Иногда именуется Cryptoki.

Проще говоря, PKCS#11 определяет платформонезависимый набор функций, структуры, константы и т.п. для работы с криптографическими устройствами. Эти функции могут быть реализованы внутри различных библиотек, например, opensc-pkcs11 или в нашей библиотеке по работе с устройствами Рутокен rtpkcs11ecp. Библиотеки могут отличаться не только реализацией, но и самим набором функций, типов и констант. Это возможно, так как стандарт PKCS#11 описывает различные способы расширения, что позволяет добавлять свои функции, например, для работы с CMS-подписью, флеш-памятью и т.п.

Но давайте обо всем по порядку. В первую очередь, определимся, что из себя представляют функции PKCS#11-библиотек. Функции PKCS#11 внутри — это обертки для работы с токенами и смарт-картами через APDU команды…

Про APDU

APDU — “язык ассемблера” для устройств.

Более подробно об APDU-формате написано в этой статье, мы же опишем его проще. APDU-формат описывает способ общения с различными устройствами с помощью байтовых последовательностей. На практике это происходит следующим образом:

  1. Токену или смарт-карте посылается байтовая последовательность;

  2. Операционная система устройства обрабатывает эту последовательность в команду и посылает в ответ код возврата и, при необходимости, дополнительную информацию.

Что же могут содержать внутри себя такие команды? Все, что угодно! Начиная с просьбы отправить информацию об устройстве или записать какие-то данные на него и заканчивая просьбой зашифровать указанное сообщение. Более того, эти команды могут быть разбиты на несколько, что позволяет оптимизировать работу с токеном и сделать ее конвейерной. К примеру, при шифровании сообщения устройству может передаваться небольшая часть сообщения, а он в ответ будет высылать результат шифрования только этой части. Эта особенность может быть использована при работе с данными больших размеров.

И вот вроде бы все хорошо: APDU даёт полную возможность для общения с токеном и смарт-картой, но зачем же тогда нужна PKCS#11-обертка? Причины достаточно очевидны:

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

  • Программирование через APDU-команды имеет “низкий КПД”. При выполнении даже самой простой операции надо написать множество команд. PKCS#11 устраняет эту проблему: при выполнении одной функции PKCS#11 посылается несколько APDU команд. Меньше пишешь — больше делаешь.

Теперь, когда мы знаем что лежит в основе PKCS#11-команд, перейдем к рассмотрению цикла работы с устройством.

Репозиторий с примерами

Чтобы улучшить понимание представленных ниже примеров рекомендуем:

  1. Клонировать репозиторий с примерами.

  2. Выполнить настройку системы согласно README.

  3. Попробовать собрать примеры.

  4. Отформатировать устройство семейства Рутокен ЭЦП 2.0 с помощью примера ex0_format_token.

Цикл работы с токеном

Придержим пока описание содержимого стандарта PKCS#11 и дадим поверхностное представление о том, как происходит работа с токеном в целом. Для этого рассмотрим листинг смены PIN-кода Пользователя на токене и смарт-карте:

#include 
#include "utils.h"

extern CK_FUNCTION_LIST_PTR functionList;                 // Указатель на список функций PKCS#11, хранящийся в структуре CK_FUNCTION_LIST
extern CK_FUNCTION_LIST_EXTENDED_PTR functionListEx;      // Указатель на список функций расширения PKCS#11, хранящийся в структуре CK_FUNCTION_LIST_EXTENDED

int change_pin_code(CK_SLOT_ID slot, char* oldPin, char* newPin);

int main(void)
{
    CK_SLOT_ID_PTR slots;                              // Массив идентификаторов слотов
    CK_ULONG slotCount;                                // Количество идентификаторов слотов в массиве
    char* oldPin = "12345678";
    char* newPin = "12345678";

    CK_RV rv;                                          // Код возврата. Могут быть возвращены только ошибки, определенные в PKCS#11
    int errorCode = 1;                                 // Флаг ошибки

    // инициализируем библиотеку
    if (init_pkcs11()) 
        goto exit;

    // получаем список слотов
    if (get_slot_list(&slots, &slotCount))
        goto free_pkcs11;

    if (slotCount == 0) {
        printf("No token foundn");
        goto free_slots;
    }

    // изменяем PIN-код
    if (change_pin_code(slots[0], oldPin, newPin))
        goto free_slots;


    errorCode = 0;

    /*************************************************************************
    * Очистить память, выделенную под слоты                                  *
    *************************************************************************/
free_slots:
    free(slots);

    /*************************************************************************
    * Деинициализировать библиотеку                                          *
    *************************************************************************/
free_pkcs11:
    free_pkcs11();

exit:
    if (errorCode) {
        printf("nnSome error occurred. Sample failed.n");
    } else {
        printf("nnSample has been completed successfully.n");
    }

    return errorCode;
}

Внутри заголовочного файла utils.h находится описание функций init_pkcs11, free_pkcs11, get_slot_list. Их определение мы дадим ниже.

Всю работу с токеном можно разделить на три этапа:

Подготовительный этап

Мы реализовали его внутри функции init_pkcs11:

#include "utils.h"

CK_FUNCTION_LIST_PTR functionList;                 // Указатель на список функций PKCS#11, хранящийся в структуре CK_FUNCTION_LIST
CK_FUNCTION_LIST_EXTENDED_PTR functionListEx;      // Указатель на список функций расширения PKCS#11, хранящийся в структуре CK_FUNCTION_LIST_EXTENDED
static HMODULE module;

int init_pkcs11()
{
    CK_C_GetFunctionList getFunctionList;              // Указатель на функцию C_GetFunctionList
    CK_C_EX_GetFunctionListExtended getFunctionListEx; // Указатель на функцию C_EX_GetFunctionListExtended

    /* Параметры для инициализации библиотеки: разрешаем использовать объекты синхронизации операционной системы */
    CK_C_INITIALIZE_ARGS initArgs = { NULL_PTR, NULL_PTR, NULL_PTR, NULL_PTR, CKF_OS_LOCKING_OK, NULL_PTR };

    CK_RV rv;                      // Код возврата PKCS#11 функций
    int errorCode = 1;                                 // Флаг ошибки

    /*************************************************************************
    * Выполнить действия для начала работы с библиотекой PKCS#11             *
    *************************************************************************/
    printf("Initialization...n");

    /*************************************************************************
    * Загрузить библиотеку                                                   *
    *************************************************************************/
    module = LoadLibrary(PKCS11_LIBRARY_DIR "/" PKCS11ECP_LIBRARY_NAME);
    CHECK(" LoadLibrary", module != NULL, exit);

    /*************************************************************************
    * Получить адрес функции запроса структуры с указателями на функции      *
    *************************************************************************/
    getFunctionList = (CK_C_GetFunctionList)GetProcAddress(module, "C_GetFunctionList");
    CHECK(" GetProcAddress (C_GetFunctionList)", getFunctionList != NULL, unload_pkcs11);

    /*************************************************************************
    * Получить адрес функции запроса структуры с указателями на функции      *
    * расширения стандарта PKCS#11                                           *
    *************************************************************************/
    getFunctionListEx = (CK_C_EX_GetFunctionListExtended)GetProcAddress(module, "C_EX_GetFunctionListExtended");
    CHECK(" GetProcAddress (C_EX_GetFunctionListExtended)", getFunctionList != NULL, unload_pkcs11);

    /*************************************************************************
    * Получить структуру с указателями на функции                            *
    *************************************************************************/
    rv = getFunctionList(&functionList);
    CHECK_AND_LOG(" Get function list", rv == CKR_OK, rvToStr(rv), unload_pkcs11);

    /*************************************************************************
    * Получить структуру с указателями на функции расширения стандарта       *
    *************************************************************************/
    rv = getFunctionListEx(&functionListEx);
    CHECK_AND_LOG(" Get function list extended", rv == CKR_OK, rvToStr(rv), unload_pkcs11);

    /*************************************************************************
    * Инициализировать библиотеку                                            *
    *************************************************************************/
    rv = functionList->C_Initialize(&initArgs);
    CHECK_AND_LOG(" C_Initialize", rv == CKR_OK, rvToStr(rv), unload_pkcs11);

    errorCode = 0;

    /*************************************************************************
    * Выгрузить библиотеку из памяти                                         *
    *************************************************************************/
unload_pkcs11:
    if (errorCode)
        CHECK_RELEASE(" FreeLibrary", FreeLibrary(module), errorCode);
exit:
    return errorCode;
}

Здесь происходит следующее:

  1. В память процесса подгружается PKCS#11-библиотека, хранящаяся по пути PKCS11ECP_LIBRARY_NAME, с помощью функции LoadLibrary (стандартная функция для Windows-систем, для Linux-систем определена обертка).

  2. Далее из библиотеки вытаскиваются указатели на функции C_GetFunctionList и C_EX_GetFunctionListExtended. Первая функция определена в стандарте PKCS#11 и позволяет получить структуру указателей на функции библиотеки. Вторая — является специфичной для библиотеки rtpkcs11ecp и позволяет получить схожую структуру указателей на функции расширения библиотеки. О функциях расширения мы поговорим позже.

  3. Потом мы вызываем полученную функцию C_GetFunctionList и получаем уже саму структуру указателей на функции.

  4. С помощью функции C_Initialize инициализируется загруженная библиотека. Функция C_Initialize в качестве аргумента принимает параметры инициализации библиотеки. Подробнее о них можно почитать здесь, для нас же важен флаг CKF_OS_LOCKING_OK. Его необходимо использовать, если мы хотим использовать библиотеку в нескольких потоках. В нашем примере мы могли бы опустить этот флаг.

Основной этап

Основной этап можно разделить на работу со слотами и работу внутри сессии

Этап работы со слотами

Слот — это дескриптор виртуального интерфейса, куда подключен токен. Конкретно в нашем примере весь этап работы со слотами уместился в определение одной функции get_slot_list:

int get_slot_list(CK_SLOT_ID_PTR* slots_ptr, CK_ULONG_PTR slotCount)
{
    CK_RV rv;
    int errorCode = 1;

    /*************************************************************************
    * Получить количество слотов c подключенными токенами                    *
    *************************************************************************/
    rv = functionList->C_GetSlotList(CK_TRUE, NULL_PTR, slotCount);
    CHECK_AND_LOG(" C_GetSlotList (number of slots)", rv == CKR_OK, rvToStr(rv), exit);

    CHECK_AND_LOG(" Checking available tokens", *slotCount > 0, " No tokens available", exit);

    /*************************************************************************
    * Получить список слотов c подключенными токенами                        *
    *************************************************************************/
    *slots_ptr = (CK_SLOT_ID_PTR)malloc(*slotCount * sizeof(CK_SLOT_ID));
    CHECK(" Memory allocation for slots", *slots_ptr != NULL_PTR, exit);

    rv = functionList->C_GetSlotList(CK_TRUE, *slots_ptr, slotCount);
    CHECK_AND_LOG(" C_GetSlotList", rv == CKR_OK, rvToStr(rv), free_slots);
    printf(" Slots available: %dn", (int)*slotCount);

    /*************************************************************************
    * Выставить признак успешного завершения программы                       *
    *************************************************************************/
    errorCode = 0;

free_slots:
    if (errorCode)
    {
        free(*slots_ptr);
    }

exit:
    return errorCode;
}

Работа со слотами происходит примерно в такой последовательности:

  1. Получение списка слотов с помощью функции C_GetSlotList или через функцию ожидания событий, связанных со слотами (пример будет рассмотрен ниже).

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

Этап работы внутри сессии

Сессия — это дескриптор контекста выполнения последовательности операций. Обычно во время сессий выполняются основные функции работы с токеном или смарт-картой: шифрование, подпись и т.п. В нашем случае выполняется смена PIN-кода:

int change_pin_code(CK_SLOT_ID slot, char* oldPin, char* newPin)
{
    CK_SESSION_HANDLE session;                         // Хэндл открытой сессии
    CK_RV rv;                                          // Код возврата. Могут быть возвращены только ошибки, определенные в PKCS#11
    int errorCode = 1;

    /*************************************************************************
    * Открыть RW сессию в первом доступном слоте                             *
    *************************************************************************/
    rv = functionList->C_OpenSession(slot, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &session);
    CHECK_AND_LOG(" C_OpenSession", rv == CKR_OK, rvToStr(rv), exit);

    /*************************************************************************
    * Выполнить аутентификацию Пользователя                                *
    *************************************************************************/
    rv = functionList->C_Login(session, CKU_USER, oldPin, strlen(oldPin));
    CHECK_AND_LOG(" C_Login (CKU_USER)", rv == CKR_OK, rvToStr(rv), close_session);

    /*************************************************************************
    * Установить PIN-код Пользователя по умолчанию                           *
    *************************************************************************/
    printf("nChanging user PIN to default...n");

    rv = functionList->C_SetPIN(session, NULL_PTR, 0, newPin, strlen(newPin));
    CHECK_AND_LOG(" C_SetPIN", rv == CKR_OK, rvToStr(rv), logout);

    printf("User PIN has been changed to default successfully.n");

    errorCode = 0;

    /*************************************************************************
    * Сбросить права доступа                                                 *
    *************************************************************************/
logout:
    rv = functionList->C_Logout(session);
    CHECK_RELEASE_AND_LOG(" C_Logout", rv == CKR_OK, rvToStr(rv), errorCode);

    /*************************************************************************
    * Закрыть открытую сессию в слоте                                        *
    *************************************************************************/
close_session:
    rv = functionList->C_CloseSession(session);
    CHECK_RELEASE_AND_LOG(" C_CloseSession", rv == CKR_OK, rvToStr(rv), errorCode);
exit:
    return errorCode;
}

Работу внутри сессий можно разделить на несколько этапов:

  1. Открытие сессии в слоте с помощью функции C_OpenSession.

  2. Аутентификация пользователя с помощью функции C_Login. Стандартно на Рутокене присутствуют два пользователя: Администратор (CKU_SO) и Пользователь (CKU_USER). Аутентификация на устройстве — не является обязательной операцией. Она нужна, когда мы хотим получить доступ к операциям и объектам, которые требуют наличия соответствующих прав доступа. В нашем случае, это операция смены PIN-кода Пользователя.

  3. Выполнение различных функций по работе с сессиями. В нашем случае это функция C_SetPIN.

  4. Далее по нисходящей могут идти операции сброса прав доступа (C_Logout) и завершения сессии (C_CloseSession).

Завершающий этап

Весь наш завершающий этап поместился внутри определения функции free_pkcs11:

int free_pkcs11()
{
        CK_RV rv;
        int errorCode;

        printf("nFinalizing... n");

    rv = functionList->C_Finalize(NULL_PTR);
        CHECK_RELEASE_AND_LOG(" C_Finalize", rv == CKR_OK, rvToStr(rv), errorCode);

    CHECK_RELEASE(" FreeLibrary", FreeLibrary(module), errorCode);

        return errorCode;
}

Завершающий этап можно разделить на:

  1. Деинициализацию библиотеки с помощью функции C_Finalize.

  2. Выгрузку библиотеки из памяти процесса через функцию FreeLibrary (для Linux-систем имеется обертка).

Классификация функций PKCS#11

Стандартные функции и функции расширения

В общем виде все функции внутри PKCS#11-библиотек можно разделить на:

  • Стандартные — те, что явно описаны в стандарте. Список указателей на эти функции можно получить с помощью функции C_GetFunctionList, хранящейся в этой же библиотеке. Сами же стандартные функции имеют префикс «C_».

  • Расширения — те, что были добавлены разработчиками библиотеки и не описаны в стандарте. Стандарт явно не определяет функцию для получения списка расширенных функций. Но в библиотеке rtpkcs11ecp этой функцией является C_EX_GetFunctionListExtended. Сами же функции-расширения обычно имеют префикс «C_EX_».

Описание стандартных функций можно найти в документации PKCS#11. Про то, как работать с расширениями — надо смотреть у разработчиков конкретных библиотек. Например, у нас для этого есть отдельная страница на портале документации.

Разделение по предназначению

С другой стороны, функции PKCS#11 можно классифицировать по их предназначению. Логично выделить следующие виды функций:

  • Функции общего назначения. Например, для получения списка функций или получения информации о библиотеке.

  • Функции работы со слотами. Они не зависят от контекста работы с токеном. Например, C_GetSlotInfo, C_GetTokenInfo и т.п.

  • Функции для работы с сессиями. Как уже говорилось ранее, обычно во время выполнения этих функций осуществляется основное взаимодействие с токеном. При выполнении функции внутри сессии контекст работы с токеном не теряется. Самый простой пример этих функций: функция аутентификации (C_Login), функции работы с закрытым ключом на токене (C_Sign, C_Encrypt) и т.п.

Атомарные и составные операции

Некоторые операции в PKCS#11 работают привычным для нас образом: вызвал функцию — получил результат. Но есть и операции, реализация которых выстроена через многократный вызов функций. Ярким примером такой операции является блочное шифрование: чтобы зашифровать данные нужно вызвать функции: C_EncryptInit, C_EncryptUpdate, C_EncryptFinal. Пример этого будет приведен ниже. Эта особенность связана с тем, что внутри библиотеки PKCS#11 скрыт вызов APDU-команд, который как раз предусматривает разбиение некоторых команд на несколько итераций. Как уже говорилось ранее, это способствует эффективному использованию PKCS#11 с потоками данных.

Работа со слотами

Слоты — это виртуальные устройства библиотеки для подключения токенов и смарт-карт. PKCS#11 предоставляет функции для получения списка слотов и ожидания изменения состояний слотов. Также с помощью специальных функций можно получать информацию о состоянии слота, например, наличие токена в нем, информация о подключенном токене и т.п. Давайте подробнее рассмотрим функции по работе со слотами.

Получение списка слотов

Одна из самых важных операций, которую мы будем использовать в 99 процентах случаев — это получение списка активных слотов. Для этого в PKCS#11 есть функция C_GetSlotList. Примером ее использования является функция get_slot_list, определенная ниже:

int get_slot_list(CK_SLOT_ID_PTR* slots_ptr, CK_ULONG_PTR slotCount)
{
    CK_RV rv;
    int errorCode = 1;

    /*************************************************************************
    * Получить количество слотов c подключенными токенами                    *
    *************************************************************************/
    rv = functionList->C_GetSlotList(CK_TRUE, NULL_PTR, slotCount);
    CHECK_AND_LOG(" C_GetSlotList (number of slots)", rv == CKR_OK, rvToStr(rv), exit);

    CHECK_AND_LOG(" Checking available tokens", *slotCount > 0, " No tokens available", exit);

    /*************************************************************************
    * Получить список слотов c подключенными токенами                        *
    *************************************************************************/
    *slots_ptr = (CK_SLOT_ID_PTR)malloc(*slotCount * sizeof(CK_SLOT_ID));
    CHECK(" Memory allocation for slots", *slots_ptr != NULL_PTR, exit);

    rv = functionList->C_GetSlotList(CK_TRUE, *slots_ptr, slotCount);
    CHECK_AND_LOG(" C_GetSlotList", rv == CKR_OK, rvToStr(rv), free_slots);
    printf(" Slots available: %dn", (int)*slotCount);

    /*************************************************************************
    * Выставить признак успешного завершения программы                       *
    *************************************************************************/
    errorCode = 0;

free_slots:
    if (errorCode)
    {
        free(*slots_ptr);
    }

exit:
    return errorCode;
}

Первый вызов функции C_GetSlotList позволяет получить количество доступных слотов. Это позволяет в дальнейшем выделять память под необходимое количество слотов. Второй вызов позволяет получить список слотов.

Первым аргументом C_GetSlotList является флаг, говорящий библиотеке, возвращать ли только слоты с подключенными устройствами (CK_TRUE) или нет (CK_FALSE).

Мониторинг событий слотов и получение информации о слоте

Тем не менее, хоть функция C_GetSlotList и является самой часто используемой, она неудобна при написании приложений, которые хотят динамически следить за состоянием слотов. Особенно это может быть критично при написании многопоточных приложений. На помощь может прийти функция мониторинга событий слотов C_WaitForSlotEvent. Она прерывает свою работу при любом изменении состояния какого-либо слота и возвращает идентификатор измененного слота. Работа с этой функцией выглядит примерно следующим образом:

int monitor_slot_event()
{
    int errorCode = 0;

    while (1) {
        CK_SLOT_ID slot ;
            CK_RV rv = functionList->C_WaitForSlotEvent(0, &slot, NULL_PTR);

        if (CKR_CRYPTOKI_NOT_INITIALIZED == rv) break; // Индикатор того, что PKCS#11 деинициализирована из памяти.
        CHECK_RELEASE_AND_LOG(" C_WaitForSlotEvent", rv == CKR_OK, rvToStr(rv), errorCode);
        if (errorCode)
            break;

        CK_SLOT_INFO slotInfo;
        rv = functionList->C_GetSlotInfo(slot, &slotInfo); // получение информации о слоте

        if (CKR_CRYPTOKI_NOT_INITIALIZED == rv) break; // Индикатор того, что PKCS#11 деинициализирована из памяти.
        CHECK_RELEASE_AND_LOG(" C_GetSlotInfo", rv == CKR_OK, rvToStr(rv), errorCode);
        if (errorCode)
            break;

        if (CKF_TOKEN_PRESENT & slotInfo.flags) { 
                    token_inserted(slot);
        }
    }
}

Как можно заметить, функция отлавливает помимо событий подключения и извлечения токена и смарт-карты, еще и событие деинициализации библиотеки PKCS#11 (код возврата CKR_CRYPTOKI_NOT_INITIALIZED). Данная особенность позволяет использовать эту функцию внутри многопоточных приложений без дополнительной возни с обработкой событий при завершении работы приложения.

Первым аргументом в функцию C_WaitForSlotEvent передается флаг блокировки (CKF_DONT_BLOCK). Если он установлен, то функция не является блокирующей. В таком случае, если никакой слот не был изменен, то возвращается код CKR_NO_EVENT.

Также стоит обратить внимание на использование функции получения информации о слоте C_GetSlotInfo. Мы использовали ее для определения наличия токена по флагу CKF_TOKEN_PRESENT. Подробнее с этой структурой можно ознакомиться здесь.

В этом файле представлен пример получения информации о подключенных токенах или смарт-картах с помощью функции C_GetTokenInfo. С помощью этой функции можно получить серийный номер, метку и другие характеристики подключенного устройства.

Объекты

Всё есть объект — это почти про PKCS#11.

Теперь начнём знакомство с PKCS#11-объектами. А чтобы закрепить материал по функциям, будем рассматривать множество примеров с их использованием. Поскольку одним из самых важных объектов, которые обычно хранятся на токене или смарт-карте является ключевая пара, мы начнём знакомство с объектами через генерацию ключевой пары.

Создание объектов — на примере генерации ключевых пар

В первую очередь, напишем функцию, которая будет генерировать ключевую пару ГОСТ Р 34.10-2012 256 бит на указанном слоте:

int gen_gost_key_pair(CK_SESSION_HANDLE session)
{
    CK_KEY_TYPE keyTypeGostR3410_2012_256 = CKK_GOSTR3410;
    CK_BYTE keyPairIdGost2012_256[] = { "GOST R 34.10-2012 (256 bits) sample key pair ID (Aktiv Co.)" };
    CK_BYTE parametersGostR3410_2012_256[] = { 0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x23, 0x01 };
    CK_BYTE parametersGostR3411_2012_256[] = { 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x02, 0x02 };
    CK_BBOOL attributeTrue = CK_TRUE;
    CK_BBOOL attributeFalse = CK_FALSE;

    CK_OBJECT_CLASS publicKeyObject = CKO_PUBLIC_KEY;

    CK_ATTRIBUTE publicKeyTemplate[] =
    {
        { CKA_CLASS, &publicKeyObject, sizeof(publicKeyObject)},                                        // Класс - открытый ключ
        { CKA_ID, &keyPairIdGost2012_256, sizeof(keyPairIdGost2012_256) - 1 },                          // Идентификатор ключевой пары (должен совпадать у открытого и закрытого ключей)
        { CKA_KEY_TYPE, &keyTypeGostR3410_2012_256, sizeof(keyTypeGostR3410_2012_256) },                // Тип ключа - ГОСТ Р 34.10-2012(256)
        { CKA_TOKEN, &attributeTrue, sizeof(attributeTrue)},                                            // Ключ является объектом токена
        { CKA_PRIVATE, &attributeFalse, sizeof(attributeFalse)},                                        // Ключ доступен без аутентификации на токене
        { CKA_GOSTR3410_PARAMS, parametersGostR3410_2012_256, sizeof(parametersGostR3410_2012_256) },   // Параметры алгоритма ГОСТ Р 34.10-2012(256)
        { CKA_GOSTR3411_PARAMS, parametersGostR3411_2012_256, sizeof(parametersGostR3411_2012_256) }    // Параметры алгоритма ГОСТ Р 34.11-2012(256)
    };

    CK_OBJECT_CLASS privateKeyObject = CKO_PRIVATE_KEY;

    CK_ATTRIBUTE privateKeyTemplate[] =
    {
        { CKA_CLASS, &privateKeyObject, sizeof(privateKeyObject)},                                      // Класс - закрытый ключ
        { CKA_ID, &keyPairIdGost2012_256, sizeof(keyPairIdGost2012_256) - 1 },                          // Идентификатор ключевой пары (должен совпадать у открытого и закрытого ключей)
        { CKA_KEY_TYPE, &keyTypeGostR3410_2012_256, sizeof(keyTypeGostR3410_2012_256) },                // Тип ключа - ГОСТ Р 34.10-2012(256)
        { CKA_TOKEN, &attributeTrue, sizeof(attributeTrue)},                                            // Ключ является объектом токена
        { CKA_PRIVATE, &attributeTrue, sizeof(attributeTrue)},                                          // Ключ доступен только после аутентификации на токене
        { CKA_GOSTR3410_PARAMS, parametersGostR3410_2012_256, sizeof(parametersGostR3410_2012_256) },   // Параметры алгоритма ГОСТ Р 34.10-2012(256)
        { CKA_GOSTR3411_PARAMS, parametersGostR3411_2012_256, sizeof(parametersGostR3411_2012_256) }    // Параметры алгоритма ГОСТ Р 34.11-2012(256)
    };

    CK_OBJECT_HANDLE privateKey;                      // Хэндл закрытого ключа ГОСТ (ключевая пара для подписи и шифрования)    
    CK_OBJECT_HANDLE publicKey;                       // Хэндл открытого ключа ГОСТ (ключевая пара для подписи и шифрования)    

    CK_MECHANISM gostR3410_2012_256KeyPairGenMech = { CKM_GOSTR3410_KEY_PAIR_GEN, NULL_PTR, 0 };

    CK_RV rv;   
    int errorCode = 1;

    /*************************************************************************
    * Генерация ключевой пары на токене                                      *
    *************************************************************************/
    rv = functionList->C_GenerateKeyPair(session, &gostR3410_2012_256KeyPairGenMech, 
    publicKeyTemplate, arraysize(publicKeyTemplate),
    privateKeyTemplate, arraysize(privateKeyTemplate),
    &publicKey, &privateKey);
    CHECK_AND_LOG(" C_GenerateKeyPair", rv == CKR_OK, rvToStr(rv), exit);

    errorCode = 0;
    printf("Gost key pair generated successfullyn");

exit:
    return errorCode;
}

В этом примере для нас много нового. Можно заметить, что здесь вызывается всего одна функция C_GenerateKeyPair. Эта функция является стандартной функцией генерации ключей, работающей внутри открытой сессии. Также стоит отметить, что пользователь должен быть аутентифицирован перед вызовом этой функции.

Теперь перейдём к объектам. Внутри функции gen_gost_key_pair происходит создание двух объектов на токене: открытого и закрытого ключей. Вот, что стандарт PKCS#11 говорит про объекты:

Cryptoki recognizes a number of classes of objects, as defined in the CK_OBJECT_CLASS data type. An object consists of a set of attributes, each of which has a given value. Each attribute that an object possesses has precisely one value.

То есть стандарт не даёт явное определение объекта, но из того, что там написано, мы знаем:

  • объект относится к определенному классу;

  • объект состоит из множества атрибутов, имеющих заданное значение;

  • каждый атрибут имеет ровно одно значение.

Также в стандарте представлена классификация объектов:

Иерархия PKCS#11 объектов

Иерархия PKCS#11 объектов

Заголовок диаграммы определяет класс объекта, а то что ниже — некоторые из его атрибутов.
Видно, что объектом может являться некоторый механизм (о механизмах мы поговорим позже), встроенные функции токена (Hardware feature), некоторые данные на токене (Storage). В нашем случае мы выполнили действие с данными.

Название всех атрибутов начинается с префикса «CKA_». Одним из самых важных атрибутов является CKA_ID. Он задаёт идентификатор объекта и используется для связи ключевых пар и сертификатов. Атрибут CKA_TOKEN является булевым и показывает, является ли объект — объектом токена. Атрибут CKA_PRIVATE тоже является булевым и определяет нужна ли предварительная аутентификация для получения доступа к объекту. Атрибут CKA_ID — задаёт шестнадцатеричный идентификатор объекта. Также есть булевые атрибуты CKA_MODIFIABLE, CKA_COPYABLE, CKA_DESTROYABLE для более тонкой настройки доступа к объекту. Подробнее про возможные атрибуты конкретных классов объектов можно прочитать непосредственно в самом стандарте для каждого класса объектов.

Объекты данных могут быть самыми разнообразными: асимметричные ключи, симметричные ключи, сертификаты, просто какая-либо информация на токене. В нашем примере мы создали два объекта, но сделали это неявно с помощью механизма генерации ключей. C_GenerateKeyPair приняла на вход механизм генерации ключевой пары, шаблоны открытого и закрытого ключа и с помощью механизма сгенерировала объекты ключевой пары (publicKey и privateKey). Мы пока ещё не описывали механизмы, но, говоря простым языком, механизм — это идентификатор операции, которая выполняет какую-то криптографическую функцию. В нашем случае — это функция генерации объекта.

Поиск объектов и создание сырой подписи

В прошлом разделе мы сгенерировали ключевую пару. На этот раз будем считать, что у нас нет хендлов на сгенерированные ключи, но мы знаем их идентификатор – CKA_ID. Попробуем найти объект закрытого ключа на токене:

int findObjects(CK_SESSION_HANDLE session,         // Хэндл открытой сессии
                CK_ATTRIBUTE_PTR attributes,       // Массив с шаблоном для поиска
                CK_ULONG attrCount,                // Количество атрибутов в массиве поиска
                CK_OBJECT_HANDLE objects[],        // Массив для записи найденных объектов
                CK_ULONG* objectsCount             // Количество найденных объектов
                       )
{
    CK_RV rv;                                           // Код возврата. Могут быть возвращены только ошибки, определенные в PKCS#11
    int errorCode = 1;                                  // Флаг ошибки

    /*************************************************************************
    * Инициализировать операцию поиска                                       *
    *************************************************************************/
    rv = functionList->C_FindObjectsInit(session, attributes, attrCount);
    CHECK_AND_LOG("  C_FindObjectsInit", rv == CKR_OK, rvToStr(rv), exit);

    /*************************************************************************
    * Найти все объекты, соответствующие критериям поиска                    *
    *************************************************************************/

    rv = functionList->C_FindObjects(session, objects, *objectsCount, objectsCount);
    CHECK_AND_LOG("  C_FindObjects", rv == CKR_OK, rvToStr(rv), find_final);

    errorCode = 0;

    /*************************************************************************
    * Деинициализировать операцию поиска                                     *
    *************************************************************************/
find_final:
    rv = functionList->C_FindObjectsFinal(session);
    CHECK_RELEASE_AND_LOG("  C_FindObjectsFinal", rv == CKR_OK, rvToStr(rv), errorCode);

exit:
    return errorCode;
}

int find_private_key(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE_PTR privateKey)
{
        CK_BYTE keyPairIdGost2012_256[] = { "GOST R 34.10-2012 (256 bits) sample key pair ID (Aktiv Co.)" };
        CK_OBJECT_CLASS privateKeyObject = CKO_PRIVATE_KEY;

        CK_ATTRIBUTE privateKeyTemplate[] =
        {
                { CKA_CLASS, &privateKeyObject, sizeof(privateKeyObject)},              // Класс - закрытый ключ
                { CKA_ID, &keyPairIdGost2012_256, sizeof(keyPairIdGost2012_256) - 1},   // Идентификатор ключевой пары (должен совпадать у открытого и закрытого ключей)
        };

        CK_ULONG cnt = 1;

        CK_RV rv;
        int errorCode = 1;

        rv = findObjects(session, privateKeyTemplate,
        arraysize(privateKeyTemplate), privateKey, &cnt);

        CHECK(" findObjects", rv == 0, exit);
        CHECK_AND_LOG(" Checking number of keys found", cnt == 1, "No objects foundn", exit);

        errorCode = 0;
exit:
        return errorCode;
}

Данный пример иллюстрирует работу с функцией поиска объекта по заданным атрибутам. Как можно заметить, операция поиска объекта на токене является составной и работа с ней сводится как минимум к вызову трёх функций: C_FindObjectsInit, C_FindObjects, C_FindObjectsFinal. Функция C_FindObjects может вызываться по несколько раз, и каждый раз она будет возвращать следующие объекты поиска. Предпоследний аргумент функции C_FindObjects задаёт размер выходного массива объектов. А последний — количество полученных объектов после очередного поиска.

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

int sign(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE privateKey)
{    
    /* OID алгоритма хеширования ГОСТ Р 34.11-2012(256)                     */
    CK_BYTE parametersGostR3411_256[] = {0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x02, 0x02};

    /* Механизм подписи/проверки подписи по алгоритму ГОСТ Р 34.10-2012(256) и хешированием по алгоритму ГОСТ Р 34.11-2012(256) */
    CK_MECHANISM gost3410SignWith3411Mech = { CKM_GOSTR3410_WITH_GOSTR3411_12_256, ¶metersGostR3411_256, sizeof(parametersGostR3411_256)};

    CK_BYTE data[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
               0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
               0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
               0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 };

    CK_BYTE_PTR signature;                            // Указатель на буфер, содержащий цифровую подпись для данных
    CK_ULONG signatureSize;                           // Размер буфера, содержащего цифровую подпись для данных, в байтах

    CK_RV rv;
    int errorCode = 1;

    /*************************************************************************
    * Вычислить подпись от данных                                            *
    *************************************************************************/
    printf(" Signing data...n");

    /*************************************************************************
    * Инициализировать операцию подписи данных                               *
    *************************************************************************/
    rv = functionList->C_SignInit(session, &gost3410SignWith3411Mech, privateKey);
    CHECK_AND_LOG("  >C_SignInit", rv == CKR_OK, rvToStr(rv), exit);

    /*************************************************************************
    * Определить размер данных подписи                                       *
    *************************************************************************/
    rv = functionList->C_Sign(session, data, sizeof(data), NULL_PTR, &signatureSize);
    CHECK_AND_LOG("  C_Sign(get size)", rv == CKR_OK, rvToStr(rv), exit);

    /*************************************************************************
    * Подписать данные                                                       *
    *************************************************************************/

    signature = (CK_BYTE*)malloc(signatureSize * sizeof(CK_BYTE));
    CHECK("  Memory allocation for signature", signature != NULL, exit);

    rv = functionList->C_Sign(session, data, sizeof(data), signature, &signatureSize);
    CHECK_AND_LOG("  C_Sign (signing)", rv == CKR_OK, rvToStr(rv), free_signature);


    /*************************************************************************
    * Распечатать буфер, содержащий подпись                                  *
    *************************************************************************/
    printf("  Signature buffer is: n");
    printHex(signature, signatureSize);
    printf("Data has been signed successfully.n");

    errorCode = 0;

free_signature:
    free(signature);
exit:
    return errorCode;
}

В этом примере подпись и хеш можно считать одновременно. Такой вариант рекомендован для безопасности: цепочку «хеширование-подпись» лучше не «разрывать». Чтобы показать, какой алгоритм хеширования использовать, мы передали его OID.

Также имеется возможность считать сырую подпись в два этапа: сначала брать хеш от данных, а затем вычислялась подпись от хеша. Такой подход более модульный, т.к. алгоритмы хеширования и вычисления подписи могут быть любыми и их можно комбинировать. Естественно, комбинировать можно с некоторыми ограничениями, которые налагаются стандартами, например, на длину хеша.

Работа с функциями расширения на примере создания запроса на сертификат

Пришло время показать, как работать с функциями-расширениями. Сделаем это на примере библиотеки PKCS#11 от Рутокен и создадим запрос на сертификат для нашей ключевой пары. Генерация запроса на сертификат не описана в стандарте, поэтому сделаем это через функцию-расширение C_EX_CreateCSR.

int create_csr(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE publicKey, CK_OBJECT_HANDLE privateKey)
{
    /*************************************************************************
    * Запрос на получение сертификата                                        *
    *************************************************************************/
    /*************************************************************************
    * Список полей DN (Distinguished Name)                                   *
    *************************************************************************/
    CK_CHAR_PTR dn[] = { (CK_CHAR_PTR)"CN",                   // Тип поля CN (Common Name)
                     (CK_CHAR_PTR)"UTF8String:Иванов",        // Значение
                     (CK_CHAR_PTR)"C",                        // C (Country)
                     (CK_CHAR_PTR)"RU",
                     (CK_CHAR_PTR)"2.5.4.5",                  // SN (Serial Number)
                     (CK_CHAR_PTR)"12312312312",
                     (CK_CHAR_PTR)"1.2.840.113549.1.9.1",     // E (E-mail)
                     (CK_CHAR_PTR)"ivanov@mail.ru",
                     (CK_CHAR_PTR)"ST",                       // ST (State or province)
                     (CK_CHAR_PTR)"UTF8String:Москва",
                     (CK_CHAR_PTR)"O",                        // O (Organization)
                     (CK_CHAR_PTR)"CompanyName",
                     (CK_CHAR_PTR)"OU",                       // OU (Organizational Unit)
                     (CK_CHAR_PTR)"Devel",
                     (CK_CHAR_PTR)"L",                        // L (Locality)
                     (CK_CHAR_PTR)"Moscow", };

    /*************************************************************************
    * Список дополнительных полей                                            *
    *************************************************************************/
    CK_CHAR_PTR exts[] = {(CK_CHAR_PTR)"keyUsage",                                                        // Использование ключа
                      (CK_CHAR_PTR)"digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment",
                      (CK_CHAR_PTR)"extendedKeyUsage",                                                    // Дополнительное использование
                      (CK_CHAR_PTR)"1.2.643.2.2.34.6,1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.4",
                      (CK_CHAR_PTR)"2.5.29.17",                                                           // Дополнительное имя (пример с кодированием в виде DER)
                      (CK_CHAR_PTR)"DER:30:0F:81:0D:65:78:61:6d:70:6c:65:40:79:61:2E:72:75",
                      (CK_CHAR_PTR)"2.5.29.32",                                                           // Политики сертификата (кодирование в виде DER с пометкой "critical")
                      (CK_CHAR_PTR)"critical,DER:30:0A:30:08:06:06:2A:85:03:64:71:01",
                      (CK_CHAR_PTR)"1.2.643.100.111",                                                     // Средства электронной подписи владельца
                      (CK_CHAR_PTR)"ASN1:UTF8String:СКЗИ "Рутокен ЭЦП 2.0"", };

    CK_BYTE_PTR csr;                                   // Указатель на буфер, содержащий подписанный запрос на сертификат
    CK_ULONG csrSize;                                  // Размер запроса на сертификат в байтах

    char* csrPem;                                      // Строка с CSR в формате PEM

    CK_RV rv;
    int errorCode = 1;

    /*************************************************************************
    * Создать запрос на сертификат                                           *
    *************************************************************************/
    printf("nCreating CSR...n");

    /*************************************************************************
    * Создание запроса на сертификат                                         *
    *************************************************************************/
    rv = functionListEx->C_EX_CreateCSR(session, publicKey, dn, arraysize(dn), &csr, &csrSize, privateKey, NULL_PTR, 0, exts, arraysize(exts));
    CHECK_AND_LOG(" C_EX_CreateCSR", rv == CKR_OK, rvToStr(rv), exit);

    /*************************************************************************
    * Сконвертировать и распечатать буфер в формате PEM                      *
    *************************************************************************/
    GetCSRAsPEM(csr, csrSize, &csrPem);
    CHECK(" Get CSR in PEM format", csrPem != NULL, free_csr);

    printf("nCertificate request is:n");
    printf("%sn", csrPem);

    errorCode = 0;
    printf("Creating CSR has been completed successfully.n");
free_csr_pem:
    free(csrPem);
free_csr:
    rv = functionListEx->C_EX_FreeBuffer(csr);
    CHECK_RELEASE_AND_LOG(" C_EX_FreeBuffer", rv == CKR_OK, rvToStr(rv), errorCode);
exit:
    return errorCode;
}

Можно заметить, что работа с функциями расширения очень похожа на работу со стандартными функциями. Основное отличие лишь в том, что мы обращаемся к другому списку функций CK_FUNCTION_LIST_EXTENDED_PTR. Создание запроса на сертификат происходит в одну строчку функцией C_EX_CreateCSR и возвращает запрос в DER-формате. Также стоит обратить внимание, что память, выделенную внутри библиотеки, следует высвобождать с помощью функции C_EX_FreeBuffer.

По полученному запросу можно получить сертификат в Удостоверяющем центре. Например, воспользуемся тестовым УЦ КриптоПро для получения сертификата. Полученный сертификат необходимо скачать в DER-формате, сохранить в файле с именем «cert_2012-256.cer» и положить в директорию, из которой вы запускаете примеры. Полученный сертификат можно импортировать на токен.

Импорт сертификата на токен. Создание объекта вручную

Сертификаты на токене так же как и ключи — являются объектами. Сертификат можно импортировать на токен, создав объект с нужными атрибутами. Для этого мы реализовали функцию: import_cert:

int import_cert(CK_SESSION_HANDLE session)
{
    CK_OBJECT_CLASS certificateObject = CKO_CERTIFICATE;
    CK_BYTE keyPairIdGost2012_256[] = { "GOST R 34.10-2012 (256 bits) sample key pair ID (Aktiv Co.)" };
    CK_BBOOL attributeTrue = CK_TRUE;
    CK_BBOOL attributeFalse = CK_FALSE;
    CK_CERTIFICATE_TYPE certificateType = CKC_X_509;
    CK_ULONG tokenUserCertificate = 1;

    /*************************************************************************
    * Шаблон для импорта сертификата                                         *
    *************************************************************************/
    CK_ATTRIBUTE certificateTemplate[] =
    {
        { CKA_VALUE, 0, 0 },                                                               // Значение сертификата (заполняется в процессе работы)
        { CKA_CLASS, &certificateObject, sizeof(certificateObject) },                      // Класс - сертификат
        { CKA_ID, &keyPairIdGost2012_256, sizeof(keyPairIdGost2012_256) - 1 },             // Идентификатор сертификата (совпадает с идентификатором соответствующего ключа)
        { CKA_TOKEN, &attributeTrue, sizeof(attributeTrue) },                              // Сертификат является объектом токена
        { CKA_PRIVATE, &attributeFalse, sizeof(attributeFalse) },                          // Сертификат доступен без аутентификации
        { CKA_CERTIFICATE_TYPE, &certificateType, sizeof(certificateType) },               // Тип сертификата - X.509
        { CKA_CERTIFICATE_CATEGORY, &tokenUserCertificate, sizeof(tokenUserCertificate) }, // Категория сертификата - пользовательский
    };

    FILE* certFile;                                   // Поток ввода сертификата
    CK_BYTE_PTR certDer;                              // Массив с сертификатом в DER формате
    CK_ULONG certSize;                                // Размер массива сертификата

    CK_OBJECT_HANDLE certificate;                     // Хэндл сертификата

    CK_RV rv;
    int r;
    int errorCode = 1;                                // Флаг ошибки

    /*************************************************************************
    * Открыть поточный ввод сертификата из файла                             *
    *************************************************************************/
    certFile = fopen("cert_2012-256.cer", "rb");
    CHECK_AND_LOG(" fopen", certFile != NULL, ""cert_2012-256.cer" doesn't exist", exit);

    /*************************************************************************
    * Определить размер файла, содержащего сертификат                        *
    *************************************************************************/
    r = fseek(certFile, 0, SEEK_END);
    CHECK(" fseek", r == 0, close_certFile);
    certSize = ftell(certFile);
    CHECK(" ftell", certSize > 0, close_certFile);
    r = fseek(certFile, 0, SEEK_SET);
    CHECK(" fseek", r == 0, close_certFile);

    /*************************************************************************
    * Выделить память для сертификата                                        *
    *************************************************************************/
    certDer = (CK_BYTE_PTR)malloc(certSize);
    CHECK(" malloc", certDer != NULL, close_certFile);

    /*************************************************************************
    * Прочитать сертификат                                                   *
    *************************************************************************/
    r = (int)fread(certDer, 1, (int)certSize, certFile);
    CHECK(" fread", r == (int)certSize, free_certificate);

    /*************************************************************************
    * Задать шаблон сертификата для импорта                                  *
    *************************************************************************/
    certificateTemplate[0].pValue = certDer;
    certificateTemplate[0].ulValueLen = certSize;

    /*************************************************************************
    * Создать сертификат на токене                                         *
    *************************************************************************/
    rv = functionList->C_CreateObject(session, certificateTemplate, arraysize(certificateTemplate), &certificate);
    CHECK_AND_LOG(" C_CreateObject", rv == CKR_OK, rvToStr(rv), free_certificate);

    errorCode = 0;
    printf("Certificate has been created successfullyn");


    /*************************************************************************
    * Очистить память из-под строки с сертификатом                           *
    *************************************************************************/
free_certificate:
    free(certDer);

    /*************************************************************************
    * Закрыть поток ввода сертификата                                        *
    *************************************************************************/
close_certFile:
    r = fclose(certFile);
    CHECK_RELEASE(" fclose", r == 0, errorCode);

exit:
    return errorCode;
}

На этот раз мы создали объект напрямую с помощью функции C_CreateObject. Для создания объекта сертификата мы аналогично передали шаблон с атрибутами объекта: тело сертификата, идентификатор, тип доступа, тип сертификата и т.п.

Функцию C_CreateObject можно использовать не только для создания сертификата на токене, но и для создания других объектов, например, публичных ключей (CKO_PUBLIC_KEY), закрытых ключей (CKO_PRIVATE_KEY), симметричных ключей (CKO_SECRET_KEY), обычных данных (CKO_DATA). Их значение будет также содержаться внутри атрибута CKA_VALUE.

Теперь, когда у нас на токене имеется и ключевая пара и сертификат, для закрепления материала рассмотрим операцию создания CMS-подписи.

Формирование CMS-подписи

Данная возможность является расширением библиотеки Рутокен и может работать только с ГОСТ-ключами. Для создания подписи в формате CMS требуется наличие закрытого ключа и сертификата (неявно содержащего в себе открытый ключ). Создание CMS-подписи реализовано в функции sign_cms:

int sign_cms(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE certificate, CK_OBJECT_HANDLE privateKey)
{
    /*************************************************************************
    * Данные для подписи                                                     *
    *************************************************************************/
    CK_BYTE data[] =
    {
        0x01, 0x00, 0x02, 0x35, 0x35,
        0x02, 0x00, 0x01, 0x01,
        0x81, 0x00, 0x09, 0x34, 0x30, 0x34, 0x34, 0x34, 0x35, 0x39, 0x39, 0x38,
        0x82, 0x00, 0x0A, 0x37, 0x37, 0x38, 0x31, 0x35, 0x36, 0x34, 0x36, 0x31, 0x31,
        0x83, 0x00, 0x13, 0x41, 0x6B, 0x74, 0x69, 0x76, 0x20, 0x52, 0x75, 0x74, 0x6F, 0x6B, 0x65, 0x6E, 0x20, 0x42, 0x61, 0x6E, 0x6B, 0x2E,
        0x84, 0x00, 0x14, 0x34, 0x37, 0x37, 0x37, 0x38, 0x38, 0x38, 0x39, 0x39, 0x39, 0x31, 0x31, 0x31, 0x31, 0x31, 0x32, 0x32, 0x32, 0x37, 0x36,
        0x85, 0x00, 0x0A, 0x33, 0x32, 0x32, 0x38, 0x37, 0x33, 0x36, 0x37, 0x36, 0x35,
        0x86, 0x00, 0x03, 0x52, 0x55, 0x42,
        0xFF, 0x00, 0x0D, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
    };

    CK_BYTE_PTR signature;                             // Указатель на буфер, содержащий подпись исходных данных
    CK_ULONG signatureSize;                            // Размер буфера, содержащего подпись исходных данных, в байтах
    char* signaturePem;                                // Строка с CMS в формате PEM

    CK_RV rv;
    int errorCode = 1;                                 // Флаг ошибки

    /*************************************************************************
    * Подписать данные                                                       *
    *************************************************************************/
    rv = functionListEx->C_EX_PKCS7Sign(session, data, sizeof(data), certificate,
        &signature, &signatureSize, privateKey, NULL_PTR, 0, USE_HARDWARE_HASH);
    CHECK_AND_LOG(" C_EX_PKCS7Sign", rv == CKR_OK, rvToStr(rv), exit);

        /*************************************************************************
        * Сконвертировать и распечатать буфер в формате PEM                      *
        *************************************************************************/
        GetCMSAsPEM(signature, signatureSize, &signaturePem);
        CHECK(" Get CMS in PEM format", signaturePem != NULL, free_signature);

        printf("nSignature is:n");
        printf("%sn", signaturePem);


    errorCode = 0;
    printf("Data has been signed successfully.n");

free_signature_pem:
    free(signaturePem);

    /*************************************************************************
    * Освободить память, выделенную в библиотеке                             *
    *************************************************************************/
free_signature:
    rv = functionListEx->C_EX_FreeBuffer(signature);
    CHECK_RELEASE_AND_LOG(" C_EX_FreeBuffer", rv == CKR_OK, rvToStr(rv), errorCode);

exit:
    return errorCode;
}

Создание CMS-подписи произошло вызовом всего лишь одной функции расширения C_EX_PKCS7Sign. А объект сертификата нашелся так же просто, как и объект ключа с минимальными отличиями в коде. Все это показывает, как просто и лаконично (по меркам языка C) спроектирован стандарт PKCS#11 с идеей объектного подхода.

Получение и установка атрибутов публичных объектов

В завершение главы про объекты хотелось бы отметить, что атрибуты публичных объектов можно получать и изменять. Делается это с помощью функций C_SetAttributeValue и C_GetAttributeValue.

Логика работы с функцией C_SetAttributeValue очень похожа на логику создания объектов — создаётся шаблон, атрибуты заполняются указанными значениями. Все это передаётся на вход функции C_SetAttributeValue. Изменять атрибуты можно, если у объекта атрибут CKA_MODIFIABLE равен CK_TRUE.

При получении значений атрибутов иногда неизвестно, какой будет выходной размер атрибута. В таком случае создается шаблон с нулевыми значениями указателей на выходные объекта атрибутов и их размеров. Этот шаблон передаётся функции C_GetAttributeValue. Функция заполняет значение выходных размеров атрибутов в этом шаблоне. Мы может воспользоваться этой информацией для выделения памяти под атрибуты в шаблоне и дальнейшего вызова функции C_GetAttributeValue.

Для демонстрации работы функций C_GetAttributeValue и C_SetAttributeValue рассмотрим пример получения тела сертификата и изменения текстовой метки сертификата:

int get_cert(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE cert)
{
    CK_BYTE_PTR body = NULL_PTR;
    CK_ATTRIBUTE template[] = {
        {CKA_VALUE, NULL_PTR, 0}
    };

    char* certPem;

    CK_RV rv;
    int errorCode=1;

        /*************************************************************************
        * Получение размера тела сертификата                                     *
        *************************************************************************/
    rv = functionList->C_GetAttributeValue(session, cert, template, arraysize(template));
    CHECK_AND_LOG(" C_GetAttributeValue", rv == CKR_OK, rvToStr(rv), exit);

    body = (CK_BYTE_PTR) malloc(template[0].ulValueLen);
    template[0].pValue = body;

        /*************************************************************************
        * Получение тела сертификата в формате DER                               *
        *************************************************************************/
    rv = functionList->C_GetAttributeValue(session, cert, template, arraysize(template));
    CHECK_AND_LOG(" C_GetAttributeValue", rv == CKR_OK, rvToStr(rv), free);

        /*************************************************************************
        * Сконвертировать и распечатать буфер в формате PEM                      *
        *************************************************************************/
        GetCertAsPem(body, template[0].ulValueLen, &certPem);
        CHECK(" Get cert in PEM format", certPem != NULL, free);

        printf("nCertificate request is:n");
        printf("%sn", certPem);

    errorCode = 0;
        printf("Getting cert body has been completed successfully.n");

free_cert_pem:
        free(certPem);
free:
    free(body);
exit:
    return errorCode;
}

int set_cert_label(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE cert)
{
    CK_UTF8CHAR label[] = {"GOST certificate"};

    CK_ATTRIBUTE template[] = {
        CKA_LABEL, label, sizeof(label)-1
    };

    CK_RV rv;
    int errorCode = 1;

        /*************************************************************************
        * Установка метки сертификата                                            *
        *************************************************************************/
    rv = functionList->C_SetAttributeValue(session, cert, template, arraysize(template));
    CHECK_AND_LOG(" C_SetAttributeValue", rv == CKR_OK, rvToStr(rv), exit);

    errorCode = 0;

exit:
    return errorCode;
}

Про механизмы

Мы уже ранее встречались с механизмами в примерах и дали краткое описание. Давайте теперь опишем их подробнее. Описание механизмов в PKCS#11 было вынесено в отдельный документ, с которым можно ознакомиться здесь. В этом документе написано:

A mechanism specifies precisely how a certain cryptographic process is to be performed. PKCS #11 implementations MAY use one of more mechanisms defined in this docuоment.

Отсюда следует, что механизмы:

  • Определяют некоторое криптографическое преобразование.

  • PCKS#11 может использовать механизмы, определенные в этом документе.

Более того, некоторые PKCS#11-библиотеки могут использовать и другие механизмы.

Согласно документации механизмы можно разделить на:

  • Механизмы шифрования и расшифрования (Encrypt & Decrypt);

  • Механизмы подписи и проверки подписи (Sign & Verify);

  • Механизм формирования хеша (Digest);

  • Механизм восстановления подписи по публичному ключу (Sign Recover & Verify Recovery);

  • Механизм генерации симметричных и асимметричных ключей (Gen. Key/Key Pair);

  • Экспорт и импорт ключей (Wrap & Unwrap);

  • Выработка общего ключа на основе асимметричных ключей (Derive).

Каждый механизм идентифицирует одну или несколько из этих функций. Так, например, ранее рассмотренный механизм CKM_GOSTR3410_KEY_PAIR_GEN предназначен для генерации ключей, а механизм CKM_AES_ECB может использоваться как для зашифрования/расшифрования, так и для свертки/развертки ключей.

Работа с механизмами, на примере зашифрования сообщения

Механизмы в PKCS#11 задаются через структур CK_MECHANISM. Объекты типа CK_MECHANISM в дальнейшем передаются PKCS#11-функциям для указания нужного механизма. Сама структура CK_MECHANISM состоит из трех элементов:

  1. Идентификатор механизма (mechanism);

  2. Указатель на параметры механизма (pParameter);

  3. Длина в байтах параметров механизма (ulParameterLen).

Самый простой пример параметра механизма — вектор инициализации для алгоритмов шифрования. Попробуем на примере показать, как можно зашифровать сообщение через механизм CKM_GOST28147 с указанным вектором инициализации. Пример реализован внутри функции encrypt_data:

int encrypt_data(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE secretKey)
{
    /* Имитовставка */
    CK_BYTE iv[] = { 0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x1f };
    /*  Механизм программного шифрования/расшифрования по алгоритму ГОСТ 28147-89 */
    CK_MECHANISM gost28147EncDecMech = {CKM_GOST28147, iv, sizeof(iv)};

    /*************************************************************************
    * Данные для шифрования                                                  *
    *************************************************************************/
    CK_BYTE data[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
                   0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
                   0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
                   0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00 };

    CK_BYTE_PTR encrypted;                            // Указатель на временный буфер для зашифрованных данных
    CK_ULONG encryptedSize;                           // Размер временного буфера в байтах

    CK_RV rv;
    int errorCode = 1;

    /*************************************************************************
    * Инициализировать операцию шифрования                                   *
    *************************************************************************/
    rv = functionList->C_EncryptInit(session, &gost28147EncDecMech, secretKey);
    CHECK_AND_LOG(" C_EncryptInit", rv == CKR_OK, rvToStr(rv), exit);

    /*************************************************************************
    * Зашифровать данные (при шифровании с использованием механизма          *
    * CKM_GOST28147_ECB размер данных должен быть кратен 8)                  *
    *************************************************************************/
    encryptedSize = sizeof(data);

    encrypted = (CK_BYTE_PTR)malloc(encryptedSize * sizeof(CK_BYTE));
    CHECK("  Memory allocation for encrypted data", encrypted != NULL_PTR, exit);

    rv = functionList->C_Encrypt(session, data, sizeof(data), encrypted, &encryptedSize);
    CHECK_AND_LOG(" C_Encrypt", rv == CKR_OK, rvToStr(rv), free_encrypted);

    /*************************************************************************
    * Распечатать буфер, содержащий зашифрованные данные                     *
    *************************************************************************/
    printf(" Encrypted buffer is:n");
    printHex(encrypted, encryptedSize);

    printf("Encryption has been completed successfully.n");

    errorCode = 0;
free_encrypted:
    free(encrypted);
exit:
    return errorCode;
}

В этом примере стоит обратить внимание на то, как передаётся вектор инициализации механизму шифрования. Стоит заметить, что после вызова функции C_Encrypt вызывать функцию C_EncryptFinal не нужно: для многих механизмов вызов C_Encrypt эквивалентен последовательному вызову функций C_EncryptUpdate и C_EncryptFinal.

Проверка поддержки механизмов

Ранее в примерах мы всегда надеялись на то, что токен поддерживает используемые механизмы, но, вообще говоря, — это может быть не так. Так, например, Рутокен Lite не поддерживает криптографические механизмы. Поэтому перед началом работы с каким-либо механизмом желательно убедиться в том, что он поддерживается устройством. Это можно сделать с помощью функции C_GetMechanismList, которая возвращает список поддерживаемых механизмов токена. Напишем удобную обертку для проверки поддержки определенного механизма:

int mech_supports(CK_SLOT_ID slot, CK_MECHANISM_TYPE mech, int* mechIsSupported)
{
    CK_MECHANISM_TYPE_PTR mechanisms;                 // Массив поддерживаемых механизмов
    CK_ULONG mechanismCount;                          // Количество поддерживаемых механизмов

    CK_RV rv;
    int errorCode = 1;

    /*************************************************************************
    * Получить список поддерживаемых токеном механизмов                      *
    *************************************************************************/
    rv = functionList->C_GetMechanismList(slot, NULL_PTR, &mechanismCount);
    CHECK_AND_LOG(" C_GetMechanismList (number of mechanisms)", rv == CKR_OK, rvToStr(rv), exit);

    CHECK_AND_LOG(" Checking mechanisms available", mechanismCount > 0, " No mechanisms available", exit);

    mechanisms = (CK_MECHANISM_TYPE_PTR)malloc(mechanismCount * sizeof(CK_MECHANISM_TYPE));
    CHECK(" Memory allocation for mechanisms", mechanisms != NULL_PTR, exit);

    rv = functionList->C_GetMechanismList(slot, mechanisms, &mechanismCount);
    CHECK_AND_LOG(" C_GetMechanismList", rv == CKR_OK, rvToStr(rv), free_mechanisms);

    /*************************************************************************
    * Определение поддерживаемых токеном механизмов                          *
    *************************************************************************/
    for (size_t i = 0; i < mechanismCount; ++i) {
        if (mechanisms[i] == mech) {
            *mechIsSupported = 1;
            break;
        }
    }

    errorCode = 0;
    if (*mechIsSupported)
        printf("Mechanism is supportedn");
    else
        printf("Mechanism is not supportedn");

free_mechanisms:
    free(mechanisms);
exit:
}

Эта обертка удобна для одноразовой проверки поддержки механизма. Если же мы хотим проверить поддержку сразу нескольких механизмов, то лучше получить список поддерживаемых механизмов токена один раз и проверить наличие требуемых механизмы. Это позволит сократить количество обращений к токену и время работы программы, соответственно.

Утилита pkcs11-tool

Часто бывает необходимо просто и быстро выполнить какое-либо обращение к PKCS#11-библиотеке, не прибегая к написанию кода. На помощь может прийти утилита pkcs11-tool, которая распространяется в составе пакета (opensc)[https://github.com/OpenSC/OpenSC].

Утилита pkcs11-tool может гибко выполнять огромное количество стандартных PKCS#11-операций. Например:

  • Генерация ключевых пар:
    pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-256:B --id 45 -l

  • Создание сырой подписи:
    pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --sign --id 45 -l -i file.txt --mechanism GOSTR3410-WITH-GOSTR3411-12-256

  • Генерация псевдослучайных последовательностей:
    pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --generate-random 16

  • Получение списка объектов на токене:
    pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O

  • Получение механизмов, поддерживаемых токеном:
    pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -M

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

Дополнительный материал

Если вы захотите узнать, как работать с более специфичными функциями, то большое количество примеров по работе с PKCS#11 можно найти в нашем SDK. Все примеры по работе с PKCS#11-библиотекой находятся в директории sdkpkcs11samples.

Выводы

Зачастую библиотека PKCS#11 является основным кирпичиком при написании приложений или других библиотек для работы со смарт-картами на других языках программирования. Поэтому знание основ работы с PKCS#11 на языке C может помочь разобраться с тем, как работать с обертками или как лучше реализовать архитектуру новой обертки.

Кроме PKCS#11 с объектами на смарт-картах/токенах можно работать через:

  • OpenSSL API (pkcs11 engine, rutoken engine);

  • C# для .NET Framework 4.5, .NET Standard 2.0, MonoAndroid 2.3, Xamarin.iOS 1.0 и Xamarin.Mac 2.0;

  • CryptoAPI;

  • Java c JDK 8 или новее через интерфейсы PKCS#11-wrapper и JCA;

  • C++ с использованием библиотеки pki-core;

  • JavaScript для большинства популярных браузеров с использованием Рутокен Плагин;

Если вы хотите узнать про какую-то реализацию подробнее, то напишите в комментариях и мы постараемся в ближайшее время выпустить новую статью с её разбором.

CKR_ARGUMENTS_BAD

Недопустимый аргумент

CKR_ATTRIBUTE_READ_ONLY

Невозможно установить или изменить значение атрибута приложением

CKR_ATTRIBUTE_SENSITIVE

Атрибут недоступен для чтения

CKR_ATTRIBUTE_TYPE_INVALID

Некорректный тип атрибута

CKR_ATTRIBUTE_VALUE_INVALID

Некорректное значение атрибута

CKR_BUFFER_TOO_SMALL

Размер заданного буфера является недостаточным для вывода результатов выполнения функции

CKR_CANT_LOCK

Библиотека не поддерживает блокировку для защиты потоков; возвращается только при  вызове функции C_Initialize

CKR_CRYPTOKI_ALREADY_INITIALIZED

Библиотека уже инициализирована (предыдущий вызов функции C_Initialize не был сопровожден  соответствующим вызовом функции  С_Finalize); возвращается только при  вызове функции C_Initialize

CKR_CRYPTOKI_NOT_INITIALIZED

Выполнение функции невозможно, так как библиотека не инициализирована; возвращается только при вызове любой функции, за исключением  C_Initialize и С_Finalize

CKR_DATA_INVALID

Некорректные входные данные для выполнения криптографической операции

CKR_DATA_LEN_RANGE

Входные данные имеют некорректный размер для выполнения криптографической операции

CKR_DEVICE_ERROR

Ошибка при обращении к токену или слоту

CKR_DEVICE_MEMORY

Недостаточно памяти токена для выполнения запрошенной функции

CKR_DEVICE_REMOVED

Токен был удален из слота во время выполнения функции

CKR_DOMAIN_PARAMS_INVALID

Функции переданы некорректные или не поддерживаемые параметры домена

CKR_ENCRYPTED_DATA_INVALID

Для операции расшифрования переданы некорректно зашифрованные данные

CKR_ENCRYPTED_DATA_LEN_RANGE

Для операции расшифрования переданы зашифрованные данные некорректного размера

CKR_FUNCTION_CANCELED

Выполнение функции было прервано

CKR_FUNCTION_FAILED

При выполнении функции возник сбой

CKR_FUNCTION_NOT_SUPPORTED

Запрашиваемая функция не поддерживается библиотекой

CKR_FUNCTION_REJECTED

Запрос на подпись был отклонен пользователем

CKR_GENERAL_ERROR

Критическая ошибка, связанная с аппаратным обеспечением

CKR_HOST_MEMORY

Недостаточно памяти для выполнения функции на рабочей станции, где установлена библиотека

CKR_KEY_FUNCTION_NOT_PERMITTED

Атрибуты ключа не позволяют выполнить операцию

CKR_KEY_HANDLE_INVALID

Функции передан некорректный идентификатор (хэндл) ключа

CKR_KEY_NOT_WRAPPABLE

Невозможно зашифровать ключ

CKR_KEY_SIZE_RANGE

Недопустимый размер ключа

CKR_KEY_TYPE_INCONSISTENT

Тип ключа не соответствует данному механизму

CKR_KEY_UNEXTRACTABLE

Невозможно зашифровать ключ, так как атрибут CKA_UNEXTRACTABLE установлен в значение CK_TRUE

CKR_MECHANISM_INVALID

Указан неправильный механизм для выполнения криптографической операции

CKR_MECHANISM_PARAM_INVALID

Указаны неправильные параметры механизма для выполнения криптографической операции

CKR_NEED_TO_CREATE_THREADS

Программа не поддерживает внутренних методов операционной системы для создания новых потоков

CKR_OBJECT_HANDLE_INVALID

Функции передан некорректный идентификатор (хэндл) объекта

CKR_OPERATION_ACTIVE

Выполнение операции невозможно, поскольку такая операция уже выполняется

CKR_OPERATION_NOT_INITIALIZED

Невозможно выполнить операцию в этой сессии

CKR_PIN_EXPIRED

Срок действия PIN-кода истек

CKR_PIN_INCORRECT

Функции передан PIN-код, который не соответствует тому, который сохранен на токене

CKR_PIN_INVALID

Значение PIN-кода содержит недопустимые символы

CKR_PIN_LEN_RANGE

Недопустимая длина PIN-кода

CKR_PIN_LOCKED

Авторизация по данному PIN-коду невозможна (превышен допустимый предел последовательного ввода неправильных значений PIN-кода)

CKR_RANDOM_NO_RNG

Данный токен не поддерживает генерацию случайных чисел

CKR_SESSION_CLOSED

Сессия была закрыта во время выполнения функции

CKR_SESSION_COUNT

Достигнуто предельное количество открытых сессий для данного токена

CKR_SESSION_EXISTS

Сессия с токеном уже открыта и поэтому токен не может быть инициализирован

CKR_SESSION_HANDLE_INVALID

Функции передан некорректный идентификатор (хэндл) сеанса

CKR_SESSION_PARALLEL_NOT_SUPPORTED

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

CKR_SESSION_READ_ONLY

Невозможно выполнить действие, поскольку это сессия R/O

CKR_SESSION_READ_WRITE_SO_EXISTS

Уже открыта сессия R/W, поэтому открыть сессию R/O невозможно

CKR_SIGNATURE_INVALID

Неверное значение ЭЦП

CKR_SIGNATURE_LEN_RANGE

Значение ЭЦП неверно по длине

CKR_SLOT_ID_INVALID

Слота с данным ID не существует

CKR_TEMPLATE_INCOMPLETE

Для создания объекта недостаточно атрибутов

CKR_TEMPLATE_INCONSISTENT

Заданные атрибуты противоречат друг другу

CKR_TOKEN_NOT_PRESENT

Токен отсутствует в слоте во время вызова функции

CKR_UNWRAPPING_KEY_HANDLE_INVALID

Функции передан некорректный идентификатор (хэндл) ключа дешифрования

CKR_UNWRAPPING_KEY_SIZE_RANGE

Недопустимый размер ключа дешифрования

CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT

Тип ключа дешифрования не соответствует данному механизму

CKR_USER_ALREADY_LOGGED_IN

Данный пользователь уже авторизован

CKR_USER_ANOTHER_ALREADY_LOGGED_IN

Другой пользователь уже авторизован

CKR_USER_NOT_LOGGED_IN

Соответствующий пользователь не авторизован

CKR_USER_PIN_NOT_INITIALIZED

Не инициализирован PIN-код пользователя

CKR_USER_TOO_MANY_TYPES

Невозможно выполнить авторизацию Администратора и Пользователя одновременно

CKR_USER_TYPE_INVALID

Задан некорректный тип пользователя

CKR_WRAPPED_KEY_INVALID

Задан некорректный зашифрованный ключ

CKR_WRAPPED_KEY_LEN_RANGE

Задана некорректная длина зашифрованного ключа

CKR_WRAPPING_KEY_HANDLE_INVALID

Функции передан некорректный идентификатор (хэндл) ключа шифрования

CKR_WRAPPING_KEY_SIZE_RANGE

Недопустимый размер ключа шифрования

CKR_WRAPPING_KEY_TYPE_INCONSISTENT

Тип ключа шифрования не соответствует данному механизму

Исправление типичных ошибок при генерации RSA ключа ЕГАИС

При генерации RSA ключа в личном кабинете ЕГАИС могут возникать ошибки.

Попробуем разобрать типовые ошибки, которые возникают при генерации для ЕГАИС.

Почему возникает ошибка при генерации ключа ЕГАИС?

Ошибка при генерации транспортного ключа для ЕГАИС иногда возникает из-за неполадок на сайте ЕГАИС. Но это происходит крайне редко.

В основном неполадки связаны с некорректными настройками компьютера.

Общие рекомендации для успешной генерации транспортного RSA ключа ЕГАИС

Необходимые требования и рекомендации:

  • Для корректной работы в личном кабинете рекомендуется отключить все защитники и антивирусные программы на компьютере
  • Операционная система должна быть MS Windows и свежее чем XP (подойдет Vista/7/8/8/1/10, серверные ОС тоже поддерживаются, начиная с 2008). Крайне желательно наличие установленных актуальных обновлений.
  • Браузер Internet Explorer версии не ниже, чем 9.
  • Установлена актуальная версия крипто плагина ФСРАР Крипто (версия не ниже чем 2.00). 
  • Установлены и настроены драйвера носителя для ЕГАИС.
  • Во время работы в личном кабинете и при работе УТМ ЕГАИС должен быть вставлен только один ключ для ЕГАИС.

Ошибка при генерации RSA ключа «Выберете устройство чтения смарт карт…»

Если при генерации вместо окна запроса пин-кода Вы увидели окно «Выберете устройство чтения смарт карт» или «Обнаружена смарт-карта, но она не может использоваться для текущей операции…» или «Смарт-карта не может выполнить запрошенную операцию либо операция требует другой смарт-карты», значит нужно скорректировать настройки компьютера.

Генерация RSA ключа

Данная ошибка возникает в результате некорректных настроек на ПК, запрещающие формировать ключ.

Если Вы используете носитель Рутокен ЭЦП 0, то вам необходимо выполнить следующие операции:

Выберите пункт Панель управления Рутокен (можно запустить через ярлык на рабочем столе, меню Пуск — Программы (или Все программы) — Рутокен — Панель управления Рутокен).

Перейдите на вкладку «Настройки» и выберите пункт «Настройка…»

Генерация RSA ключа

Установите напротив строки Рутокен ЭЦП значение Microsoft Base Smart Card Crypto Provider.

Генерация RSA ключа

Если не получилось — сделайте перенастройку еще раз. Выберете другой криптопровайдер, нажмите ОК, и снова выберете Microsoft Base Smart Card Crypto Provider.

Если опять не получилось — обновите драйвер для Рутокен ЭЦП. Скачать драйвер можно с сайта разработчика. После обновления проверьте настройки криптопровайдера и пробуйте еще раз.

В крайне редких случаях, если генерация не проходит, помогает утилита восстановления работоспособности Рутокен (позволяет правильно определить драйвера носителя в системе).
 

Ошибка в методе createCertificateRequest Error: CKR_PNI_INCORRECT

В данной ошибке указано, что неверно введен пин-код. 

Генерация RSA ключа

Проверьте правильность ввода пин-кодов, если на вашем носителе они установлены по умолчанию. Напоминаем стандартные пин коды:

  • для JaCrata пин RSA — 11111111, пин ГОСТ — 0987654321
  • для Рутокен пин RSA — 12345678, пин ГОСТ — 12345678

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

Ошибка в методе createCertificateRequest Error: CKR_ATTRIBUTE_TYPE_INVALID

Данная ситуаци была нами зафиксирована при использовании ключа JaCarta SE.

Генерация RSA ключа

Для исправления необходимо инициализировать раздел PKI на носителе. Для этого откройте Единый клиент JaCarta желательно включить интерфейс Администратора (снизу слева кнопка «Переключиться в режим администрирования»).

Перейдите вверху во вкладку PKI и нажмите «Инициализировать». При запросе кода введите пин-код Администратора 00000000, пин-код Пользователя 11111111. После успешной инициализации попробуйте снова сгенерировать транспортный ключ.


Offline

Skydancer

 


#1
Оставлено
:

20 февраля 2023 г. 0:03:45(UTC)

Skydancer

Статус: Новичок

Группы: Участники

Зарегистрирован: 19.02.2023(UTC)
Сообщений: 7
Российская Федерация
Откуда: Домодедово

Mac OS и яндекс.браузер. Имеется работающий рутокен. Установлен КриптоПро 5.0.12500. При попытке входа по ЭП на сайт налоговой, там предлагается пройти проверку. На последнем шаге «Проверка защищённого соединения с сервером Личного кабинета индивидуального предпринимателя» выходит окно от криптопро с сообщением «Insert carrier rutoken_lt_3f565dab to open container SCARDrutoken_lt_3f565dabA00EDBD». Проверка заканчивается ошибкой. Что с этим делать?


Вверх


Offline

Александр Лавник

 


#2
Оставлено
:

20 февраля 2023 г. 9:18:35(UTC)

Александр Лавник

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 30.06.2016(UTC)
Сообщений: 3,311
Мужчина
Российская Федерация

Сказал «Спасибо»: 53 раз
Поблагодарили: 749 раз в 697 постах

Автор: Skydancer Перейти к цитате

Mac OS и яндекс.браузер. Имеется работающий рутокен. Установлен КриптоПро 5.0.12500. При попытке входа по ЭП на сайт налоговой, там предлагается пройти проверку. На последнем шаге «Проверка защищённого соединения с сервером Личного кабинета индивидуального предпринимателя» выходит окно от криптопро с сообщением «Insert carrier rutoken_lt_3f565dab to open container SCARDrutoken_lt_3f565dabA00EDBD». Проверка заканчивается ошибкой. Что с этим делать?

https://support.cryptopr…dgebase/Article/View/391

Техническую поддержку оказываем тут
Наша база знаний


Вверх


Offline

Skydancer

 


#3
Оставлено
:

3 марта 2023 г. 23:23:52(UTC)

Skydancer

Статус: Новичок

Группы: Участники

Зарегистрирован: 19.02.2023(UTC)
Сообщений: 7
Российская Федерация
Откуда: Домодедово

Автор: Александр Лавник Перейти к цитате

Автор: Skydancer Перейти к цитате

Mac OS и яндекс.браузер. Имеется работающий рутокен. Установлен КриптоПро 5.0.12500. При попытке входа по ЭП на сайт налоговой, там предлагается пройти проверку. На последнем шаге «Проверка защищённого соединения с сервером Личного кабинета индивидуального предпринимателя» выходит окно от криптопро с сообщением «Insert carrier rutoken_lt_3f565dab to open container SCARDrutoken_lt_3f565dabA00EDBD». Проверка заканчивается ошибкой. Что с этим делать?

https://support.cryptopr…dgebase/Article/View/391

Здравствуйте, спасибо. Проверил правильность настройки на тестовой странице плагина — подпись сформирована успешно. Попробовал зайти, запустив яндекс.браузер из терминала — проблема та же. На последнем шаге получаю ту же ошибку


Вверх


Offline

nickm

 


#4
Оставлено
:

4 марта 2023 г. 0:01:20(UTC)

nickm

Статус: Активный участник

Группы: Участники

Зарегистрирован: 31.05.2016(UTC)
Сообщений: 1,098

Сказал(а) «Спасибо»: 319 раз
Поблагодарили: 171 раз в 158 постах

А Вы в какой ЛК осуществляете вход?

ИП, ФЛ, ЮЛ?


Вверх


Offline

Skydancer

 


#5
Оставлено
:

5 марта 2023 г. 12:42:20(UTC)

Skydancer

Статус: Новичок

Группы: Участники

Зарегистрирован: 19.02.2023(UTC)
Сообщений: 7
Российская Федерация
Откуда: Домодедово

Автор: nickm Перейти к цитате

А Вы в какой ЛК осуществляете вход?

ИП, ФЛ, ЮЛ?

ИП


Вверх


Offline

sep-spb

 


#6
Оставлено
:

6 марта 2023 г. 20:44:12(UTC)

sep-spb

Статус: Новичок

Группы: Участники

Зарегистрирован: 06.03.2023(UTC)
Сообщений: 1
Российская Федерация

Та же проблема:
ИП, вхожу через «Ключ ЭП» на сайте налоговой
Рутокен лайт
Yandex 23.1.2.978 (64-bit)
Mac OS Monterey 12.3.1(intel)
КриптоПро CSP 5.0.12600
Версия плагина: 2.0.14660
На последнем пункте проверки выдает: «Insert carrier rutoken_lt_415169d2 to open container SCARDrutoken_lt_415169d2A0055C1» и две кнопки UPDATE или CANCEL
UPDATE возвращает на эту же ошибку.

Перепрбывал уже все: яндекс через командную строку запускал, работу плагина проверял, в тех. поддержку госуслуг писал, драйвера устанавливал, переустанавливал Криптопро, кеш чистил, добавлял сайты куда-то там, я уже не знаю что делать, скоро отчеты сдавать, ничо не работает, часов шесть потратил в общей сложности на настройку этого *** а воз и ныне там.
Какие варианты еще есть? Как заставить это работать? Думал я один такой, но нет, не один.
По этим ссылкам уже ходил:
https://support.cryptopr…dgebase/Article/View/391
https://support.cryptopr…dgebase/Article/View/232

Snimok ehkrana 2023-03-06 v 20.28.03.png (123kb) загружен 1 раз(а).

Кстати, это может быть из-за демонстрационной лицензии КриптоПро?
Еще мысль: возможно неправильно установлены сертификаты, потому как пункт в налоговой:

Цитата:

Цепочку КСКПЭП, начиная от КСКПЭП УЦ, непосредственно выдавшего юридическому лицу его КСКПЭП, и до корневого КСКПЭП, последнего в цепочке сертификатов, установить в соответствующие хранилища: Самоподписанный (поле Кому выдан совпадает с полем Кем выдан) квалифицированный сертификат ключа проверки электронной подписи (КСКПЭП) удостоверяющего центра, — в хранилище сертификатов Доверенные корневые центры; Остальные сертификаты цепочки — в хранилище сертификатов Промежуточные центры сертификации;

совершенно не понятен и как это сделать на MAC OS. Там же есть подробнейшая инструкция по Windows и в ней ни слова по MAC OS.
Можно конечно через Parallels попробовать, но это уж такие костыли.

Отредактировано пользователем 6 марта 2023 г. 23:27:54(UTC)
 | Причина: Не указана


Вверх


Offline

Skydancer

 


#7
Оставлено
:

20 апреля 2023 г. 16:39:27(UTC)

Skydancer

Статус: Новичок

Группы: Участники

Зарегистрирован: 19.02.2023(UTC)
Сообщений: 7
Российская Федерация
Откуда: Домодедово

Проблема нерешаема?


Вверх


Offline

Александр Лавник

 


#8
Оставлено
:

20 апреля 2023 г. 16:45:53(UTC)

Александр Лавник

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 30.06.2016(UTC)
Сообщений: 3,311
Мужчина
Российская Федерация

Сказал «Спасибо»: 53 раз
Поблагодарили: 749 раз в 697 постах

Автор: Skydancer Перейти к цитате

Проблема нерешаема?

Попробуйте использовать Chromium-Gost вместо Яндекс.Браузера.

Техническую поддержку оказываем тут
Наша база знаний


Вверх


Offline

Chernoslav

 


#9
Оставлено
:

27 апреля 2023 г. 10:38:53(UTC)

Chernoslav

Статус: Новичок

Группы: Участники

Зарегистрирован: 27.04.2023(UTC)
Сообщений: 3
Российская Федерация

Сказал(а) «Спасибо»: 1 раз

У меня макось 13.2.1 (MacBook Pro 16″ 2019)

1) Я купил себе токен ESMART.
2) Купил лицензию и установил CryptoPro CSP 5.0.12000
3) Установил плагин версии 2.0.14660
4) Установил ESMART PKI Client 4.12 для MacOS (x86/x64) (https://token.esmart.ru/downloads)
5) Установил корневые сертификаты в CSP (https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/407/0/oshibk-ne-udetsja-postroit-cepochku-sertifiktov-dlja-doverennogo-kornevogo-centr-0x800b010a)

6) Запускаю Yandex Browser (https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/391/0/vkhod-s-pomoshhju-ehlektronnojj-podpisi-v-lichnyjj-kbinet-jul-ili-ip-n-portle-fns-n-macos)

7) Проверяю работоспособность https://cryptopro.ru/sit…ge/cades_bes_sample.html
В поле «Выберите сертификат» пусто, обращения к токену не происходит.

8) Проверка на сайте ФНС https://lkip2.nalog.ru/l…certificate/requirements ломается на шаге «В хранилище сертификатов Личные установлен КСКПЭП»

9) В комплекте ESMART PKI Client есть утилиты, в частности PKIClientCli. С её помощью я экспортировал сертификат с токена
PKIClientCli exportcert —id ${id} > cert.crt, установил его в CrytoPro CSP tools

10) Проверяю работоспособность https://cryptopro.ru/sit…ge/cades_bes_sample.html
В поле «Выберите сертификат» уже не пусто, но обращения к токену не происходит, а подписать текст не получается, отображается статус: Нет привязки к закрытому ключу
Ошибка: Не удалось создать подпись из-за ошибки: Cannot find the certificate and private key for decryption. (0x8009200B)

И вот что я делаю не так? )

Криптопрошное приложение cptools показывет, что токен оно видит, я даже могу пинкод поменять. Приложение видит какие-то сертификаты, установленне на шагах 5 и 9. Но не видит контейнеры.

Отредактировано пользователем 27 апреля 2023 г. 12:00:22(UTC)
 | Причина: Не указана


Вверх


Offline

Александр Лавник

 


#10
Оставлено
:

27 апреля 2023 г. 10:41:59(UTC)

Александр Лавник

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 30.06.2016(UTC)
Сообщений: 3,311
Мужчина
Российская Федерация

Сказал «Спасибо»: 53 раз
Поблагодарили: 749 раз в 697 постах

Автор: Chernoslav Перейти к цитате

У меня макось

1) Я купил себе токен ESMART.
2) Купил лицензию и установил CryptoPro CSP 5.0.12000
3) Установил плагин версии 2.0.14660
4) Установил ESMART PKI Client 4.12 для MacOS (x86/x64) (https://token.esmart.ru/downloads)
5) Установил корневые сертификаты в CSP (https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/407/0/oshibk-ne-udetsja-postroit-cepochku-sertifiktov-dlja-doverennogo-kornevogo-centr-0x800b010a)

6) Запускаю Yandex Browser (https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/391/0/vkhod-s-pomoshhju-ehlektronnojj-podpisi-v-lichnyjj-kbinet-jul-ili-ip-n-portle-fns-n-macos)

7) Проверяю работоспособность https://cryptopro.ru/sit…ge/cades_bes_sample.html
В поле «Выберите сертификат» пусто, обращения к токену не происходит.

8) Проверка на сайте ФНС https://lkip2.nalog.ru/l…certificate/requirements ломается на шаге «В хранилище сертификатов Личные установлен КСКПЭП»

9) В комплекте ESMART PKI Client есть утилиты, в частности PKIClientCli. С её помощью я экспортировал сертификат с токена
PKIClientCli exportcert —id ${id} > cert.crt, установил его в CrytoPro CSP tools

10) Проверяю работоспособность https://cryptopro.ru/sit…ge/cades_bes_sample.html
В поле «Выберите сертификат» уже не пусто, но обращения к токену не происходит, а подписать текст не получается, отображается статус: Нет привязки к закрытому ключу
Ошибка: Не удалось создать подпись из-за ошибки: Cannot find the certificate and private key for decryption. (0x8009200B)

И вот что я делаю не так? )

Криптопрошное приложение cptools показывет, что токен оно видит, я даже могу пинкод поменять. Приложение видит какие-то сертификаты, установленне на шагах 5 и 9. Но не видит контейнеры.

На вашем maс процессор Intel или Apple M1/M2?

Техническую поддержку оказываем тут
Наша база знаний


Вверх

Пользователи, просматривающие эту тему

Guest

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

Содержание

  1. Ошибки Рутокен
  2. Ошибка: Сертификат ненадежен/Не удалось проверить статус отзыва
  3. Ошибка: Rutoken перестает определяться (Windows 10)
  4. Ошибка: Панель управления не видит Рутокен ЭЦП 2.0
  5. Почему компьютер не видит носитель рутокен
  6. Первичная диагностика неисправности Рутокен
  7. 1. Повреждение/разлом корпуса или USB-разъема Рутокена
  8. 3. Рутокен со следами оплавления и/или почернения корпуса изнутри носителя, отпаявшаяся микросхема или вспученная поверхность микросхемы
  9. 1. Рутокен не определяется в «Панели управления Рутокен»
  10. 2. Рутокен определяется панелью управления, кнопка «Ввести PIN-код…» активна, но авторизация с PIN-кодом пользователя/администратора выполняется с ошибкой. Дальнейшие действия зависят от формулировки возникающей ошибки:
  11. 2.1 Ошибка “Не удалось получить всю информацию о токене Код ошибки: 0x6a82 Описание ошибки: Файл/ RSF не найден”
  12. 2.2 Ошибка “Не удалось получить всю информацию о токене код ошибки: 0х6400 Описание ошибки: Состояние памяти Rutoken не изменилось”
  13. 2.3 Ошибка “Не удалось получить всю информацию о токене Код ошибки 0xF003 Описание ошибки Неверное значение”
  14. 2.4 Ошибка «Обнаружено повреждение системной области памяти (ошибка CRC)» код ошибки 0x6F20
  15. 2.5 Референсные данные не найдены
  16. 2.6 «PIN-код заблокирован»
  17. 1. Проверка целостности контейнера с сертификатом “КриптоПро CSP” или “VipNet CSP”
  18. 2. Проверка целостности сертификата с неизвлекаемыми ключами
  19. Почему компьютер не видит носитель рутокен
  20. Почему компьютер не видит рутокен
  21. Установка драйвера для Windows Vista Windows Seven
  22. Установка драйвера для Windows XP
  23. Подготовка
  24. Установка драйверов и модулей ruToken
  25. Настройка считывателя в КриптоПро
  26. Установка сертификатов
  27. Почему не виден сертификат ЭЦП на носителе
  28. Причина 1: драйвер не установлен или устройство отображается в диспетчере устройств с восклицательным знаком
  29. Причина 2: долгое опознание носителя на Windows 7
  30. Причина 3: USB-порт работает некорректно
  31. Причина 4: носитель неисправен
  32. Почему выходит ошибка при создании подписи
  33. Устранение ошибки ненайденного элемента ЭЦП
  34. Устранение ошибки с построением цепочки сертификатов

Ошибки Рутокен

Из нашей статьи вы узнаете:

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

Ошибка: Сертификат ненадежен/Не удалось проверить статус отзыва

Ошибку можно заметить на вкладке «Сертификаты» непосредственно в панели управления Рутокен. Проблема возникает во время установки ЭЦП и связана с неполной настройкой. Речь про отсутствие специального корневого доверенного сертификата, который выдает удостоверяющий центр.

Первым шагом к устранению ошибки остается обновление комплекта драйверов. Если проблема не исчезла или последние у вас имеют актуальную версию, выполните действия по следующему алгоритму:

Если в открывшемся дереве вы видите лишь ваш личный сертификат, то надо установить еще один, который был выдан в удостоверяющем центре, и сделать доверенным.

Ошибка: Rutoken перестает определяться (Windows 10)

Потенциально могут возникать периодические ошибки из-за недоступности сертификатов, невозможности запустить панель управления. Одновременно светодиод на токене горит, а сам Рутокен имеется в Диспетчере устройств. Подобная ситуация может быть связана со спецификой работы материнской платы компьютера, когда при переходе из энергосберегающего режима в штатный не происходит «пробуждения» токена. Выходом здесь станет его отключение либо повторное подключение Рутокена (для этого достаточно достать USB-токен из разъема и подключить опять).

В случае если ошибка не исчезла, обратитесь за консультацией в удостоверяющий центр, где вы оформили ЭЦП и приобрели Рутокен.

Ошибка: Панель управления не видит Рутокен ЭЦП 2.0

Для решения проблемы выполните следующие действия:

Если ничего не помогло и ошибка осталась, обращайтесь в удостоверяющий центр «Астрал». Мы предлагаем услуги по генерации ЭЦП любых типов на выгодных условиях, а также комплексное техническое сопровождение. Для решения проблем мы готовы проконсультировать по телефону либо найти выход с помощью удаленного подключения к вашему компьютеру. Получить дополнительную информацию можно по телефону либо оставив заявку на сайте. Мы оперативно ответим и предоставим консультацию.

Источник

Почему компьютер не видит носитель рутокен

Рутокен при подключении к компьютеру не отображается в Панели управления Рутокен, кнопка «Ввести PIN-код» неактивна.

image2018 5 8 14 29 34

Если используется Подключение к удаленному рабочему столу, подробную информацию можно прочитать в этой статье.

Определите модель Рутокен по маркировке на самом ключе, воспользовавшись этой инструкцией.

Возможно, не хватает питания для Рутокена. Попробуйте подключить Рутокен в другой USB-порт.

Если используется удлинитель, подключите Рутокен напрямую.

Проверьте работают ли флешки, другие токены или смарт-карты.

Модель Рутокен S должна отображаться в разделе Контроллеры USB.

image2018 5 8 14 53 13

Модели Рутокен ЭЦП 2.0, Рутокен Lite должны отображаться в разделе Устройства чтения смарт-карт.

*Иногда могут отображаться как «USB Smart Card reader», «Rutoken ECP» или «Rutoken Lite»

image2018 5 8 14 52 26

Откройте Панель управления Рутокен и перейдите на вкладку Настройки.

Проверьте значение в раскрывающемся списке Количество считывателей Рутокен S. Если установлен «0», то увеличьте это значение до 1 и примените изменения

image2018 5 8 14 56 13

Если на другом компьютере Рутокен так же не определяется, скорее всего, он вышел из строя. Обратитесь в компанию, где приобретался Рутокен для его замены.

Источник

Первичная диагностика неисправности Рутокен

В соответствии с правилами эксплуатации и хранения электронных идентификаторов Рутокен, пользователь имеет право бесплатно заменить неисправный носитель Рутокен в течение срока гарантийного обслуживания, если, в ходе проведения экспертизы, случай будет признан гарантийным.

Отправка токена на экспертизу производится через ту компанию, с которой у компании «Актив» имеются договорные отношения.

Таким образом, если вы приобретали Рутокен у одного из наших партнеров, вам нужно передать Рутокен партнеру. Если договор между вашей организацией и компанией «Актив» напрямую не заключался, и вы направите Рутокен нам, мы не сможем принять его на экспертизу.

Узнать срок гарантии на устройство Рутокен можно в той компании, в которой он приобретался.

В случае обнаружения пользователем неисправности Рутокена, советуем провести первичную диагностику носителя, прежде чем обратиться в компанию, где приобретался носитель Рутокен.

Самые частые ошибки мы собрали в этой статье.

Первичная диагностика состоит из 3 этапов:

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

Можно выделить следующие виды механических повреждений:

1. Повреждение/разлом корпуса или USB-разъема Рутокена

image2020 4 17 15 35 9 image2020 4 17 15 34 16

image2020 4 17 15 32 7

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

image2020 4 17 16 55 37 image2020 4 17 16 56 4

Рутокен со следами оплавления и/или почернения можно направить на дополнительную экспертизу. Если в ходе экспертизы будет выявлено умышленное повреждение или превышение допустимого напряжения, подаваемого в USB-порт, гарантийная замена Рутокена на новый произведена не будет.

Если при визуальном осмотре Рутокена никаких видимых повреждений не выявлено, необходимо проверить Рутокен на компьютере.

Подключите Рутокен к компьютеру и запустите «Панель управления Рутокен».

Запуск панели управления Рутокен выполняется через меню Пуск / Панель управления / Панель управления Рутокен.

image2020 4 17 17 4 50

Если Рутокен определяется в «Панели управления Рутокен», активна кнопка «Ввести PIN-код…»

Нажмите на кнопку «Информация» на вкладке «Администрирование». Ошибок возникать не должно.

Попробуйте авторизоваться с PIN-кодом пользователя и/или администратора.

Если при нажатии на кнопку «Информация» ошибок не возникает, а авторизация выполняется успешно, следует перейти к третьему этапу диагностики носителя Рутокен

(Рутокен работает корректно, необходимо проверить целостность ключевой информации на Рутокене).

После подключения Рутокена к компьютеру возможны следующие ошибки в Панели управления Рутокен:

1. Рутокен не определяется в «Панели управления Рутокен»

image2020 4 17 17 5 41

Рутокен не определяется в «Панели управления Рутокен» (список «Подключенные Рутокен» пустой) и, как следствие, неактивны кнопки «Ввести PIN-код…» и «Информация…». В данном случае необходимо воспользоваться инструкцией.

2. Рутокен определяется панелью управления, кнопка «Ввести PIN-код…» активна, но авторизация с PIN-кодом пользователя/администратора выполняется с ошибкой. Дальнейшие действия зависят от формулировки возникающей ошибки:

2.1 Ошибка “Не удалось получить всю информацию о токене Код ошибки: 0x6a82 Описание ошибки: Файл/ RSF не найден”

Oshibka

Подключите Рутокен к другому USB порту. Повторите попытку ввода PIN-кода. По возможности, установите Драйверы Рутокен на другой компьютер, подключите токен и попробуйте ввести PIN-код.

Если и на другом компьютере ошибка повторяется, значит возникло нарушение файловой системы Рутокен. Его можно отформатировать и записать ключи заново.

2.2 Ошибка “Не удалось получить всю информацию о токене код ошибки: 0х6400 Описание ошибки: Состояние памяти Rutoken не изменилось”

6400

Подключите Рутокен к другому USB порту. Повторите попытку ввести PIN-код. По возможности, установите Драйверы Рутокен на другой компьютер, подключите токен и попробуйте ввести PIN-код.

Если и на другом компьютере ошибка повторяется, значит возникло нарушение файловой системы Рутокен. Его можно отформатировать и записать ключи заново.

2.3 Ошибка “Не удалось получить всю информацию о токене Код ошибки 0xF003 Описание ошибки Неверное значение”

F003

Подключите Рутокен к другому USB порту. Повторите попытку ввести PIN-код. По возможности, установите Драйверы Рутокен на другой компьютер, подключите токен и попробуйте ввести PIN-код.

Если и на другом компьютере ошибка повторяется, значит возникло нарушение файловой системы Рутокен. Его можно отформатировать и записать ключи заново.

2.4 Ошибка «Обнаружено повреждение системной области памяти (ошибка CRC)» код ошибки 0x6F20

image2020 4 17 17 8 59

Ошибка означает, что память на носителя Рутокен была повреждена. Форматирование Рутокена не поможет. Рутокен необходимо передать в ту компанию, в которой приобретался данный носитель для отправки на экспертизу в компанию Актив.

2.5 Референсные данные не найдены

image001

Подключите Рутокен к другому USB порту. Повторите попытку ввести PIN-код. По возможности, установите Драйверы Рутокен на другой компьютер, подключите токен и попробуйте ввести PIN-код.

Если и на другом компьютере ошибка повторяется, значит возникло нарушение файловой системы Рутокен. Его можно отформатировать и записать ключи заново.

Более подробная информация об ошибке есть в статье нашей Базы Знаний.

2.6 «PIN-код заблокирован»

image2020 4 17 17 9 17

Ошибка «PIN-код заблокирован» означает, что Рутокен был заблокирован в результате превышения количества попыток ввода PIN-кода.

Если заблокирован PIN-код пользователя, воспользуйтесь инструкцией.

Если заблокирован PIN-код Администратора, воспользуйтесь инструкцией.

На третьем этапе проверяется целостность ключевой информации, которая содержится на Рутокене.

Определите модель Рутокена по инструкции.

Если используется носитель из семейства Рутокен ЭЦП, проверьте формат ключей по инструкции.

1. Проверка целостности контейнера с сертификатом “КриптоПро CSP” или “VipNet CSP”

Выполнить такую проверку можно через программу криптопровайдера, с помощью которой была сгенерирована электронная подпись пользователя, например программа «КриптоПро CSP» или «VipNet CSP»

Тестирование целостности контейнера через «КриптоПро CSP» необходимо проводить по инструкции.

Тестирование целостности контейнера через «VipNet CSP» необходимо проводить по инструкции.

Если операция по проверке ключевого контейнера выполняется без ошибок, значит ключевая информация на носителе Рутокен не повреждена.

2. Проверка целостности сертификата с неизвлекаемыми ключами

Тестирование носителей Рутокен ЭЦП 2.0 с записанными на него неизвлекаемыми ключами ЭП (PKCS#11) пользователями самостоятельно не производится. Удаленная диагностика выполняется сотрудниками технической поддержки компании Актив.

Источник

Почему компьютер не видит носитель рутокен

После прохождения проверки условий подключения по сертификату ключа проверки ЭЦП и выбора сертификата в личном кабинете юридического лица на сайте nalog.ru через Yandex браузер возникает одно из двух сообщений:

«Не удается обнаружить токен или смарт-карту. Подключите Рутокен в любой USB-порт компьютера или к картридеру» или «На Рутокене нет сертификатов. Для доступа к сайту запишите на Рутокен сертификат«.

image2019 9 5 16 7 19 image2019 9 5 16 8 6

Эти ошибки возникают в приложении Рутокен Коннект, установленном на компьютер, если не выполняются условия для успешного входа или выбран неверный вариант входа.

Необходимо определить нужно ли расширение Рутокен Коннект и какой вариант входа нужно использовать.

Расширение Рутокен Коннект должно использоваться для входа на сайт nalog.ru только если используется модель Рутокен ЭЦП 2.0 с записанным на него сертификатом формата PKCS#11 (как для ЕГАИС).

Проверка условий подключения должна завершиться успешно.

2. Если используется другая модель Рутокен и/или на Рутокене содержится сертификат формата «КриптоПро CSP», то выбран правильный вариант:

нужно выполнить одно из трех действий:

a) Удалите адрес lkul.nalog.ru:443 из настроек Рутокен Коннект

image2019 9 5 17 32 40

image2019 9 5 17 37 4

b) Или удалите Адаптер Рутокен Коннект

image2019 9 5 17 41 56

с) Или удалите приложение Рутокен Коннект

image2019 9 5 18 2 17

После выполнения одного из трех действий повторите Проверку условий подключения по сертификату ЭЦП.

Источник

Почему компьютер не видит рутокен

1. Возможно, на токене перегорел светодиод (лампочка). Для проверки следует:

5469

2. Подключить Rutoken к другому USB-порту.

3. Запустить / перезапустить службу «Смарт-карта». Для этого:

4. Переустановить драйвер Rutoken, предварительно отключив носитель от компьютера.
Для этого открыть меню «Пуск» > «Панель управления» > «Установка и удаление программ» (для ОС Windows Vista Windows Seven меню «Пуск» > «Панель управления» > «Программы и компоненты»). В списке найти пункт «Rutoken Drivers» и выбрать «Удалить». После удаления необходимо перезагрузить компьютер и установить драйвер Rutoken заново.

5. В случае, если переустановка драйвера не помогла решить ошибку, необходимо установить драйвер с помощью меню «Диспетчер устройств». Порядок установки зависит от используемой операционной системы. Ниже приведены настройки для:

Установка драйвера для Windows Vista Windows Seven

1. Кликнуть по значку «Мой компьютер» правой кнопкой мыши и выбрать элемент «Свойства».

2. В открывшемся меню выбрать «Диспетчер устройств».

picture 1502

3. В открывшемся окне проверить, нет ли в списке элемента «Другие устройства», обозначенного желтым значком.

picture 826

4. Необходимо выделить строку «ruToken» и выбрать «Обновить драйверы».

picture 827

5. Далее выбрать «Выполнить поиск драйверов на этом компьютере».

picture 828

6. Нажать на кнопку «Обзор», указать каталог C:WindowsSystem32Aktiv Co и нажать на кнопку «Далее». Указанный каталог может быть скрытым. В таком случае необходимо выбрать меню «Сервис» > «Параметры папок» > «Вид», установить переключатель «Показывать скрытые файлы, папки и диски» и повторить выбор каталога.

picture 829

7. Дождаться окончания установки и нажать на кнопку «Закрыть».

picture 830

8. После установки драйвера устройство будет отображаться в разделе «Контроллеры USB». На токене также должен загореться диод.

picture 831

Установка драйвера для Windows XP

1. Кликнуть по значку «Мой компьютер» правой кнопкой мыши и выбрать элемент «Свойства».

2. В окне «Свойства системы» перейти на вкладку «Оборудование» и нажать на кнопку «Диспетчер устройств».

picture 832

3. В открывшемся окне проверить, нет ли в списке элемента «ruToken» (либо «Неизвестное устройство»), обозначенного желтым значком. Необходимо кликнуть по нему правой кнопкой мыши и выбрать «Обновить драйвер».

picture 833

4. В окне «Мастер обновления оборудования» установить переключатель «Установка из указанного места».

picture 834

5. В открывшемся окне нажать на кнопку «Обзор», указать путь к каталогу C:Windowssystem32Aktiv Co
t USB и нажать на кнопку «Далее». Указанный каталог может быть скрытым. В таком случае необходимо выбрать меню «Сервис» > «Параметры папок» > «Вид», установить переключатель «Показывать скрытые файлы, папки и диски» и повторить выбор каталога

picture 835

6. Дождаться окончания установки и нажать на кнопку «Готово».

picture 836

7. По завершении установки драйвера устройство будет отображаться в разделе «Контроллеры универсальной последовательной шины USB». На токене также должен загореться диод.

picture 837

6. В случае если выполнение инструкций не помогло исправить ошибку, токен, скорее всего, неисправен. Чтобы в этом убедиться, следует присоединить Rutoken к компьютеру, на котором никогда не устанавливался драйвер. Если носитель работает корректно, то должен запуститься «Мастер установки нового оборудования». Если при присоединении рутокена ничего не происходит, то носитель, вероятнее всего, неисправен, и его необходимо сменить.

Если сохранилась копия сертификата, следует использовать ее для работы в системе Контур.Экстерн, предварительно установив сертификат. Если копий не сохранилось, необходимо обратиться в сервисный центр для незапланированной замены ключа.

%D0%9C%D0%B0%D1%80%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0 %D0%BE%D0%B1%D1%89 206%D1%8577 11.18

%D0%91%D0%B0%D0%BD%D0%BD%D0%B5%D1%80 216%D1%8590 11.10.17

vk 180

Подготовка

Установка драйверов и модулей ruToken

Для установки драйверов необходимо:

Настройка считывателя в КриптоПро

Откроется окно со списком установленных считывателей. Если в списке нет считывателя Все считыватели смарт-карт, нажмите кнопку «Добавить»

Если кнопка «Добавить» не активна, то нужно перейти на вкладку «Общие» и нажать на ссылку «Запустить с правами администратора».
RU 3.6 2.0

Для продолжения установки считывателя нажмите кнопку «Далее»

В следующем окне выберите считыватель Все считыватели смарт-карт и нажмите кнопку «Далее»
RU 3.6 3.0

Для продолжения установки нажмите кнопку «Далее»
RU 3.6 4.0

Установка сертификатов

Для того, чтобы система стала запрашивать ruToken при входе, с него нужно установить сертификат. Чтобы узнать, как это сделать, перейдите по данной ссылке (нажмите здесь чтобы перейти).

Иногда при работе с электронной цифровой подписью (ЭЦП) выходит ошибка о том, что ПК не видит сертификат подписи на носителе или о том, что при создании подписи была допущена ошибка. Причина может быть в неустановленном или переставшем работать драйвере, в неисправности токена или в неисправности программной части компьютера.

rabota za kompyuterom

Почему не виден сертификат ЭЦП на носителе

Обычно проблема решается простой перезагрузкой компьютера и объясняется сбоем в работе программных компонентов. Но иногда для исправления ошибки нужно переустановить драйвера или обратиться в службу технической поддержки пользователей.

Причина 1: драйвер не установлен или устройство отображается в диспетчере устройств с восклицательным знаком

Если на носителе Рутокен ЭЦП не найдено ни одного сертификата, а в диспетчере устройств носитель отображается с восклицательным знаком, то проблема кроется в драйвере.

Для исправления ситуации нужно извлечь носитель ЭЦП из компьютера и скачать последнюю версию драйвера. Скачивание нужно производить только с официальных ресурсов:

После установки драйвера нужно снова подключить носитель. Если ошибка повторяется, проверьте корректность работы токена. Для этого подключите его к другому ПК. Если носитель определился системой, то на неисправном компьютере удалите драйвер и установите его заново.

Причина 2: долгое опознание носителя на Windows 7

При работе в ОС Windows 7 драйверы могут долго назначаться. Решение проблемы — дождитесь окончания процесса или обновите версию ОС.

Причина 3: USB-порт работает некорректно

Убедитесь, что проблема в USB-порте, а не в носителе ЭЦП, для этого переключите токен к другому порту. Если носитель определился системой, то перезагрузите ПК. Обычно это помогает справиться с проблемой и запустить работу всех USB-портов. Если перезагрузка не помогла, то желательно обратиться в техническую поддержку для устранения неисправности.

sertifikat jeup ne viden na nositele

Причина 4: носитель неисправен

Если при переключении носителя к другому ПК или USB-порту флешку компьютер не видит, то проблема в носителе. Чтобы устранить неисправность, обратитесь в сервисный центр для выпуска нового токена.

Почему выходит ошибка при создании подписи

Ошибка создания подписи обычно имеет в расшифровке два значения:

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

Решение проблемы зависит от типа ошибки и обычно не требует обращения в техническую поддержку.

Устранение ошибки ненайденного элемента ЭЦП

Переустановите криптопровайдер на неисправном ПК с официального портала КриптоПро (https://www.cryptopro.ru/downloads). После этого очистите кэш и временные файлы в используемом браузере, а также кэш Java. Затем удалите личные сертификаты и сертификаты главного удостоверяющего центра. Используйте КриптоПро и заново установите новые в соответствии с именем контейнера. После установки корневых сертификатов:

Если после проделанной работы ошибка сохраняется, то нужно обратиться в сервисный центр.

Устранение ошибки с построением цепочки сертификатов

Обычно ошибку вызывает отсутствие сертификатов доверенных корневых центров. Чтобы устранить неисправность, нужно открыть список сертификатов и найти проблемный. Он будет иметь отметку о проблеме в проверке отношений:

rundll 1

Затем пользователь скачивает с официальной страницы сертификат Минкомсвязи РФ и сертификат удостоверяющего центра, имеющего проблемы в работе. Устанавливают их в раздел «‎Корневые сертификаты»‎, а пошаговый процесс выглядит так:

В нужном сертификате нажать «‎Установить».

error 02

В мастере импорта сертификатов нажать «‎Далее» и в новом окне поставить галочку напротив «‎Поместить все сертификаты в следующем хранилище». Нажать «‎Обзор».

error 03

В открывшемся списке выбрать «‎Доверенные корневые центры» и нажать последовательно «‎ОК» и «‎Далее».

error 04

Нажать «‎Готово», а затем подтвердить установку.

error 05

Дождаться установки и перезагрузить ПК. Если после этого подписание сопровождается ошибкой, то необходимо обратиться за помощью в техническую поддержку.

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

Источник


Offline

Ruslan777

 


#1
Оставлено
:

10 апреля 2019 г. 19:27:43(UTC)

Ruslan777

Статус: Новичок

Группы: Участники

Зарегистрирован: 10.04.2019(UTC)
Сообщений: 7
Российская Федерация
Откуда: Москва

Добрый день!
Установил в Ubuntu 18 версию CryptoPro CSP4 R3, чтобы работать с вашим криптопровайдером через PKCS#11 интерфейс.
В скрипте ./install_gui.sh во время установки был выбран модуль поддержки PKCS#11.

После установки DEB-пакетов увидел, что в каталоге /opt/cprocsp/lib/amd64/
появились файлы:
libcppkcs11.so
libcppkcs11.so.4
libcppkcs11.so.4.0.4

После этого установил opensc и попробовал получить информацию о поддерживаемых CSP механизмах.
Команда:

Код:


pkcs11-tool --module /opt/cprocsp/lib/amd64/libcppkcs11.so -M

выдала обнадеживающий результат:

Код:


Using slot 0 with a present token (0x0)
Supported mechanisms:
  ...
  GOSTR3411, digest
  ...
  GOSTR3410, keySize={32,32}, sign, verify
  ...
  GOSTR3410-WITH-GOSTR3411, keySize={64,64}, sign, verify
  ...
  GOSTR3410-KEY-PAIR-GEN, keySize={64,64}, generate_key_pair
  ...

После этого попытался сгенерировать ключевую пару:

Код:


pkcs11-tool --keypairgen --module /opt/cprocsp/lib/amd64/libcppkcs11.so --pin=11111111 --key-type=GOSTR3410:A --mechanism=GOSTR3410-KEY-PAIR-GEN --id=123456 --set-id=123456 --label=123456

, но получаю ошибку:

Код:

Using slot 0 with a present token (0x0)
error: PKCS11 function C_GenerateKeyPair failed: rv = CKR_TEMPLATE_INCONSISTENT (0xd1)
Aborting.

Решил проверить, работает ли хеширование. Для этого создал файл «abc» с текстом «abc» и вызвал команду:

Код:


pkcs11-tool --hash --module /opt/cprocsp/lib/amd64/libcppkcs11.so --mechanism GOSTR3411 --input-file abc --output-file abc.hash

Хеш успешно вычислился и сохранился в файл abc.hash.

Решил проверить, нет ли у меня в вызове команд ошибки, сделав генерацию ключевой пары и создание подписи через токен JaCarta ГОСТ:

Код:


pkcs11-tool --init-token --init-pin --module /usr/lib64/libjcPKCS11.so.1.5.3 --so-pin=1234567890 --label='JaCarta' --new-pin=11111111 --pin=11111111
Using slot 0 with a present token (0x0)
Token successfully initialized
User PIN successfully initialized

pkcs11-tool --keypairgen --module /usr/lib64/libjcPKCS11.so.1.5.3 --pin=11111111 --key-type=GOSTR3410:A --mechanism=GOSTR3410-KEY-PAIR-GEN --id=123456 --set-id=123456 --label=123456
Using slot 0 with a present token (0x0)
Key pair generated:
Private Key Object; GOSTR3410 
  PARAMS OID: 06072a850302022301
  label:      123456
  ID:         123456
warning: PKCS11 function C_GetAttributeValue(DECRYPT) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)

warning: PKCS11 function C_GetAttributeValue(DERIVE) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)

  Usage:      sign
warning: PKCS11 function C_GetAttributeValue(ALWAYS_AUTHENTICATE) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)

Public Key Object; GOSTR3410 
  PARAMS OID: 06072a850302022301
  VALUE:      b3dff43e5bbacd4c34847463a57709d219074fdd451779f755a8344c37495354
              451bb87d27618ea733a41aad4eb2506acc2833d13d440582bf13dfb0b8e53fa7
  label:      123456
  ID:         123456
warning: PKCS11 function C_GetAttributeValue(ENCRYPT) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)

warning: PKCS11 function C_GetAttributeValue(WRAP) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)

warning: PKCS11 function C_GetAttributeValue(DERIVE) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)

  Usage:      verify
error: You should specify the object type with the -y option
Aborting.

pkcs11-tool --sign --module /usr/lib64/libjcPKCS11.so.1.5.3 --pin=11111111 --id=123456 --label 123456 --input-file abc --output-file abc.sgn --mechanism GOSTR3410-WITH-GOSTR3411
Using slot 0 with a present token (0x0)
Using signature algorithm GOSTR3410-WITH-GOSTR3411
warning: PKCS11 function C_GetAttributeValue(ALWAYS_AUTHENTICATE) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)

Ключевая пара в токене успешно сгенерировалась и 64-байта записались в файл abc.sgn.

В чем может быть проблема с генерацией ключевой пары через PKCS#11 API CryptoPro CSP 4?
Нужно что-то дополнительно настроить в /opt/cprocsp/? Обновить DEB-пакеты?


Вверх

Offline

Дмитрий Пичулин

 


#2
Оставлено
:

10 апреля 2019 г. 23:29:14(UTC)

pd

Статус: Сотрудник

Группы: Администраторы

Зарегистрирован: 16.09.2010(UTC)
Сообщений: 1,314
Откуда: КРИПТО-ПРО

Сказал(а) «Спасибо»: 28 раз
Поблагодарили: 285 раз в 239 постах

Автор: Ruslan777 Перейти к цитате

В чем может быть проблема с генерацией ключевой пары через PKCS#11 API CryptoPro CSP 4?
Нужно что-то дополнительно настроить в /opt/cprocsp/? Обновить DEB-пакеты?

Проблем может быть много, мы мало тестировали pkcs11-tool, особенно в части генерации ключей.

Попробуйте сгенерировать ключ штатными средствами CSP, а подписывать через pkcs11-tool, ведь цель подпись?

Или в чём глобальная задача?

Интерфейс pkcs11 очень капризный. Мы конечно можем его подстроить под конкретное приложение, но хотелось бы понимать задачи, которые можно решить с помощью pkcs11-tool, но нельзя решить штатными средствами КриптоПро CSP.

Знания в базе знаний, поддержка в техподдержке


Вверх

WWW


Offline

Ruslan777

 


#3
Оставлено
:

11 апреля 2019 г. 12:43:54(UTC)

Ruslan777

Статус: Новичок

Группы: Участники

Зарегистрирован: 10.04.2019(UTC)
Сообщений: 7
Российская Федерация
Откуда: Москва

Дмитрий, да, цель — подпись.

У нас есть универсальный плагин для браузеров (Windows, Mac OS X, Linux), который поддерживает работу с токенами через PKCS#11 интерфейс. Плагин замечательно работает с Рутокен и JaCarta, но не работает через ваш PKCS#11 модуль «/opt/cprocsp/lib/amd64/libcppkcs11.so».
Если использовать «libcppkcs11.so», то операции C_Sign или C_SignFinal всегда выполняются с результатом CKR_FUNCTION_FAILED.

При этом я опробовал два подхода:
1) Механизм комбинированного хеширования и подписи CKM_GOSTR3410_WITH_GOSTR3411(0x1202) с вызовами C_SignInit, C_SignUpdate и C_SignFinal
2) Механизмы раздельного хеширования и подписи CKM_GOSTR3411(0x1210) + CKM_GOSTR3410(0x1201) с вызовами C_SignInit, C_Sign.
Результат всегда одинаковый — и для C_SignFinal и для C_Sign вызов возвращает ошибку CKR_FUNCTION_FAILED.
При этом другие функции (чтение списка поддерживаемых механизмов, хеширование) работают через «/opt/cprocsp/lib/amd64/libcppkcs11.so».

Я сначала предположил, что проблема может быть в неправильной работе моего кода с PKCS#11 в Linux, поэтому решил обкатать сценарий выпуска PKCS#10-запроса, установки сертификата и создания ЭЦП через универсальный инструмент — pkcs11-tool. Но сейчас все мои предположения сводятся к тому, что у КриптоПро модуль PKCS#11 для Linux получился слишком сырым.

Отредактировано пользователем 11 апреля 2019 г. 12:45:33(UTC)
 | Причина: Не указана


Вверх

Offline

Дмитрий Пичулин

 


#4
Оставлено
:

11 апреля 2019 г. 15:12:06(UTC)

pd

Статус: Сотрудник

Группы: Администраторы

Зарегистрирован: 16.09.2010(UTC)
Сообщений: 1,314
Откуда: КРИПТО-ПРО

Сказал(а) «Спасибо»: 28 раз
Поблагодарили: 285 раз в 239 постах

Проверили pkcs11-tool на совместимость с нами, вариант с CKM_GOSTR3410_WITH_GOSTR3411 нормально работает.

1. Перечисляем объекты:

Код:

pkcs11-tool --module /opt/cprocsp/lib/amd64/libcppkcs11.so --list-objects

Цитата:


Private Key Object; GOSTR3410
PARAMS OID: 06072a850302022400
label: cln512e
ID: 33383439344646324543383442363841
Usage: decrypt, sign, unwrap, derive

2. Находим нужный ключ и сохраняем его ID
3. Подписываем:

Код:

pkcs11-tool --module /opt/cprocsp/lib/amd64/libcppkcs11.so --sign --id=33383439344646324543383442363841 --input-file abc --output-file abc.sgn --mechanism GOSTR3410-WITH-GOSTR3411

Знания в базе знаний, поддержка в техподдержке


Вверх

WWW


Offline

Ruslan777

 


#5
Оставлено
:

11 апреля 2019 г. 19:44:39(UTC)

Ruslan777

Статус: Новичок

Группы: Участники

Зарегистрирован: 10.04.2019(UTC)
Сообщений: 7
Российская Федерация
Откуда: Москва

Дмитрий, у меня почему-то не получается увидеть в списке объектов ключ после того, как был вызван метод
C_GenerateKeyPair.

Для генерации ключей используются шаблоны со следующими атрибутами:

[Закрытый ключ]
CKA_ID
CKA_LABEL
CKA_PRIVATE
CKA_GOST_3410_PARAM
CKA_GOST_3411_PARAM
CKA_KEY_TYPE
CKA_SIGN

[Открытый ключ]
CKA_ID
CKA_LABEL
CKA_GOST_3410_PARAM
CKA_GOST_3411_PARAM
CKA_KEY_TYPE
CKA_VERIFY

Вызов метода C_GenerateKeyPair проходит с результатом CKR_OK, но при вызове

Код:

pkcs11-tool --module /opt/cprocsp/lib/amd64/libcppkcs11.so --list-objects

я не вижу новых объектов — только следующие 9 объектов:

Код:

Public Key Object; GOSTR3410 
  PARAMS OID: 06072a850302022301
  VALUE:      8fa5bf791023c8d691ad6431575bbe9bc58a83f43f29f72a79a9fb65c3e8a80f
              5a75c42254915fc83f218ada703af9d58b0d736284dc2ee6907ea1037337a1fb
  label:      1CCB95BA3256A79BC401AF40D2CD41BE06A898B2
  ID:         31434342393542413332353641373942433430314146343044324344343142453036413839384232
  Usage:      encrypt, verify, wrap, derive
Public Key Object; GOSTR3410 
  PARAMS OID: 06072a850302022301
  VALUE:      75392a45a7b9a2957df710fd229207ba1db65a718a7d7d58fcb146b9456157ac
              1dbb48a5f94afb4819ea6a29ebfaf514987871ca47e8d3f585f636e48af7038d
  label:      617A71FDD5C9773D23AF010B85F339CA10182AFE
  ID:         36313741373146444435433937373344323341463031304238354633333943413130313832414645
  Usage:      encrypt, verify, wrap, derive
Public Key Object; GOSTR3410 
  PARAMS OID: 06072a850302022301
  VALUE:      e7c9497fae11e325eb495d4b1dc6c0484da56495752ac0759b46964a32ffd365
              e9987dd4f0099f21a3af0ace4ccc71cdd580e2e172bb6167ed1c127ce8e1d54f
  label:      6FEFB1FDD47784A78644E7A8E985A1DD360B0477
  ID:         36464546423146444434373738344137383634344537413845393835413144443336304230343737
  Usage:      encrypt, verify, wrap, derive
Certificate Object; type = X.509 cert
  label:      1CCB95BA3256A79BC401AF40D2CD41BE06A898B2
  ID:         31434342393542413332353641373942433430314146343044324344343142453036413839384232
Certificate Object; type = X.509 cert
  label:      617A71FDD5C9773D23AF010B85F339CA10182AFE
  ID:         36313741373146444435433937373344323341463031304238354633333943413130313832414645
Certificate Object; type = X.509 cert
  label:      6FEFB1FDD47784A78644E7A8E985A1DD360B0477
  ID:         36464546423146444434373738344137383634344537413845393835413144443336304230343737
Object 3221225475, type 3461563219
Object 3221225478, type 3461563219
Object 3221225481, type 3461563219

При этом, если в шаблон закрытого ключа добавить атрибут CKA_TOKEN, то метод C_GenerateKeyPair возвращает ошибку CKR_TEMPLATE_INCONSISTENT,
хотя для C_GenerateKeyPair у обычных токенов (Рутокен, JaCarta) этот атрибут никогда не вызывает ошибок.

Может быть у вас есть готовый пример, как можно создать ключевую пару через PKCS#11 для CryptoPro CSP 4?

Отредактировано пользователем 11 апреля 2019 г. 19:45:56(UTC)
 | Причина: Не указана


Вверх

Offline

Дмитрий Пичулин

 


#6
Оставлено
:

11 апреля 2019 г. 20:36:54(UTC)

pd

Статус: Сотрудник

Группы: Администраторы

Зарегистрирован: 16.09.2010(UTC)
Сообщений: 1,314
Откуда: КРИПТО-ПРО

Сказал(а) «Спасибо»: 28 раз
Поблагодарили: 285 раз в 239 постах

Автор: Ruslan777 Перейти к цитате

Вызов метода C_GenerateKeyPair проходит с результатом CKR_OK, но при вызове

Код:

pkcs11-tool --module /opt/cprocsp/lib/amd64/libcppkcs11.so --list-objects

я не вижу новых объектов

При этом, если в шаблон закрытого ключа добавить атрибут CKA_TOKEN, то метод C_GenerateKeyPair возвращает ошибку CKR_TEMPLATE_INCONSISTENT,
хотя для C_GenerateKeyPair у обычных токенов (Рутокен, JaCarta) этот атрибут никогда не вызывает ошибок.

Может быть у вас есть готовый пример, как можно создать ключевую пару через PKCS#11 для CryptoPro CSP 4?

Всё верно по —list-objects, временные объекты могут быть перечислены только в рамках работы сессии, в которой они созданы. Между вызовами приложения временные объекты, очевидно, не выживают.

Всё верно по CKA_TOKEN, по умолчанию слот настроен в режиме только на чтение, постоянные объекты в нём не создать.

Как выяснили выше, если цель — подпись, то сделать её можно и на слоте по умолчанию, ключ можно создать средствами КриптоПро CSP.

Знания в базе знаний, поддержка в техподдержке


Вверх

WWW


Offline

Ruslan777

 


#7
Оставлено
:

12 апреля 2019 г. 11:42:54(UTC)

Ruslan777

Статус: Новичок

Группы: Участники

Зарегистрирован: 10.04.2019(UTC)
Сообщений: 7
Российская Федерация
Откуда: Москва

Цитата:

Всё верно по CKA_TOKEN, по умолчанию слот настроен в режиме только на чтение, постоянные объекты в нём не создать.

Может быть в этом и кроется корень всех проблем.

Дмитрий, я нашел файл: /etc/opt/cprocsp/config64.ini и заполнил блок [PKCS11slot0]:

Код:

[PKCS11slot0]
ProvGOST = "Crypto-Pro GOST R 34.10-2001 KC1 CSP"
# ProvRSA = "Microsoft Strong Cryptographic Provider"
# Firefox = ""
reader = hdimage

Сейчас у меня команда

Код:

pkcs11-tool --keypairgen --module /opt/cprocsp/lib/amd64/libcppkcs11.so --pin=11111111 --key-type=GOSTR3410:A --mechanism=GOSTR3410-KEY-PAIR-GEN --id=33383439344646324543383442363841 --set-id=33383439344646324543383442363841 --label=cln512e --usage-sign --usage-derive --usage-decrypt

выдает такую ошибку:

Код:

Using slot 0 with a present token (0x0)
error: PKCS11 function C_OpenSession failed: rv = CKR_TOKEN_WRITE_PROTECTED (0xe2)
Aborting.

Отредактировано пользователем 12 апреля 2019 г. 12:14:50(UTC)
 | Причина: Не указана


Вверх

Offline

Дмитрий Пичулин

 


#8
Оставлено
:

12 апреля 2019 г. 12:22:19(UTC)

pd

Статус: Сотрудник

Группы: Администраторы

Зарегистрирован: 16.09.2010(UTC)
Сообщений: 1,314
Откуда: КРИПТО-ПРО

Сказал(а) «Спасибо»: 28 раз
Поблагодарили: 285 раз в 239 постах

Автор: Ruslan777 Перейти к цитате

выдает такую ошибку:

Код:

Using slot 0 with a present token (0x0)
error: PKCS11 function C_OpenSession failed: rv = CKR_TOKEN_WRITE_PROTECTED (0xe2)
Aborting.

Попробуйте так:

Код:

[PKCS11slot0]
ProvGOST = ""
reader = "HDIMAGE"

Знания в базе знаний, поддержка в техподдержке


Вверх

WWW


Offline

Ruslan777

 


#9
Оставлено
:

12 апреля 2019 г. 13:24:32(UTC)

Ruslan777

Статус: Новичок

Группы: Участники

Зарегистрирован: 10.04.2019(UTC)
Сообщений: 7
Российская Федерация
Откуда: Москва

Не помогло. Вернулась прежняя ошибка — CKR_TEMPLATE_INCONSISTENT

Код:


pkcs11-tool --keypairgen --module /opt/cprocsp/lib/amd64/libcppkcs11.so --pin=11111111 --key-type=GOSTR3410:A --mechanism=GOSTR3410-KEY-PAIR-GEN --id=33383439344646324543383442363841 --set-id=33383439344646324543383442363841 --label=cln512e --usage-sign --usage-derive --usage-decrypt
Using slot 0 with a present token (0x0)
error: PKCS11 function C_GenerateKeyPair failed: rv = CKR_TEMPLATE_INCONSISTENT (0xd1)
Aborting.

При программной генерации через PKCS#11 ключевая пара создается, но как и раньше не выводится командой
pkcs11-tool —list-objects.

Отредактировано пользователем 12 апреля 2019 г. 13:28:44(UTC)
 | Причина: Не указана


Вверх

Offline

Ruslan777

 


#10
Оставлено
:

12 апреля 2019 г. 15:31:10(UTC)

Ruslan777

Статус: Новичок

Группы: Участники

Зарегистрирован: 10.04.2019(UTC)
Сообщений: 7
Российская Федерация
Откуда: Москва

Если в шаблон закрытого ключа добавить атрибут CKA_TOKEN, то метод C_GenerateKeyPair также возвращает ошибку CKR_TEMPLATE_INCONSISTENT.


Вверх
Пользователи, просматривающие эту тему

Guest

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

Содержание

  1. 0x54f внутренняя ошибка рутокен
  2. Стандартные коды ошибок
  3. Первичная диагностика неисправности Рутокен
  4. Первый этап диагностики — Визуальный осмотр Рутокена
  5. 1. Повреждение/разлом корпуса или USB-разъема Рутокена
  6. 2. На корпусе Рутокена видны следы попыток вскрыть носитель
  7. 3. Рутокен со следами оплавления и/или почернения корпуса изнутри носителя, отпаявшаяся микросхема или вспученная поверхность микросхемы
  8. Второй этап диагностики — Возможные ошибки при работе с Панелью управления Рутокен
  9. 1. Рутокен не определяется в «Панели управления Рутокен»
  10. 2. Рутокен определяется панелью управления, кнопка «Ввести PIN-код…» активна, но авторизация с PIN-кодом пользователя/администратора выполняется с ошибкой. Дальнейшие действия зависят от формулировки возникающей ошибки:
  11. 2.1 Ошибка “Не удалось получить всю информацию о токене Код ошибки: 0x6a82 Описание ошибки: Файл/ RSF не найден”
  12. 2.2 Ошибка “Не удалось получить всю информацию о токене код ошибки: 0х6400 Описание ошибки: Состояние памяти Rutoken не изменилось”
  13. 2.3 Ошибка “Не удалось получить всю информацию о токене Код ошибки 0xF003 Описание ошибки Неверное значение”
  14. 2.4 Ошибка «Обнаружено повреждение системной области памяти (ошибка CRC)» код ошибки 0x6F20
  15. 2.5 Референсные данные не найдены
  16. 2.6 «PIN-код заблокирован»
  17. Третий этап диагностики — Диагностика ключевой информации, содержащейся на Рутокене
  18. 1. Проверка целостности контейнера с сертификатом “КриптоПро CSP” или “VipNet CSP”
  19. 2. Проверка целостности сертификата с неизвлекаемыми ключами
  20. 0x54f внутренняя ошибка рутокен
  21. Стандартные коды ошибок
  22. Ошибки Рутокен
  23. Ошибка: Сертификат ненадежен/Не удалось проверить статус отзыва
  24. Ошибка: Rutoken перестает определяться (Windows 10)
  25. Ошибка: Панель управления не видит Рутокен ЭЦП 2.0

0x54f внутренняя ошибка рутокен

Все функции из реализации стандарта PKCS#11 возвращают различные коды ошибок. Все возвращаемые коды ошибок делятся на две большие группы:

  • стандартные коды ошибок, которые описаны в стандарте. Для каждого кода ошибки есть разъяснение, в каких ситуациях он может быть возвращен.
  • специальные коды ошибок, которые определяются каждым разработчиком реализации стандарта PKCS#11. Ситуации, в которых могут быть возвращены специальные коды ошибок разработчик реализации стандарта определяет самостоятельно.

Все функции из реализации стандарта PKCS#11 возвращают специальные коды ошибок (определяются производителем).

Все функции из реализации расширения стандарта PKCS#11 возвращают специальные коды ошибок (определяются производителем).

Стандартные коды ошибок

В силу особенностей реализации библиотек rtPKCS11 и rtPKCS11ECP некоторые стандартные функции могут вернуть стандартный код ошибки PKCS#11, не входящий в список допустимых для данной функции. Подобная ситуация является исключением. Стандартные коды ошибок, возвращаемые каждой функцией в исключительных ситуациях, перечислены в описании для каждой функции отдельно.

В таблице ниже приведен список кодов ошибок стандарта PKCS#11 и их описаний, поддерживаемых устройствами Рутокен. Подробную информацию по каждому коду ошибки можно найти в стандарте (английский язык).

Коды ошибок стандарта PKCS #11, поддерживаемые устройствами Рутокен

Источник

Первичная диагностика неисправности Рутокен

В соответствии с правилами эксплуатации и хранения электронных идентификаторов Рутокен, пользователь имеет право бесплатно заменить неисправный носитель Рутокен в течение срока гарантийного обслуживания, если, в ходе проведения экспертизы, случай будет признан гарантийным.

Отправка токена на экспертизу производится через ту компанию, с которой у компании «Актив» имеются договорные отношения.

Таким образом, если вы приобретали Рутокен у одного из наших партнеров, вам нужно передать Рутокен партнеру. Если договор между вашей организацией и компанией «Актив» напрямую не заключался, и вы направите Рутокен нам, мы не сможем принять его на экспертизу.

Узнать срок гарантии на устройство Рутокен можно в той компании, в которой он приобретался.

В случае обнаружения пользователем неисправности Рутокена, советуем провести первичную диагностику носителя, прежде чем обратиться в компанию, где приобретался носитель Рутокен.

Самые частые ошибки мы собрали в этой статье.

Первичная диагностика состоит из 3 этапов:

  1. Визуальный осмотр Рутокена. На данном этапе определяется, попадает ли Рутокен под гарантию по сроку его использования, а также выявляются механические повреждения Рутокена.
  2. Возможные ошибки в «Панели управления Рутокен» На данном этапе определяются неисправности, которые могут быть выявлены только путем подключения Рутокена к компьютеру.
  3. Диагностика ключевой информации, содержащейся на Рутокене. На данном этапе проверяется целостность ключевой информации, которая содержится на носителе Рутокен с помощью вспомогательных инструментов, таких как: “Панель управления Рутокен”, “КриптоПро CSP” или «ViPNet CSP».

Первый этап диагностики — Визуальный осмотр Рутокена

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

Можно выделить следующие виды механических повреждений:

1. Повреждение/разлом корпуса или USB-разъема Рутокена

2. На корпусе Рутокена видны следы попыток вскрыть носитель

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

Рутокен со следами оплавления и/или почернения можно направить на дополнительную экспертизу. Если в ходе экспертизы будет выявлено умышленное повреждение или превышение допустимого напряжения, подаваемого в USB-порт, гарантийная замена Рутокена на новый произведена не будет.

Второй этап диагностики — Возможные ошибки при работе с Панелью управления Рутокен

Если при визуальном осмотре Рутокена никаких видимых повреждений не выявлено, необходимо проверить Рутокен на компьютере.

Подключите Рутокен к компьютеру и запустите «Панель управления Рутокен».

Запуск панели управления Рутокен выполняется через меню Пуск / Панель управления / Панель управления Рутокен.

Если Рутокен определяется в «Панели управления Рутокен», активна кнопка «Ввести PIN-код…»

Нажмите на кнопку «Информация» на вкладке «Администрирование». Ошибок возникать не должно.

Попробуйте авторизоваться с PIN-кодом пользователя и/или администратора.

Если при нажатии на кнопку «Информация» ошибок не возникает, а авторизация выполняется успешно, следует перейти к третьему этапу диагностики носителя Рутокен

(Рутокен работает корректно, необходимо проверить целостность ключевой информации на Рутокене).

После подключения Рутокена к компьютеру возможны следующие ошибки в Панели управления Рутокен:

1. Рутокен не определяется в «Панели управления Рутокен»

Рутокен не определяется в «Панели управления Рутокен» (список «Подключенные Рутокен» пустой) и, как следствие, неактивны кнопки «Ввести PIN-код…» и «Информация…». В данном случае необходимо воспользоваться инструкцией.

2. Рутокен определяется панелью управления, кнопка «Ввести PIN-код…» активна, но авторизация с PIN-кодом пользователя/администратора выполняется с ошибкой. Дальнейшие действия зависят от формулировки возникающей ошибки:

2.1 Ошибка “Не удалось получить всю информацию о токене Код ошибки: 0x6a82 Описание ошибки: Файл/ RSF не найден”

Подключите Рутокен к другому USB порту. Повторите попытку ввода PIN-кода. По возможности, установите Драйверы Рутокен на другой компьютер, подключите токен и попробуйте ввести PIN-код.

Если и на другом компьютере ошибка повторяется, значит возникло нарушение файловой системы Рутокен. Его можно отформатировать и записать ключи заново.

2.2 Ошибка “Не удалось получить всю информацию о токене код ошибки: 0х6400 Описание ошибки: Состояние памяти Rutoken не изменилось”

Подключите Рутокен к другому USB порту. Повторите попытку ввести PIN-код. По возможности, установите Драйверы Рутокен на другой компьютер, подключите токен и попробуйте ввести PIN-код.

Если и на другом компьютере ошибка повторяется, значит возникло нарушение файловой системы Рутокен. Его можно отформатировать и записать ключи заново.

2.3 Ошибка “Не удалось получить всю информацию о токене Код ошибки 0xF003 Описание ошибки Неверное значение”

Подключите Рутокен к другому USB порту. Повторите попытку ввести PIN-код. По возможности, установите Драйверы Рутокен на другой компьютер, подключите токен и попробуйте ввести PIN-код.

Если и на другом компьютере ошибка повторяется, значит возникло нарушение файловой системы Рутокен. Его можно отформатировать и записать ключи заново.

2.4 Ошибка «Обнаружено повреждение системной области памяти (ошибка CRC)» код ошибки 0x6F20

Ошибка означает, что память на носителя Рутокен была повреждена. Форматирование Рутокена не поможет. Рутокен необходимо передать в ту компанию, в которой приобретался данный носитель для отправки на экспертизу в компанию Актив.

2.5 Референсные данные не найдены

Подключите Рутокен к другому USB порту. Повторите попытку ввести PIN-код. По возможности, установите Драйверы Рутокен на другой компьютер, подключите токен и попробуйте ввести PIN-код.

Если и на другом компьютере ошибка повторяется, значит возникло нарушение файловой системы Рутокен. Его можно отформатировать и записать ключи заново.

Более подробная информация об ошибке есть в статье нашей Базы Знаний.

2.6 «PIN-код заблокирован»

Ошибка «PIN-код заблокирован» означает, что Рутокен был заблокирован в результате превышения количества попыток ввода PIN-кода.

Если заблокирован PIN-код пользователя, воспользуйтесь инструкцией.

Если заблокирован PIN-код Администратора, воспользуйтесь инструкцией.

Третий этап диагностики — Диагностика ключевой информации, содержащейся на Рутокене

На третьем этапе проверяется целостность ключевой информации, которая содержится на Рутокене.

Определите модель Рутокена по инструкции.

Если используется носитель из семейства Рутокен ЭЦП, проверьте формат ключей по инструкции.

1. Проверка целостности контейнера с сертификатом “КриптоПро CSP” или “VipNet CSP”

Выполнить такую проверку можно через программу криптопровайдера, с помощью которой была сгенерирована электронная подпись пользователя, например программа «КриптоПро CSP» или «VipNet CSP»

Тестирование целостности контейнера через «КриптоПро CSP» необходимо проводить по инструкции.

Тестирование целостности контейнера через «VipNet CSP» необходимо проводить по инструкции.

Если операция по проверке ключевого контейнера выполняется без ошибок, значит ключевая информация на носителе Рутокен не повреждена.

2. Проверка целостности сертификата с неизвлекаемыми ключами

Тестирование носителей Рутокен ЭЦП 2.0 с записанными на него неизвлекаемыми ключами ЭП (PKCS#11) пользователями самостоятельно не производится. Удаленная диагностика выполняется сотрудниками технической поддержки компании Актив.

Если у вас возникли вопросы — обращайтесь в службу технической поддержки компании “Актив”.

Источник

0x54f внутренняя ошибка рутокен

Все функции из реализации стандарта PKCS#11 возвращают различные коды ошибок. Все возвращаемые коды ошибок делятся на две большие группы:

  • стандартные коды ошибок, которые описаны в стандарте. Для каждого кода ошибки есть разъяснение, в каких ситуациях он может быть возвращен.
  • специальные коды ошибок, которые определяются каждым разработчиком реализации стандарта PKCS#11. Ситуации, в которых могут быть возвращены специальные коды ошибок разработчик реализации стандарта определяет самостоятельно.

Все функции из реализации стандарта PKCS#11 возвращают специальные коды ошибок (определяются производителем).

Все функции из реализации расширения стандарта PKCS#11 возвращают специальные коды ошибок (определяются производителем).

Стандартные коды ошибок

В силу особенностей реализации библиотек rtPKCS11 и rtPKCS11ECP некоторые стандартные функции могут вернуть стандартный код ошибки PKCS#11, не входящий в список допустимых для данной функции. Подобная ситуация является исключением. Стандартные коды ошибок, возвращаемые каждой функцией в исключительных ситуациях, перечислены в описании для каждой функции отдельно.

В таблице ниже приведен список кодов ошибок стандарта PKCS#11 и их описаний, поддерживаемых устройствами Рутокен. Подробную информацию по каждому коду ошибки можно найти в стандарте (английский язык).

Коды ошибок стандарта PKCS #11, поддерживаемые устройствами Рутокен

Источник

Ошибки Рутокен

Из нашей статьи вы узнаете:

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

Ошибка: Сертификат ненадежен/Не удалось проверить статус отзыва

Ошибку можно заметить на вкладке «Сертификаты» непосредственно в панели управления Рутокен. Проблема возникает во время установки ЭЦП и связана с неполной настройкой. Речь про отсутствие специального корневого доверенного сертификата, который выдает удостоверяющий центр.

Первым шагом к устранению ошибки остается обновление комплекта драйверов. Если проблема не исчезла или последние у вас имеют актуальную версию, выполните действия по следующему алгоритму:

  • выберите ваш сертификат в панели управления;
  • нажмите кнопку «Свойства»;
  • выберите вкладку «Путь сертификации».

Если в открывшемся дереве вы видите лишь ваш личный сертификат, то надо установить еще один, который был выдан в удостоверяющем центре, и сделать доверенным.

Ошибка: Rutoken перестает определяться (Windows 10)

Потенциально могут возникать периодические ошибки из-за недоступности сертификатов, невозможности запустить панель управления. Одновременно светодиод на токене горит, а сам Рутокен имеется в Диспетчере устройств. Подобная ситуация может быть связана со спецификой работы материнской платы компьютера, когда при переходе из энергосберегающего режима в штатный не происходит «пробуждения» токена. Выходом здесь станет его отключение либо повторное подключение Рутокена (для этого достаточно достать USB-токен из разъема и подключить опять).

В случае если ошибка не исчезла, обратитесь за консультацией в удостоверяющий центр, где вы оформили ЭЦП и приобрели Рутокен.

Ошибка: Панель управления не видит Рутокен ЭЦП 2.0

Для решения проблемы выполните следующие действия:

  • подключите токен к другому USB-разъему или компьютеру для оценки работоспособности;
  • определите наличие устройства через «Диспетчер устройств» в разделе «Контроллеры USB»;
  • проконтролируйте наличие доступа к веткам реестра
    • HKEY_LOCAL_MACHINESOFTWAREMicrosoftCryptographyCalais и
    • HKEY_LOCAL_MACHINESOFTWAREMicrosoftCryptographyCalaisReaders у текущего пользователя и Local Service (если необходимо, то добавьте), также убедитесь, что Служба «Смарт-карта» запущена от имени NT AUTHORITYLocalService («Пуск» — «Панель управления» — «Администрирование» — «Службы»).;
  • проверьте количество считывателей в настройках панели управления (должно быть значение 1);
  • переустановите комплект драйверов для исключения сбоя программного обеспечения.

Если ничего не помогло и ошибка осталась, обращайтесь в удостоверяющий центр «Астрал». Мы предлагаем услуги по генерации ЭЦП любых типов на выгодных условиях, а также комплексное техническое сопровождение. Для решения проблем мы готовы проконсультировать по телефону либо найти выход с помощью удаленного подключения к вашему компьютеру. Получить дополнительную информацию можно по телефону либо оставив заявку на сайте. Мы оперативно ответим и предоставим консультацию.

Источник

Последнее обновление: 07/23/2022
[Среднее время чтения: 4,5 мин.]

Файлы Plain Text, такие как pkcs11.txt, используют расширение TXT. Файл считается файлом Текст (Plain Text) и впервые был создан компанией Mozilla для пакета ПО Mozilla Thunderbird 68.2.0.

Файл pkcs11.txt впервые был создан 09/18/2019 для ОС Windows 10 в Mozilla Firefox 69.0.1.

Самый последний выпуск для Mozilla Thunderbird 68.2.0 состоялся 10/22/2019 [версия 68.2.0].

Файл pkcs11.txt включен в Mozilla Thunderbird 68.2.0, Mozilla Firefox 70.0b13 и Mozilla Firefox 70.

В этой статье обсуждаются подробные сведения о файлах, порядок устранения неполадок с файлом TXT при проблемах с pkcs11.txt, а также полный набор бесплатных загрузок для каждой версии файла, которая была зарегистрирована нашей командой.

Что такое сообщения об ошибках pkcs11.txt?

Общие ошибки выполнения pkcs11.txt

Ошибки файла pkcs11.txt часто возникают на этапе запуска Mozilla Thunderbird, но также могут возникать во время работы программы.
Эти типы ошибок TXT также известны как «ошибки выполнения», поскольку они возникают во время выполнения Mozilla Thunderbird. К числу наиболее распространенных ошибок выполнения pkcs11.txt относятся:

  • Не удается найти pkcs11.txt.
  • pkcs11.txt — ошибка.
  • Не удалось загрузить pkcs11.txt.
  • Ошибка при загрузке pkcs11.txt.
  • Не удалось зарегистрировать pkcs11.txt / Не удается зарегистрировать pkcs11.txt.
  • Ошибка выполнения — pkcs11.txt.
  • Файл pkcs11.txt отсутствует или поврежден.

Библиотека времени выполнения Microsoft Visual C++

Ошибка выполнения!

Программа: C:UsersTesterAppDataRoamingThunderbirdProfileshuaunoht.default-releasepkcs11.txt

Среда выполнения получила запрос от этого приложения, чтобы прекратить его необычным способом.
Для получения дополнительной информации обратитесь в службу поддержки приложения.

В большинстве случаев причинами ошибок в TXT являются отсутствующие или поврежденные файлы. Файл pkcs11.txt может отсутствовать из-за случайного удаления, быть удаленным другой программой как общий файл (общий с Mozilla Thunderbird) или быть удаленным в результате заражения вредоносным программным обеспечением. Кроме того, повреждение файла pkcs11.txt может быть вызвано отключением питания при загрузке Mozilla Thunderbird, сбоем системы при загрузке или сохранении pkcs11.txt, наличием плохих секторов на запоминающем устройстве (обычно это основной жесткий диск) или заражением вредоносным программным обеспечением. Таким образом, крайне важно, чтобы антивирус постоянно поддерживался в актуальном состоянии и регулярно проводил сканирование системы.

Как исправить ошибки pkcs11.txt — 3-шаговое руководство (время выполнения: ~5-15 мин.)

Если вы столкнулись с одним из вышеуказанных сообщений об ошибке, выполните следующие действия по устранению неполадок, чтобы решить проблему pkcs11.txt. Эти шаги по устранению неполадок перечислены в рекомендуемом порядке выполнения.

Шаг 1. Восстановите компьютер до последней точки восстановления, «моментального снимка» или образа резервной копии, которые предшествуют появлению ошибки.

Чтобы начать восстановление системы (Windows XP, Vista, 7, 8 и 10):

  1. Нажмите кнопку «Пуск» в Windows
  2. В поле поиска введите «Восстановление системы» и нажмите ENTER.
  3. В результатах поиска найдите и нажмите «Восстановление системы»
  4. Введите пароль администратора (при необходимости).
  5. Следуйте инструкциям мастера восстановления системы, чтобы выбрать соответствующую точку восстановления.
  6. Восстановите компьютер к этому образу резервной копии.

Если на этапе 1 не удается устранить ошибку pkcs11.txt, перейдите к шагу 2 ниже.

Шаг 2. Если вы недавно установили приложение Mozilla Thunderbird (или схожее программное обеспечение), удалите его, затем попробуйте переустановить Mozilla Thunderbird.

Чтобы удалить программное обеспечение Mozilla Thunderbird, выполните следующие инструкции (Windows XP, Vista, 7, 8 и 10):

  1. Нажмите кнопку «Пуск» в Windows
  2. В поле поиска введите «Удалить» и нажмите ENTER.
  3. В результатах поиска найдите и нажмите «Установка и удаление программ»
  4. Найдите запись для Mozilla Thunderbird 68.2.0 и нажмите «Удалить»
  5. Следуйте указаниям по удалению.

После полного удаления приложения следует перезагрузить ПК и заново установить Mozilla Thunderbird.

Если на этапе 2 также не удается устранить ошибку pkcs11.txt, перейдите к шагу 3 ниже.

Mozilla Thunderbird 68.2.0

Mozilla

Шаг 3. Выполните обновление Windows.

Когда первые два шага не устранили проблему, целесообразно запустить Центр обновления Windows. Во многих случаях возникновение сообщений об ошибках pkcs11.txt может быть вызвано устаревшей операционной системой Windows. Чтобы запустить Центр обновления Windows, выполните следующие простые шаги:

  1. Нажмите кнопку «Пуск» в Windows
  2. В поле поиска введите «Обновить» и нажмите ENTER.
  3. В диалоговом окне Центра обновления Windows нажмите «Проверить наличие обновлений» (или аналогичную кнопку в зависимости от версии Windows)
  4. Если обновления доступны для загрузки, нажмите «Установить обновления».
  5. После завершения обновления следует перезагрузить ПК.

Если Центр обновления Windows не смог устранить сообщение об ошибке pkcs11.txt, перейдите к следующему шагу. Обратите внимание, что этот последний шаг рекомендуется только для продвинутых пользователей ПК.

Если эти шаги не принесут результата: скачайте и замените файл pkcs11.txt (внимание: для опытных пользователей)

Если ни один из предыдущих трех шагов по устранению неполадок не разрешил проблему, можно попробовать более агрессивный подход (примечание: не рекомендуется пользователям ПК начального уровня), загрузив и заменив соответствующую версию файла pkcs11.txt. Мы храним полную базу данных файлов pkcs11.txt со 100%-ной гарантией отсутствия вредоносного программного обеспечения для любой применимой версии Mozilla Thunderbird . Чтобы загрузить и правильно заменить файл, выполните следующие действия:

  1. Найдите версию операционной системы Windows в нижеприведенном списке «Загрузить файлы pkcs11.txt».
  2. Нажмите соответствующую кнопку «Скачать», чтобы скачать версию файла Windows.
  3. Скопируйте этот файл в соответствующее расположение папки Mozilla Thunderbird:

    Windows 10: C:UsersTesterDocumentsFirefoxPortableDataprofile
    Windows 10: C:UsersTesterAppDataRoamingMozillaFirefoxProfilesza4grs9g.default-beta
    Windows 10: C:UsersTesterAppDataRoamingMozillaFirefoxProfilesq5zeb2xq.default-release
    Windows 10: C:UsersTesterAppDataRoamingThunderbirdProfileshuaunoht.default-release

  4. Перезагрузите компьютер.

Если этот последний шаг оказался безрезультативным и ошибка по-прежнему не устранена, единственно возможным вариантом остается выполнение чистой установки Windows 10.

СОВЕТ ОТ СПЕЦИАЛИСТА: Мы должны подчеркнуть, что переустановка Windows является достаточно длительной и сложной задачей для решения проблем, связанных с pkcs11.txt. Во избежание потери данных следует убедиться, что перед началом процесса вы создали резервные копии всех важных документов, изображений, установщиков программного обеспечения и других персональных данных. Если вы в настоящее время не создаете резервных копий своих данных, вам необходимо сделать это немедленно.

Скачать файлы pkcs11.txt (проверено на наличие вредоносного ПО — отсутствие 100 %)

ВНИМАНИЕ! Мы настоятельно не рекомендуем загружать и копировать pkcs11.txt в соответствующий системный каталог Windows. Mozilla, как правило, не выпускает файлы Mozilla Thunderbird TXT для загрузки, поскольку они входят в состав установщика программного обеспечения. Задача установщика заключается в том, чтобы обеспечить выполнение всех надлежащих проверок перед установкой и размещением pkcs11.txt и всех других файлов TXT для Mozilla Thunderbird. Неправильно установленный файл TXT может нарушить стабильность работы системы и привести к тому, что программа или операционная система полностью перестанут работать. Действовать с осторожностью.

Файлы, относящиеся к pkcs11.txt

Файлы TXT, относящиеся к pkcs11.txt

Имя файла Описание Программа (версия) Размер файла (байты) Расположение файла
0.0.filtertrie.interme… Plain Text Mozilla Thunderbird 68.2.0 32614 C:UsersTesterAppDataLocalPackagesMicrosof…
SiteSecurityServiceSta… Plain Text Mozilla Thunderbird 68.2.0 131 C:UsersTesterAppDataRoamingThunderbirdPro…
0.1.filtertrie.interme… Plain Text Mozilla Thunderbird 68.2.0 5 C:UsersTesterAppDataLocalPackagesMicrosof…
AppCache13217812697907… Plain Text Mozilla Thunderbird 68.2.0 87792 C:UsersTesterAppDataLocalPackagesMicrosof…
AppCache13217812650369… Plain Text Mozilla Thunderbird 68.2.0 87792 C:UsersTesterAppDataLocalPackagesMicrosof…

Другие файлы, связанные с pkcs11.txt

Имя файла Описание Программа (версия) Размер файла (байты) Расположение файла
CBS.log Log Mozilla Thunderbird 68.2.0 986946 C:WindowsLogsCBS
setupact.log Log Mozilla Thunderbird 68.2.0 44626 C:WindowsLogsDPX
setupact.log Log Mozilla Thunderbird 68.2.0 16082 C:WindowsSystem32SysprepPanther
api-ms-win-core-sysinf… ApiSet Stub DLL Microsoft® Windows® Operating System (10.0.17134.12) 19064 C:UsersTesterAppDataLocalMicrosoftOneDriv…
diagwrn.xml Extensible Markup Language Mozilla Thunderbird 68.2.0 5718 C:WindowsSystem32SysprepPanther

Вы скачиваете пробное программное обеспечение. Для разблокировки всех функций программного обеспечения требуется покупка годичной подписки, стоимость которой оставляет 39,95 долл. США. Подписка автоматически возобновляется в конце срока (Подробнее). Нажимая кнопку «Начать загрузку» и устанавливая «Программное обеспечение», я подтверждаю, что я прочитал (-а) и принимаю Лицензионное соглашение и Политику конфиденциальности компании Solvusoft.

Описание проблемы.
Для работы с ЕГАИС используется носитель JaCarta PKI/ГОСТ/SE. Часто один из разделов блокируется (раздел PKI). В этом случае дальнейшая работа с ЕГАИС невозможна.

Причина блокировки
– частое обращение универсального транспортного модуля к носителю JaCarta. При десяти неудачных попытках авторизации, носитель блокирует раздел и исключает дальнейшую работу.

Решить проблему можно двумя способами:

  1. Обратиться в удостоверяющий центр, который выдал носитель.
  2. Самостоятельно разблокировать носитель JaCarta по инструкции.

Инструкция на примере Microsoft Windows 10.

Пошаговая инструкция как разблокировать PKI раздел

Шаг 1. Переключение в режим администрирования

В меню «Пуск» найдите приложение «Единый клиент JaCarta» и откройте его.

Рис. 1. Единый клиент JaCarta

Откроется рабочая область программы.

Рис. 2. Переключение в режим администрирования

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

Рис. 3. Информация о токене

Шаг 2. Проверка блокировки PKI раздела

Чтобы понять, что раздел PKI действительно заблокирован, нажмите во вкладке «Информация о токене» на ссылку «Полная информация…».

Откроется «Подробная информация о токене». В новом окне найдите раздел «Информация о приложении PKI». Если статус в строке «PIN-код» — «Заблокирован», то закройте окно и перейдите к следующему пункту инструкции.

Рис. 4. Подробная информация о токене

Шаг 3. Разблокировка PKI раздела

Перейдите на вкладку «PKI». В панели «Операции с приложением» выберите пункт «Разблокировать PIN-код пользователя…».

Откроется окно «Разблокировка PIN-кода пользователя», в котором укажите:

  1. Текущий PIN-код администратора – по умолчанию 00000000;
  2. Новый PIN-код пользователя – по умолчанию 11111111;
  3. Подтверждение кода (имеется ввиду PIN-кода пользователя).

Рис. 6. Разблокировка PIN-кода пользователя

После указания PIN-кодов, нажмите «Выполнить».

Если все введено корректно, появится уведомление. Нажмите «ОК» для завершения.

Рис. 7. Уведомление об успешной разблокировке

Перейдите на вкладку «Информация о токене» и нажмите на ссылку «Полная информация» для проверки текущего статуса приложения PKI. Статус должен быть «Установлен».

Рис. 8. Проверка статуса

Если статус изменился, разблокировка завершена.

Приветствую, читатель!

По общению с некоторыми активно интересующимися читателями, я решил повторить свой «поисковой» эксперимент, который я делал, когда писал первые обзорные материалы на темы токенов. На этот раз я решил собрать в кучу неудачные опыты использования токенов, собрать ошибки Jacarta. Пишу сразу с конкретикой, так как думаю сделать разные подборки для каждой из марки. Начнем с лидера рынка, компания Аладдин Р.Д. и их продукт Jacarta, токен, который используется именно для ЕГАИС.

Чего не будет в этом посте:

1. я не буду давать решения для ошибок Jacarta, потому что каждая ситуация индивидуальна.

2.Может быть и так, что Джакарта-токен не причина ошибки. Это может быть УТМ и т.д. Поэтому каждый случай надо разбирать в отдельность

3.Умножение ошибок, дабы очернить продукт. Моя задача дать предельно стороннюю сводку того, с чем чаще всего стакиваются пользователи Jacarta токена в ЕГАИСе.

Подборка и систематизация отзывов о Джакарте

В прошлый раз мое исследование было ограниченно официальным форумом ЕГАИС (http://egais2016.ru/), сейчас я расширил спектр изучения форумов, чтобы сделать материал более обширным.

Итак, Джакарта-токен для ЕГАИС будет анализироваться по отзывам со следующих источников:

    Естественно, боле всего результатов обнаружилось на форуме ЕГАС

    Итого, по запросу вышло у нас 630 сообщений

    Нашлось 3 толстых ветки

    Например, вот случай, когда полетело подряд 8 JaCarta-токенов
    из-за, цитирую:

    «Ошибка 0х00000006 в разделе PKI при попытке форматирования. Либо джакарта просто не определяется как устройство. Обновляли клиент до версии 2,9. Пробовали через jacarta format. Ни один способ ни разу не помог»

    Проблема, когда не система просто не видит Jacarta, действительно серьезная и самая, пожалуй, распространенная. Другой вопрос в том, что причин появления этой ошибки могут быть различные нарушения.

    Еще одна обнаруженная ошибка, когда опять-таки Джакарта не определяется, устройства не видят Jacarta. Забавно отметить, что Аладдин дает ответные письма по негодованиям пользователей, но по другой проблеме =)))) Но дают же! Это важно.

    Частенько ошибки при обнаружении и инсталляции, но там могут быть и проблемы дистрибутивов УТМ, что тоже очень часто происходит. Я внимательно читаю все ветки и поэтому будьте уверены, не буду указывать тут не существующих ошибок для Jacarta. Хотя тут вопрос весьма сложный, так как когда система не видит Jacarta, это может быть обоюдная пролема.

    В одной из уже указанных веток есть вот такой интересный коммент

    А что теперь делать пользователям Jacarta токена, когда связи между Жемальто и Аладдином расторгнуты?

    На форуме egaisa.net

    Нашлось 5 веток обсуждений

    В основном типовые ошибки при инициализации работы, а также когда уже все настройки сделаны, непостоянная работа Джакарты. Также часты ошибки после обновлений, когда система не находит или не видит Jacarta

    Если почитать форумы более внимательно, то выйдет, что на начальном этапе всем впаривали Jacarta токен для ЕГАИСА, не вникая в подробности и вообще не просвещая клиентов, что не только Джакарта может быть… Но об этом мы уже не раз говорили, а вы можете убедиться.

    Давайте вернемся к ЕГАИС форуму.

    Всего у нас ответов по поисковику 630 за все время работы. Естественно проблемы более чем годичной давности рассматривать нет смысла.

    Например, из самых частых ошибок

    1. Ошибки при попытке формирования сертификата RSA
    2. Ошибки синхронизации с УТМ
    3. Ошибка при обновлении
    4. Ошибка 610
    5. Ошибка обнаружения Jacarta

    Почему у Джакарта плохие отзывы?

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

    В следующей серии поговорим о Рутокене, смарт-картах и других продуктах СКЗИ.

    Спасибо, что остаетесь на связи.

    Все функции из реализации стандарта PKCS#11 возвращают различные коды ошибок. Все возвращаемые коды ошибок делятся на две большие группы:

    Все функции из реализации стандарта PKCS#11 возвращают специальные коды ошибок (определяются производителем).

    Все функции из реализации расширения стандарта PKCS#11 возвращают специальные коды ошибок (определяются производителем).

    Стандартные коды ошибок

    В силу особенностей реализации библиотек rtPKCS11 и rtPKCS11ECP некоторые стандартные функции могут вернуть стандартный код ошибки PKCS#11, не входящий в список допустимых для данной функции. Подобная ситуация является исключением. Стандартные коды ошибок, возвращаемые каждой функцией в исключительных ситуациях, перечислены в описании для каждой функции отдельно.

    В таблице 2.29 приведен список кодов ошибок стандарта PKCS#11 и их описаний, поддерживаемых устройствами Рутокен. Подробную информацию по каждому коду ошибки можно найти в стандарте (английский язык) или приложении (русский язык).

    Таблица
    2.29
    . Коды ошибок стандарта

    Код ошибки

    Описание

    CKR_ARGUMENTS_BAD

    Недопустимый аргумент

    CKR_ATTRIBUTE_READ_ONLY

    Невозможно установить или изменить значение атрибута приложением

    CKR_ATTRIBUTE_SENSITIVE

    Атрибут недоступен для чтения

    CKR_ATTRIBUTE_TYPE_INVALID

    Некорректный тип атрибута

    CKR_ATTRIBUTE_VALUE_INVALID

    Некорректное значение атрибута

    CKR_BUFFER_TOO_SMALL

    Размер заданного буфера является недостаточным для вывода результатов выполнения функции

    Библиотека не поддерживает блокировку для защиты потоков; возвращается только при вызове функции C_Initialize

    CKR_CRYPTOKI_ALREADY_INITIALIZED

    Библиотека уже инициализирована (предыдущий вызов функции C_Initialize
    не был сопровожден соответствующим вызовом функции С_Finalize
    ); возвращается только при вызове функции C_Initialize

    CKR_CRYPTOKI_NOT_INITIALIZED

    Выполнение функции невозможно, так как библиотека не инициализирована; возвращается только при вызове любой функции, за исключением C_Initialize
    иС_Finalize

    CKR_DATA_INVALID

    Некорректные входные данные для выполнения криптографической операции

    CKR_DATA_LEN_RANGE

    Входные данные имеют некорректный размер для выполнения криптографической операции

    CKR_DEVICE_ERROR

    Ошибка при обращении к токену или слоту

    CKR_DEVICE_MEMORY

    Недостаточно памяти токена для выполнения запрошенной функции

    CKR_DEVICE_REMOVED

    Токен был удален из слота во время выполнения функции

    CKR_DOMAIN_PARAMS_INVALID

    Функции переданы некорректные или не поддерживаемые параметры домена

    CKR_ENCRYPTED_DATA_INVALID

    Для операции расшифрования переданы некорректно зашифрованные данные

    CKR_ENCRYPTED_DATA_LEN_RANGE

    Для операции расшифрования переданы зашифрованные данные некорректного размера

    CKR_FUNCTION_CANCELED

    Выполнение функции было прервано

    CKR_FUNCTION_FAILED

    При выполнении функции возник сбой

    CKR_FUNCTION_NOT_SUPPORTED

    Запрашиваемая функция не поддерживается библиотекой

    CKR_FUNCTION_REJECTED

    Запрос на подпись был отклонен пользователем

    CKR_GENERAL_ERROR

    Критическая ошибка, связанная с аппаратным обеспечением

    Недостаточно памяти для выполнения функции на рабочей станции, где установлена библиотека

    CKR_KEY_FUNCTION_NOT_PERMITTED

    Атрибуты ключа не позволяют выполнить операцию

    CKR_KEY_HANDLE_INVALID

    Функции передан некорректный идентификатор (хэндл) ключа

    CKR_KEY_NOT_WRAPPABLE

    Невозможно зашифровать ключ

    CKR_KEY_SIZE_RANGE

    Недопустимый размер ключа

    CKR_KEY_TYPE_INCONSISTENT

    Тип ключа не соответствует данному механизму

    CKR_KEY_UNEXTRACTABLE

    Невозможно зашифровать ключ, так как атрибут CKA_UNEXTRACTABLE установлен в значение CK_TRUE

    CKR_MECHANISM_INVALID

    Указан неправильный механизм для выполнения криптографической операции

    CKR_MECHANISM_PARAM_INVALID

    Указаны неправильные параметры механизма для выполнения криптографической операции

    CKR_NEED_TO_CREATE_THREADS

    Программа не поддерживает внутренних методов операционной системы для создания новых потоков

    CKR_OBJECT_HANDLE_INVALID

    Функции передан некорректный идентификатор (хэндл) объекта

    CKR_OPERATION_ACTIVE

    Выполнение операции невозможно, поскольку такая операция уже выполняется

    CKR_OPERATION_NOT_INITIALIZED

    Невозможно выполнить операцию в этой сессии

    Срок действия PIN-кода истек

    CKR_PIN_INCORRECT

    Функции передан PIN-код, который не соответствует тому, который сохранен на токене

    Значение PIN-кода содержит недопустимые символы

    CKR_PIN_LEN_RANGE

    Недопустимая длина PIN-кода

    CKR_RANDOM_NO_RNG

    Данный токен не поддерживает генерацию случайных чисел

    CKR_SESSION_CLOSED

    Сессия была закрыта во время выполнения функции

    CKR_SESSION_COUNT

    Достигнуто предельное количество открытых сессий для данного токена

    CKR_SESSION_EXISTS

    Сессия с токеном уже открыта и поэтому токен не может быть инициализирован

    CKR_SESSION_HANDLE_INVALID

    Функции передан некорректный идентификатор (хэндл) сеанса

    CKR_SESSION_PARALLEL_NOT_SUPPORTED

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

    CKR_SESSION_READ_ONLY

    Невозможно выполнить действие, поскольку это сессия R/O

    CKR_SESSION_READ_WRITE_SO_EXISTS

    Уже открыта сессия R/W, поэтому открыть сессию R/O невозможно

    CKR_SIGNATURE_INVALID

    Неверное значение ЭЦП

    CKR_SIGNATURE_LEN_RANGE

    Значение ЭЦП неверно по длине

    CKR_SLOT_ID_INVALID

    Слота с данным ID не существует

    CKR_TEMPLATE_INCOMPLETE

    Для создания объекта недостаточно атрибутов

    CKR_TEMPLATE_INCONSISTENT

    Заданные атрибуты противоречат друг другу

    CKR_TOKEN_NOT_PRESENT

    Токен отсутствует в слоте во время вызова функции

    CKR_UNWRAPPING_KEY_HANDLE_INVALID

    Функции передан некорректный идентификатор (хэндл) ключа дешифрования

    CKR_UNWRAPPING_KEY_SIZE_RANGE

    Недопустимый размер ключа дешифрования

    CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT

    Тип ключа дешифрования не соответствует данному механизму

    CKR_USER_ALREADY_LOGGED_IN

    CKR_USER_ANOTHER_ALREADY_LOGGED_IN

    CKR_USER_NOT_LOGGED_IN

    CKR_USER_PIN_NOT_INITIALIZED

    Не инициализирован PIN-код пользователя

    CKR_USER_TOO_MANY_TYPES

    CKR_USER_TYPE_INVALID

    Задан некорректный тип пользователя

    CKR_WRAPPED_KEY_INVALID

    Задан некорректный зашифрованный ключ

    CKR_WRAPPED_KEY_LEN_RANGE

    Задана некорректная длина зашифрованного ключа

    CKR_WRAPPING_KEY_HANDLE_INVALID

    Функции передан некорректный идентификатор (хэндл) ключа шифрования

    CKR_WRAPPING_KEY_SIZE_RANGE

    Недопустимый размер ключа шифрования

    CKR_WRAPPING_KEY_TYPE_INCONSISTENT

    Тип ключа шифрования не соответствует данному механизму

    Специальные коды ошибок

    В таблице 2.30 приведен список всех расширенных кодов ошибок стандарта PKCS #11 вместе с их описанием. Расширенные коды ошибок могут возвращать как стандартные функции, так и функции расширения.

    Таблица 2.30
    . Коды ошибок стандарта
    PKCS #11, поддерживаемые устройствами Рутокен

    Код ошибки

    Описание

    CKR_CORRUPTED_MAPFILE

    Данная ошибка возвращается при повреждении MAP-файла (при считывании MAP-файла было обнаружено, что тег заголовка MAP-файла (2 байта) является недопустимым)

    CKR_RTPKCS11_DATA_CORRUPTED

    Данная ошибка возвращается, если было обнаружено нарушение целостности данных на токене (при считывании файла, содержащего объект PKCS#11, было обнаружено, что тег заголовка объекта (2 байта) является недопустимым)

    CKR_WRONG_VERSION_FIELD

    Данная ошибка возвращается, если файл, содержащий объект PKCS#11, имеет некорректную версию (при считывании любого файла (MAP-файла или файла, содержащего объект PKCS#11) было обнаружено, что версия заголовка (4 байта) является недопустимой)

    CKR_WRONG_
    PKCS1_
    ENCODING

    Данная ошибка возвращается, если расшифрованное сообщение имеет некорректную форму

    CKR_RTPKCS11_RSF_DATA_CORRUPTED

    Данная ошибка возвращается, если попытка использовать RSF-файл завершилась неудачей

    Добрый день!. Последние два дня у меня была интересная задача по поиску решения на вот такую ситуацию, есть физический или виртуальный сервер, на нем установлена наверняка многим известная КриптоПРО. На сервер подключен , который используется для подписи документов для ВТБ24 ДБО
    . Локально на Windows 10 все работает, а вот на серверной платформе Windows Server 2016 и 2012 R2, Криптопро не видит ключ JaCarta
    . Давайте разбираться в чем проблема и как ее поправить.

    Описание окружения

    Есть виртуальная машина на Vmware ESXi 6.5, в качестве операционной системы установлена Windows Server 2012 R2 . На сервере стоит КриптоПРО 4.0.9944, последней версии на текущий момент. С сетевого USB хаба, по технологии USB over ip , подключен ключ JaCarta. Ключ в системе видится
    , а вот в КриптоПРО нет.

    Алгоритм решения проблем с JaCarta

    КриптоПРО очень часто вызывает различные ошибки в Windows, простой пример (Windows installer service could not be accessed). Вот так вот выглядит ситуация, когда утилита КриптоПРО не видит сертификат в контейнере.

    Как видно в утилите UTN Manager ключ подключен, он видится в системе в смарт картах в виде Microsoft Usbccid (WUDF) устройства, но вот CryptoPRO, этот контейнер не определяет и у вас нет возможности установить сертификат. Локально токен подключали, все было то же самое. Стали думать что сделать.

    Возможные причины с определением контейнера

    1. Во первых, это проблема с драйверами, например, в Windows Server 2012 R2, JaCarta в идеале должна определяться в списке смарт карт как JaCarta Usbccid Smartcard, а не Microsoft Usbccid (WUDF)
    2. Во вторых если устройство видится как Microsoft Usbccid (WUDF), то версия драйверов может быть устаревшей, и из-за чего ваши утилиты будут не определять защищенный USB носитель.
    3. Устарелая версия CryptoPRO

    Как решить проблему, что криптопро не видит USB ключ?

    Создали новую виртуальную машину и стали ставить софт все последовательно.

    Перед установкой любого программного обеспечения работающего с USB носителями на которых находятся сертификаты и закрытые ключи. Нужно ОБЯЗАТЕЛЬНО
    отключить токен, если воткнут локально, то отключаем его, если по сети, разрываем сессию

    • Первым делом обновляем вашу операционную систему , всеми доступными обновлениями, так как Microsoft исправляет много ошибок и багов, в том числе и драйверами.
    • Вторым пунктом является, в случае с физическим сервером, установить все свежие драйвера на материнскую плату и все периферийное оборудование.
    • Далее устанавливаете Единый Клиент JaCarta.
    • Устанавливаете свежую версию КриптоПРО

    Установка единого клиента JaCarta PKI

    Единый Клиент JaCarta
    — это специальная утилита от компании «Аладдин», для правильной работы с токенами JaCarta. Загрузить последнюю версию, данного программного продукта, вы можете с официального сайта, или у меня с облака, если вдруг, не получиться с сайта производителя.

    Далее полученный архив вы распаковываете и запускаете установочный файл, под свою архитектуру Windows , у меня это 64-х битная. Приступаем к установке Jacarta драйвера. Единый клиент Jacarta, ставится очень просто (НАПОМИНАЮ ваш токен в момент инсталляции, должен быть отключен). На первом окне мастера установки, просто нажимаем далее.

    Принимаем лицензионное соглашение и нажимаем «Далее»

    Чтобы драйвера токенов JaCarta у вас работали корректно, достаточно выполнить стандартную установку.

    Если выберете «Выборочную установку», то обязательно установите галки:

    • Драйверы JaCarta
    • Модули поддержки
    • Модуль поддержки для КриптоПРО

    Через пару секунд, Единый клиент Jacarta, успешно установлен.

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

    После установки JaCarta PKI, нужно установить КриптоПРО, для этого заходите на официальный сайт.

    https://www.cryptopro.ru/downloads

    На текущий момент самая последняя версия КриптоПро CSP 4.0.9944. Запускаем установщик, оставляем галку «Установить корневые сертификаты» и нажимаем «Установить (Рекомендуется)»

    Инсталляция КриптоПРО будет выполнена в фоновом режиме, после которой вы увидите предложение, о перезагрузке браузера, но я вам советую полностью перезагрузиться.

    После перезагрузки подключайте ваш USB токен JaCarta. У меня подключение идет по сети, с устройства DIGI, через . В клиенте Anywhere View, мой USB носитель Jacarta, успешно определен, но как Microsoft Usbccid (WUDF), а в идеале должен определиться как JaCarta Usbccid Smartcard, но нужно в любом случае проверить, так как все может работать и так.

    Открыв утилиту «Единый клиент Jacarta PKI», подключенного токена обнаружено не было, значит, что-то с драйверами.

    Microsoft Usbccid (WUDF) — это стандартный драйвер Microsoft, который по умолчанию устанавливается на различные токены, и бывает, что все работает, но не всегда. Операционная система Windows по умолчанию, ставит их в виду своей архитектуры и настройки, мне вот лично в данный момент такое не нужно. Что делаем, нам нужно удалить драйвера Microsoft Usbccid (WUDF) и установить драйвера для носителя Jacarta.

    Откройте диспетчер устройств Windows, найдите пункт «Считыватели устройств смарт-карт (Smart card readers)» щелкните по Microsoft Usbccid (WUDF) и выберите пункт «Свойства». Перейдите на вкладку «Драйвера» и нажмите удалить (Uninstall)

    Согласитесь с удалением драйвера Microsoft Usbccid (WUDF).

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

    После перезагрузки системы, вы можете увидеть установку устройства и драйверов ARDS Jacarta.

    Откройте диспетчер устройств, вы должны увидеть, что теперь ваше устройство определено, как JaCarta Usbccid Smartcar и если зайти в его свойства, то вы увидите, что смарт карта jacarta, теперь использует драйвер версии 6.1.7601 от ALADDIN R.D.ZAO, так и должно быть.

    Если открыть единый клиент Jacarta, то вы увидите свою электронную подпись, это означает, что смарт карта нормально определилась.

    Открываем CryptoPRO, и видим, что криптопро не видит сертификат в контейнере, хотя все драйвера определились как нужно. Есть еще одна фишка.

    1. В RDP сессии вы не увидите свой токен, только локально, уж такая работа токена, либо я не нашел как это поправить. Вы можете попробовать выполнить рекомендации по устранению ошибки «Не возможно подключиться к службе управления смарт-картами».
    2. Нужно снять одну галку в CryptoPRO

    ОБЯЗАТЕЛЬНО снимите галку «Не использовать устаревшие cipher suite-ы» и перезагрузитесь
    .

    После этих манипуляций у меня КриптоПРО увидел сертификат и смарт карта jacarta стала рабочей, можно подписывать документы.

    Еще можете в устройствах и принтерах, увидеть ваше устройство JaCarta,

    Если у вас как и у меня, токен jacarta установлен в виртуальной машине, то вам придется устанавливать сертификат, через console виртуальной машины, и так же дать на нее права ответственному человеку. Если это физический сервер, то там придется давать права на порт управления , в котором так же есть виртуальная консоль.

    Когда вы установили все драйвера для токенов Jacarta, вы можете увидеть при подключении по RDP и открытии утилиты «Единый клиент Jacarta PKI» вот такое сообщение с ошибкой:

    1. Не запущена служба смарт-карт на локальной машине. Архитектурой RDP-сессии, разработанной Microsoft, не предусмотрено использование ключевых носителей, подключенных к удалённому компьютеру, поэтому в RDP-сессии удалённый компьютер использует службу смарт-карт локального компьютера. Из этого следует что, запуска службы смарт-карт внутри RDP-сессии недостаточно для нормальной работы.
    2. Служба управления смарт-картами на локальном компьютере запущена, но недоступна для программы внутри RDP-сессии из-за настроек Windows и/или RDP-клиента.

    Как исправить ошибку «Не возможно подключиться к службе управления смарт-картами».

    • Запустите службу смарт-карт на локальной машине, с которой вы инициируете сеанс удалённого доступа. Настройте её автоматический запуск при старте компьютера.
    • Разрешите использование локальных устройств и ресурсов во время удалённого сеанса (в частности, смарт-карт). Для этого, в диалоге «Подключение к удалённому рабочему столу» в параметрах выберите вкладку «Локальные ресурсы», далее в группе «Локальные устройства и ресурсы» нажмите кнопку «Подробнее…», а в открывшемся диалоге выберите пункт «Смарт-карты» и нажмите «ОК», затем «Подключить».

    • Убедитесь в сохранности настроек RDP-подключения. По умолчанию они сохраняются в файле Default.rdp в каталоге «Мои Документы» Проследите, чтобы в данном файле присутствовала строчка «redirectsmartcards:i:1».
    • Убедитесь в том, что на удалённом компьютере, к которому вы осуществляете RDP-подключение, не активирована групповая политика
      -[Конфигурация компьютераадминистративные шаблоныкомпоненты windowsслужбы удалённых рабочих столовузел сеансов удалённых рабочих столовперенаправление устройств и ресурсовНе разрешать перенаправление устройства чтения смарт-карт]. Если она включена (Enabled), то отключите её, и перегрузите компьютер.
    • Если у вас установлена Windows 7 SP1 или Windows 2008 R2 SP1 и вы используете RDC 8.1 для соединения с компьютерами под управлением Windows 8 и выше, то вам необходимо установить обновление для операционной системы https://support.microsoft.com/en-us/kb/2913751

    Вот такой вот был траблшутинг по настройке токена Jacarta, КриптоПРО на терминальном сервере, для подписи документов в ВТБ24 ДБО. Если есть замечания или поправки, то пишите их в комментариях.

    вопросы

    Из нашей статьи вы узнаете:

    Помимо открытого и закрытого ключа электронной подписи, в ЕГАИС пользователю понадобится RSA-ключ. Он защищает соединение между пользователем и информационной системой. Генерируется на сайте egais.ru. Случается, что при его создании возникает ошибка: «Вставьте смарт-карту» или «Подключите смарт-карту».

    Расскажем пошагово, как убрать ошибки Рутокен: Вставьте смарт-карту или Подключите смарт-карту на примере Рутокен ЭЦП 2.0.

    Описание ошибок Рутокен

    Если при генерации уведомление сообщает, что смарт-карту нужно вставить, текст ошибки содержит следующее:

    «Обнаружена смарт-карта, но она не может использоваться для текущей операции. Возможно, для используемой смарт-карты нет драйвера или сертификата»

    
смарт-карта1

    Если предлагается выбрать устройство чтения смарт-карт, то в описании изложен данный текст:

    «Подключите смарт-карту. Выберите устройство чтения смарт-карт. Смарт-карта не может выполнить запрошенную операцию либо операция требует другой смарт-карты».

    
Подключите смарт-карту2

    Чтобы решить проблему, необходимо проверить настройки и выполнить определённые действия.

    Решение ошибки Рутокен: Вставьте или подключите смарт-карту

    Чтобы решить проблему, необходимо сделать следующее:

    1. Включить поддержку ЕГАИС на Рутокен.
    2. Удалить следы RSA-ключей.
    3. Проверить Диспетчер устройств на наличие ошибки 28.
    4. Удалить Единый клиент JaCarta.
    5. Переназначить криптопровайдер.
    6. Переустановить минидрайвер.

    Далее подробное описание действий по каждому пункту.

    Включение поддержки ЕГАИС на Рутокен

    В настройках Рутокен ЭЦП 2.0 должен быть выбран и активирован криптопровайдер Microsoft Base Smart Card Crypto Provider.

    Для этого необходимо:

    • Открыть меню «Пуск». Перейти в «Настройки», далее «Панель управления» и «Панель управления Рутокен».
    • Во вкладке «Настройки», в поле «Настройки криптопровайдера» нажать «Настроить криптопровайдер».
    • 
«Настройки»3

    • В окне «Настройки криптопровайдера» напротив «Семейство Рутокен ЭЦП» выбрать «Microsoft Base Smart Card Provider».
    • 
«Семейство Рутокен ЭЦП»4

    • Нажать «ОК», чтобы сохранить изменения.

    Удаление следов RSA-ключей

    При предыдущей неудачной попытке генерации RSA-ключа носитель Рутокен может содержать его следы. Чтобы решить проблему, в первую очередь нужно скачать архив DeleteRSA1.0.3.1.zip.

    Далее пользователь должен:

    • Разархивировать содержимое.
    • Убедиться, что на компьютере не установлены другие ключи Рутокен, кроме проблемного.
    • Запустить утилиту DeleteRSA1.0.3.1.zip. Программа удалит все RSA-ключи. После этого она автоматически закроется.
    • Выполнить новую генерацию RSA-ключа.

    Важно! Представленную утилиту нельзя включать, если на компьютере установлен криптопровайдер Валидата CSP. Если другого ПК нет, то перед запуском необходимо экспортировать файл сертификата ГОСТ, а после работы утилиты импортировать сертификат обратно на Рутокен.

    Проверка Диспетчера устройств на наличие ошибки 28

    Чтобы установить наличие ошибки, нужно перейти в «Диспетчер устройств». В разделе «Другие устройства» проверить наличие «Смарт-карта», которая содержит ошибку «Для устройства не установлены драйверы (Код 28)».

    
«Диспетчер устройств»5

    Чтобы решить проблему, нужно назначить драйвер смарт-карте:

    1. Нажать правой кнопкой мыши на «Смарт-карта».
    2. Выбрать «Обновить драйверы».
    3. 
«Обновить драйверы»6

    4. Далее нажать «Выполнить поиск драйверов на этом компьютере (Поиск и установка драйверов вручную)».
    5. 
Выполнить поиск7

    6. Нажать на «Выбрать драйвер из списка уже установленных драйверов».
    7. 
Выбрать драйвер8

    8. Выбрать «Фильтр смарт-карт» и нажать два раза «Далее», потом «Да».
    9. 
смарт-карт9

      
«Далее»10

      
«Да»11

    10. Пользователь получит уведомление по завершению операции. Нажать «Закрыть».
    11. 
«Закрыть»12

    После данных действий необходимо произвести попытку генерации RSA-ключа.

    Удаление Единого клиента JaCarta

    Установленный на ПК «Единый Клиент JaCarta» может внести изменения в настройках криптопровайдера. В связи с этим и появляется некорректная генерация RSA-сертификата для Рутокен ЭЦП 2.0. Для решения проблемы нужно удалить данный компонент. А после генерации RSA-ключа можно установить его заново.

    Переназначение криптопровайдера

    Переназначение криптопровайдера осуществляется в программе «Панель управления Рутокен». Требуется выполнить следующее:

    • Во вкладке «Настройки», в разделе «Настройки криптопровайдера» нажать «Настройка».
    • 
«Настройки»13

    • Напротив Рутокен ЭЦП (2.0 / PKI / BT) выбрать любой криптопровайдер, кроме «Microsoft Base Smart Card Crypto Provider». Например, «Aktiv ruToken CSP v1.0» или «CryptoPRO CSP».
    • Нажать «Применить».
    • 
«Применить»14

    • После этого поставить обратно «Microsoft Base Smart Card Crypto Provider» и нажать «Применить».
    • 
«Применить»15

    После этого можно попробовать сгенерировать новый RSA-сертификат.

    Переустановка минидрайвера

    Одним из путей решения может являться переустановка минидрайвера. Для этого необходимо:

    1. Открыть «Диспетчер устройств» и выбрать раздел «Смарт-карта».
    2. Удалить строку «Aktiv Co. Rutoken Minidriver». Если строки с таким названием нет, она может отображаться как «Неизвестная смарт-карта».
    3. 
«Неизвестная смарт-карта»16

    4. Потом перейти во вкладку «Действие» и нажать «Обновить конфигурацию оборудования».
    5. 
«Действие»17

    Если предложенные способы решения не помогли, следует обратиться в службу технической поддержки ЕГАИС.

  1. Рутокен код ошибки 259
  2. Рутокен код ошибки 0х80100017
  3. Рутокен код ошибки 0х80070643
  4. Рутокен код ошибки 0х6
  5. Рутокен код ошибки 0x80090029