Найти тему
Красная Флэшка

Квалифицированная электронная подпись в macOS

Оглавление

⏱️ Время выполнения: от 1 часа
🖥️ Операционная система: Mac OS 10.9 и новее
📀 Дополнительное ПО: КриптоПро CSP 5.0 R3; Chromium GOST.
📅 Актуально на 07 января 2023 года

По материалам статьи:
Квалифицированная электрон... @Хабр
FYI. Статья написана в 2019 году, последний раз правилась автором в ноябре 2021. Мои правки актуальны на январь 2023.

Введение

Благодаря сертификату квалифицированной электронной подписи (КЭП) на USB-токене можно работать на электронных торговых площадках и в ЕИС "Закупки"; удаленно заключить договор с контрагентом или дистанционным сотрудником; направить документы в суд; зарегистрировать онлайн-кассу; урегулировать задолженность по налогам и подать декларацию в личном кабинете на nalog.gov.ru; узнать о задолженностях и предстоящих проверках на Госуслугах.

Представленный ниже материал поможет работать с КЭП под macOS – без изучения форумов КриптоПро и установки виртуальной машины с Windows.

Вся информация ниже получена из авторитетных источников (КриптоПро #1, #2 и #3, Рутокен, Корус-Консалтинг, УФО Минкомсвязи), а скачивать ПО предлагается с доверенных сайтов. Автор является независимым консультантом и не связан ни с одной из упомянутых компаний. Следуя данной инструкции, всю ответственность за любые действия и последствия вы принимаете на себя.

I. Что нужно для работы с КЭП в macOS:

  1. КЭП на USB-токене (Рутокен, Esmart, JaCarta)
  2. Криптоконтейнер в формате КриптоПро
  3. КриптоПро CSP (версия не ниже 5.0 R3)
  4. Открытый сертификат должен храниться в контейнере закрытого ключа

Поддержка eToken и JaCarta в связке с КриптоПро под macOS чувствительна к конфигурации ПО и железа. Носитель Рутокен Lite – оптимальный выбор, стоит недорого, шустро работает и позволяет хранить до 15 ключей.

Криптопровайдеры VipNet, Signal-COM и ЛИССИ в macOS не поддерживаются. Преобразовать контейнеры никак не получится. КриптоПро CSP – оптимальный выбор.

Обычно (например при выпуске КЭП в ФНС) открытый сертификат хранится в контейнере закрытого ключа. При выпуске КЭП в других УЦ это нужно уточнить и запросить инструкцию по получению открытого ключа. Если в macOS это сделать не получается, то импортировать открытый ключ в закрытый контейнер можно самостоятельно средствами КриптоПро CSP под Windows.

II. Устанавливаем и настраиваем КЭП в macOS

  • все загружаемые файлы скачиваются в каталог по умолчанию: /Downloads/;
  • во всех установщиках ничего не меняем, все оставляем по умолчанию;
  • если macOS выводит предупреждение, что запускаемое ПО от неустановленного разработчика – нужно подтвердить запуск в системных настройках: System Preferences —> Security & Privacy —> Open Anyway;
  • если macOS запрашивает пароль пользователя и разрешение на управление компьютером – нужно ввести пароль и со всем согласиться.

1. Устанавливаем КриптоПро CSP

Регистрируемся на сайте КриптоПро и со страницы загрузок скачиваем и устанавливаем актуальную версию КриптоПро CSP для macOS – скачать.

2. Устанавливаем драйверы для токена

2.1 (при необходимости) Устанавливаем драйверы Рутокен lite

Драйверы для носителей включены в установочный файл КриптоПро CSP, но иногда нужно поставить вручную. Со страницы загрузок на сайте Рутокен скачиваем и устанавливаем Модуль поддержки Связки Ключей (KeyChain) – скачать.

Далее подключаем usb-токен, запускаем terminal и выполняем команду:

/opt/cprocsp/bin/csptest -card -enum

В ответе должно быть:

Aktiv Rutoken…
Card present…
[ErrorCode: 0x00000000]

2.2 (при необходимости) Устанавливаем дополнительные драйверы

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

2.3 (при необходимости) Mac с процессором Apple M1/M2

Данный пункт был актуален до выхода КриптоПро CSP 5.0 R3

На mac с процессором Apple M1/M2 возможны проблемы, для их решения необходимо сначала попробовать установить пакеты:

3. Устанавливаем сертификаты

3.1. (при необходимости) Удаляем все старые ГОСТовские сертификаты

Если ранее были попытки запустить КЭП под macOS, то необходимо почистить все ранее установленные сертификаты. Данные команды в terminal удалят только сертификаты КриптоПро и не затронут обычные сертификаты из Keychain в macOS.

sudo /opt/cprocsp/bin/certmgr -delete -all -store mroot
sudo /opt/cprocsp/bin/certmgr -delete -all -store uroot
/opt/cprocsp/bin/certmgr -delete -all

В ответе каждой команды должно быть:

No certificate matching the criteria

или

Deleting complete

3.2. (при необходимости) Устанавливаем корневые сертификаты

Обратите внимание, что корневые сертификаты регулярно обновляются и в статье могут быть ссылки на истекшие сертификаты.

Корневые сертификаты являются общими для всех КЭП, выданных любым удостоверяющим центром. Скачиваем со страницы загрузок УФО Минкомсвязи:

Устанавливаем командами в terminal:

sudo /opt/cprocsp/bin/certmgr -inst -store mroot -f ~/Downloads/4BC6DC14D97010C41A26E058AD851F81C842415A.cer
sudo /opt/cprocsp/bin/certmgr -inst -store mroot -f ~/Downloads/8CAE88BBFD404A7A53630864F9033606E1DC45E2.cer
sudo /opt/cprocsp/bin/certmgr -inst -store mroot -f ~/Downloads/0408435EB90E5C8796A160E69E4BFAC453435D1D.cer

Каждая команда должна возвращать:

Installing:

[ErrorCode: 0x00000000]

3.3. (при необходимости) Скачиваем сертификаты удостоверяющего центра

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

Альтернативно, сертификаты любого УЦ можно скачать с сайта УФО Минкомсвязи. Для этого в форме поиска нужно найти УЦ по названию, перейти на страницу с сертификатами и скачать все действующие сертификаты – то есть те, у которых в поле 'Действует' вторая дата еще не наступила. Скачивать по ссылке из поля 'Отпечаток'.

3.4. Устанавливаем сертификат с Рутокен

Команда в terminal:

/opt/cprocsp/bin/csptestf -absorb -certs

Команда должна вернуть:

OK.
[ErrorCode: 0x00000000]

3.5. Конфигурируем CryptoPro для работы с сертификатами ГОСТ Р 34.10-2012

Для корректной работы на nalog.ru с сертификатами, выдаваемыми с 2019 года, инструкция на сайте CryptoPro рекомендует:

Команды в terminal:

sudo /opt/cprocsp/sbin/cpconfig -ini '\cryptography\OID\1.2.643.7.1.1.1.1!3' -add string 'Name' 'GOST R 34.10-2012 256 bit'
sudo /opt/cprocsp/sbin/cpconfig -ini '\cryptography\OID\1.2.643.7.1.1.1.2!3' -add string 'Name' 'GOST R 34.10-2012 512 bit'

Команды ничего не возвращают.

4. Устанавливаем браузер

4.1 Устанавливаем браузер Chromium-GOST

Для работы с госпорталами потребуется специальная сборка браузера сhromium – Chromium-GOST скачать.

Скачиваем, устанавливаем копированием или drag&drop в каталог Applications. После установки принудительно закрываем Chromium-Gost командой из terminal и пока не открываем (работаем из Safari):

killall Chromium-Gost

Примечание: При использовании в качестве ключевого носителя облачного токена или простого USB-флеш накопителя Chromium-Gost необходимо запускать из Терминала с помощью команды:

/Applications/Chromium-Gost.app/Contents/MacOS/Chromium-Gost --no-sandbox

Подразумевается, что Chromium-Gost находится в папке с программами (Applications).

4.2 (при необходимости) Устанавливаем браузер Яндекс

Яндекс также является допустимым вариантом для работы с КЭП с поддержкой ГОСТ TLS.

Примечание:
При использовании внешнего ключевого носителя (не внутреннего диска компьютера) Яндекс.Браузер необходимо запускать из Терминала с помощью команды:

/Applications/Yandex.app/Contents/MacOS/Yandex --no-sandbox

Подразумевается, что Яндекс.Браузер находится в папке с программами (Applications).

5. Устанавливаем расширения для браузера

5.1 Расширения для браузера

  • Скачиваем и устанавливаем КриптоПро ЭЦП Browser plug-in – скачать.
  • Скачиваем и устанавливаем Плагин для работы с порталом госуслуг – скачать.

5.2. Настраиваем плагин для Госуслуг

Скачиваем корректный конфигурационный файл "ifc.cfg" для расширения Госуслуг для поддержки macOS и новых ЭЦП в стандарте ГОСТ2012.

Выполняем команды в terminal:

sudo rm /Library/Internet\ Plug-Ins/IFCPlugin.plugin/Contents/ifc.cfg
sudo cp ~/Downloads/ifc.cfg /Library/Internet\ Plug-Ins/IFCPlugin.plugin/Contents
sudo cp /Library/Google/Chrome/NativeMessagingHosts/ru.rtlabs.ifcplugin.json /Library/Application\ Support/Chromium/NativeMessagingHosts

Для Яндекс.Браузера также необходимо скопировать файл ru.rtlabs.ifcplugin.json из папки:

/Library/Google/Chrome/NativeMessagingHosts

в папку:

/Library/Application Support/Chromium/NativeMessagingHosts

5.3. Активируем расширения

Запускаем браузер Chromium-Gost и в адресной строке набираем:

chrome://extensions/

Включаем оба установленных расширения:

  • CryptoPro Extension for CAdES Browser Plug-in
  • Расширение для плагина Госуслуг

5.4. (при необходимости) Настраиваем расширение КриптоПро ЭЦП Browser plug-in

В адресной строке Chromium-Gost набираем:

/etc/opt/cprocsp/trusted_sites.html

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

https://*.cryptopro.ru
https://*.nalog.ru
https://*.nalog.gov.ru
https://*.gosuslugi.ru

Жмем “Сохранить”. Должна появиться зеленая плашка:

Список доверенных узлов успешно сохранен.

6. Проверяем что все работает

6.1. Заходим на тестовую страницу КриптоПро

В адресной строке Chromium-Gost набираем:

https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html

Должно выводиться “Плагин загружен”, а в списке ниже присутствовать ваш сертификат.
Выбираем сертификат из списка и жмем “Подписать”. Будет запрошен PIN-код сертификата. В итоге должно отобразиться

Подпись сформирована успешно

6.2. Заходим в Личный Кабинет на nalog.ru

По ссылкам с сайта nalog.ru зайти может не получиться, т.к. не будут пройдены проверки. Заходить нужно по прямым ссылкам:

6.3. Заходим на Госуслуги

При авторизации выбираем "Вход с помощью электронной подписи". В появившемся списке "Выбор сертификата ключа проверки электронной подписи" будут отображены все сертификаты, включая корневые и УЦ, нужно выбрать ваш с usb-токена и ввести PIN.

7. Что делать, если перестало работать

Переподключаем usb-токен и проверяем что он виден с помощью команды в terminal:

sudo /opt/cprocsp/bin/csptest -card -enum

Очищаем кэш браузера за все время, для чего в адресной строке Chromium-Gost набираем:

chrome://settings/clearBrowserData

Переустанавливаем сертификат КЭП с помощью команды в terminal:

/opt/cprocsp/bin/csptestf -absorb -certs

Если команды Cryptopro не отрабатывают (csptest и csptestf превратились в corrupted) – нужно переустановить Cryptopro.

III. Смена PIN-кода контейнера

Пользовательский PIN-код на Рутокен lite по умолчанию 12345678, и оставлять его в таком виде нежелательно.

Пользовательский PIN-код на Esmart и Jacarta по умолчанию 1234567890.

Требования к PIN-коду Рутокен: 16 символов максимально, может содержать только латинские буквы и цифры.

1. Выясняем название контейнера КЭП

На usb-токене и в других хранилищах может храниться несколько сертификатов, и нужно выбрать правильный. При вставленном usb-токене получаем список всех контейнеров в системе командой в terminal:

/opt/cprocsp/bin/csptest -keyset -enum_cont -fqcn -verifycontext

Если таких контейнеров выводится несколько – значит значит на токене записано несколько сертификатов, и вы в курсе какой именно вам нужен. Значение XXXXXXXX после слэша нужно скопировать и подставить в команду ниже. Команда должна вывести минимум 1 контейнер и вернуть

[ErrorCode: 0x00000000]

Нужный нам контейнер имеет вид

.\Aktiv Rutoken lite\XXXXXXXX

2. Смена PIN командой из terminal

/opt/cprocsp/bin/csptest -passwd -qchange -container "XXXXXXXX"

где **XXXXXXXX **– название контейнера, полученное на шаге 1 (обязательно в кавычках).

Появится диалог КриптоПро с запросом старого PIN-кода для доступа к сертификату, затем еще один диалог для ввода нового PIN-кода. Готово.

IV. Подпись файлов в macOS

В macOS файлы можно подписывать в ПО КриптоАрм, или несложной командой через terminal – бесплатно.

1. Выясняем хэш сертификата КЭП

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

/opt/cprocsp/bin/certmgr -list

Команда должна вывести минимум 1 сертификат вида:

Certmgr 1.1 © "Crypto-Pro", 2007-2018.
program for managing certificates, CRLs and stores
= = = = = = = = = = = = = = = = = = = =
1

Issuer: E=help@esphere.ru,… CN=ООО КОРУС Консалтинг СНГ…
Subject: E=sergzah@gmail.com,… CN=Захаров Сергей Анатольевич…
Serial: 0x0000000000000000000000000000000000
SHA1 Hash: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
...
Container: SCARD\rutoken_lt_00000000\0000\0000

= = = = = = = = = = = = = = = = = = = =
[ErrorCode: 0x00000000]

У нужного нам сертификата в параметре Container должно быть значение вида SCARD\rutoken.... Если сертификатов с такими значениями несколько, то значит на токене записано несколько сертификатов, и вы в курсе какой именно вам нужен. Значение параметра SHA1 Hash (40 символов) нужно скопировать и подставить в команду ниже.

2. Подпись файла командой из terminal

В terminal переходим в каталог с файлом для подписания и выполняем команду:

/opt/cprocsp/bin/cryptcp -signf -detach -cert -der -strict -thumbprint ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ FILE

где ХХХХ... – хэш сертификата, полученный на шаге 1, а FILE– имя файла для подписания (со всеми расширениями, но без пути).

Команда должна вернуть:

Signed message is created.
[ErrorCode: 0x00000000]

Будет создан файл электронной подписи с расширением *.sgn – это отсоединенная подпись в формате CMS с кодировкой DER.

3. Установка Apple Automator Script

Чтобы каждый раз не работать с терминалом, можно один раз установить Automator Script, с помощью которого подписывать документы можно будет из контекстного меню Finder. Для этого скачиваем архив – скачать.

  1. Распаковываем архив ‘Sign with CryptoPro.zip’
  2. Запускаем Automator
  3. Находим и открываем распакованный файл ‘Sign with CryptoPro.workflow’
  4. В блоке Run Shell Script меняем текст ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ на значение параметра SHA1 Hash сертификата КЭП, полученное выше.
  5. Сохраняем скрипт: ⌘Command + S
  6. Запускаем файл ‘Sign with CryptoPro.workflow’ и подтверждаем установку.
  7. Идем в System Preferences —> Extensions —> Finder и проверяем, что Sign with CryptoPro quick action отмечено.
  8. В Finder вызываем контекстное меню любого файла, и в разделе Quick Actions и/или Services выбрать пункт Sign with CryptoPro
  9. В появившемся диалоге КриптоПро ввести PIN-код пользователя от КЭП
  10. В текущем каталоге появится файл с расширением *.sgn – отсоединенная подпись в формате CMS с кодировкой DER.

V. Проверить подпись в документе

Если содержимое документа не содержит секретов и тайн, то проще всего воспользоваться web-сервисом на портале Госуслуг – https://www.gosuslugi.ru/pgu/eds. Так можно сделать скриншот с авторитетного ресурса и быть уверенным что с подписью все ок.

Полезные ссылки: