Резервное копирование сертификатов
ключей проверки ЭП из криптопровайдера Microsoft CSP с российской криптографией (утилита P12FromGostCSP)
Специалистами
ООО «ЛИССИ-Софт» разработан набор средств, предназначенный для создания
резервной копии личного сертификата пользователя вместе с ключом ЭП, хранящихся
в контейнере криптопровайдера (MS CSP) с поддержкой российской криптографии
(ГОСТ 28147-89, ГОСТ Р 34.11-94, ГОСТ Р 34.10-2001, ГОСТ Р 34.11-2012, ГОСТ Р 34.10-2012). Резервная копия создаётся
в защищенном контейнере PKCS#12.
Наиболее распространенными криптопровайдерами MS CSP с поддержкой российской криптографии, являются ПМ ЛИССИ-CSP и КриптоПро CSP. При этом если у вас установлен криптопровайдер ПМ ЛИССИ-CSP, то у вас не возникнет проблем с созданием резервной копии личного сертификата в контейнере PKCS#12.
Точно также не возникнет проблем с импортом личных сертификатов из контейнера PKCS#12 в хранилища ПМ ЛИССИ-CSP.
Удобным средством редством резервного копирования личных сертификатов из хранилищ,
поддерживаемых КриптоПро CSP, является утилита P12FromGostCSP.
Утилита P12FromGostCSP разработана в связи с многочисленными обращениями пользователей, которые хотели бы использовать уже имеющиеся сертификаты и ключи ЭП в приложениях, функционирующих не только на платформе MS Windows, но и на других платформах (Linux, Unix, OS X, Android и т.д.), и использующих в качестве криптопровайдера (СКЗИ) не только MS CSP, но и openssl, NSS, JCA (Java Cryptography Architecture), программные и аппаратные токены PKCS#11 с поддержкой российской криптографии, или желающих осуществить переход с КриптоПро CSP на криптопровайдер другого производителя (например, ПМ ЛИССИ-CSP) с сохранением ранее полученных сертификатов.
Утилита P12FromGostCSP позволяет использовать ключи ЭП, созданные КриптоПро-CSP, в OpenSSL-программах (рекомендуется версия 1.1.1 с ГОСТ-модулем), в Java-программах, использующих BouncyCastle (рекомендуется версия 1.63 и новее), а также в ViPNet CSP версии 4.2 и новее.
Также, в связи с многочисленными обращениями пользователей, которые хотели бы использовать уже имеющиеся сертификаты и ключи ЭП, хранящиеся в контейнерах PKCS#12, была разработана утилита командной строки LSPKCS12_Sign. Данная утилита предназначена для формирования электронной подписи (ЭП) документов, хранящихся в файлах, личным сертификатом ключа электронной подписи, хранящемся в контейнере PKCS#12. Контейнер PKCS#12 можно получить как утилитой P12FromGostCSP, так и воспользовавшись КриптоПлагином, Mozilla Firefox и т.д.
В настоящее время утилита P12FromGostCSP обеспечивает резервное копирование личных сертификатов из ключевых контейнеров КриптоПро CSP в контейнер PKCS#12. Экспорт возможен только для контейнеров с разрешённой операцией экспорта (флаг CRYPT_EXPORT). Для получения резервной копии достаточно запустить утилиту, выбрать личный сертификат, ввести пароль и на выходе получить файл с резервной копией в формате защищенного контейнера PKCS#12 (Personal Information Exchange Syntax Standard), созданном на базе российской криптографии.
Отметим, что в составе ПМ ЛИССИ-CSP есть своя утилита, позволяющая выполнить аналогичную операцию с контейнерами ПМ ЛИССИ-CSP.
PKCS#12 — формат для переноса сертификата и связанного с ним закрытого ключа с машины на машину или для резервного копирования. В этом формате могут также содержаться сертификаты удостоверяющего центра. Файлы формата PKCS#12 всегда кодируются в формате DER. Эти файлы требуют особенно пристального внимания, поскольку содержат ключ ЭП; при неосторожном обращении с таким файлом ключ ЭП легко скомпрометировать. Как правило, эти файлы защищены на пароле. Расширение файлов формата PKCS#12 либо «.p12», либо «.pfx».
Контейнер PKCS#12, создаваемый утилитой P12FromGostCSP полностью совместим с аналогичными контейнерами, создаваемыми ООО «КриптоКом» (в рамках проекта openssl) и ООО «Топ Кросс», чего, к сожалению, не скажешь о контейнере, создаваемом программными средствами, входящими в состав КриптоПро CSP (начиная с версии R3).
Просмотреть ASN1-структуры контейнера PKCS#12, созданного средствами КриптоПро CSP R3, и контейнеров, созданных другими средствами, удобно утилитами openssl или lirssl следующего вида:
#openssl asn1parse –inform DER –in <контейнер PKCS#12>
Если вы сравните эти структуры, то вам сразу бросится в глаза, что, например, вместо алгоритма хэширования ГОСТ Р 34.11-94 в контейнере от КриптоПро используется SHA1. Еще более интересный результат вы получите, если попробуете посмотреть содержимое контейнера, выполнив следующую команду:
#openssl pkcs12 –in <контейнер PKCS#12>
Содержимое контейнера PKCS#12, полученного путём использования утилиты P12FromGostCSP, можно импортировать и использовать в любых приложениях. Их можно импортировать в ПМ ЛИССИ-CSP, в Firefox, Thunderdird или SeaMonkey, использовать в приложениях, написанных на nss и openssl 1.x.x с подключенным engine ccgost от ООО «КриптоКом» или одним из engine семейства «lc_» от ООО «ЛИССИ-Софт» и т.д.
Для использования сохраненного в контейнере PKCS#12 личного сертификата и закрытого ключа при переходе, например, на использование ПМ ЛИССИ-CSP достаточно, после установки ПМ ЛИССИ-CSP, щелкнуть два раза по контейнеру и выполнить процедуру импорта. В результате ваш личный сертификат и ключ ЭП будут установлены в систему.
Получив с помощью утилиты P12FromGostCSP контейнер PKCS#12 можно также сохранить личный сертификат и ключ ЭП на программном или аппаратном токене с неизвлекаемым ключом, например на Рутокен ЭЦП или СКЗИ «MS_KEY K». Для этого вы можете воспользоваться Центром выдачи и управления сертификатами «Fox-XCA» (ЦС «Fox-XCA») .
Запустив ЦС «Fox-XCA» вам необходимо импортировать полученный контейнер PKCS#12 в базу данных «Fox-XCA».
И затем экспортировать сертификат и соответствующий ключ ЭП на соответствующий токен. При этом можно выставить необходимые вам метки на токене для сертификата и закрытого ключа. В дальнейшем необходимо помнить, что ключ ЭП невозможно получить с аппаратного токена. Но если у вас хранится в надежном месте резервная копия в контейнере PKCS#12, то при уничтожении вашего аппаратного токена (именно уничтожении, а не при утрате) вы сможете восстановить ваш личный сертификат и ключ ЭП.
Сохранив личный сертификат в контейнере PKCS#12 , вы можете теперь использовать его напрямую посредством утилиты командной строки LSPKCS12_Sign для формирования ЭП ваших документов. Утилита имеет простой синтаксис:
./lspkcs12_sign <подписываемый файл> <файл PKCS12> <файл для подписи> <1|0 - присоединенная|отсоединенная подпись>
Первым
параметром указывается файл, который необходимо подписать, второй параметр
указывает на контейнер PKCS#12, в котором хранится личный сертификат, третий
параметр задает файл, в котором будет сохранена ЭП и последний параметр
указывает тип подписи – присоединенная или отсоединенная:
$ ./lspkcs12_sign DATA.txt LirPKCS12_CHAIN.p12 DATA.p7 1
Copyright(C) LISSI-Soft (http://soft.lissi.ru) 2013
Введите пароль для PKCS12 файла=LirPKCS12_CHAIN.p12
********
Подпись сохранена в файле DATA.p7
bash-4.2$
Утилита LSPKCS12_Sign написана на базе СКЗИ «ЛИРССЛ-CSP».
Получить демо-версию утилиты LSPKCS12_Sign для платформ MS Windows и Linux можно здесь.
Утилита позволяет выполнять различные действия с защищенным контейнером PKCS#12, в частности, промотреть содержимое сертификата:
И, конечно, создать электронную подпись различного формата:
Утилита доступна для платформ Linux, MS Windows, OS X: