Перенос сертификатов и закрытых ключей CryptoPro хранящихся в реестре

  • Автор:

Transfer-keys-certificates-CryptoPro-000.pngКриптоПро один из наиболее широко используемых криптопровайдеров на территории Российской Федерации, он широко используется в системах электронного документооборота, сдачи отчетности и взаимодействия с государственными органами, поэтому встретить его можно практически в любой организации. По этой причине у системных администраторов часто встает вопрос его переноса на другой ПК. А так как криптография является для многих сложной и непонятной областью, то эта простая задача может вызвать некоторые затруднения.

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

В повседневной деятельности широко распространено понятие "сертификат", им оперируют все, от сотрудников удостоверяющих центров, то бухгалтеров, работающих с ЭЦП. Часто можно услышать что-то подобное: "нам купили в бухгалтерию новый компьютер, нужно перенести сертификаты". Но если подходить с точки зрения криптографии, то слово "сертификат" в данном случае употребляется неправильно. Вся современная криптография строится вокруг инфраструктуры открытых ключей (PKI), которая подразумевает наличие у каждого участника ключевой пары: открытого и закрытого ключа.

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

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

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

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

Экспорт ключей и сертификатов

Для того, чтобы правильно экспортировать закрытые ключи, нам нужно выяснить идентификатор безопасности (SID) текущего пользователя (который работает с ЭЦП), это можно сделать командной:

wmic useraccount where name='%username%' get sid

Transfer-keys-certificates-CryptoPro-001.pngЗатем откроем редактор реестра и перейдем в ветку для 32-битных систем:

HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\Users

для 64-битных систем:

\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Crypto Pro\Settings\Users

Найдем и раскроем раздел с SID текущего пользователя и экспортируем оттуда ветку Keys.

Transfer-keys-certificates-CryptoPro-002.pngОбратите внимание, что данная ветка содержит закрытые ключи, поэтому следует принять все меры безопасности и не передавать файл экспорта по открытым каналам связи и вообще исключить к нему несанкционированный доступ посторонних лиц.

После чего скопируем все сертификаты, расположенные по пути

%USERPROFILE%\AppData\Roaming\Microsoft\SystemCertificates\My\Certificates

Это открытые ключи, никакой секретности они не представляют, поэтому просто копируем их любым доступным способом.

Импорт ключей и сертификатов

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

Затем снова узнаем SID пользователя, который будет работать с ЭЦП, если это текущий пользователь, то снова выполните:

wmic useraccount where name='%username%' get sid

В противном случае:

wmic useraccount where name='Name' get sid

где Name - имя пользователя.

После чего откройте на редактирование файл реестра с экспортированными закрытыми ключами и замените в нем все вхождения старого SID на SID нового пользователя.

Transfer-keys-certificates-CryptoPro-003.pngСохраните файл и импортируйте его в реестр. Закрытые ключи перенесены, файл переноса в целях безопасности следует удалить.

Следующим шагом скопируйте сохраненные сертификаты в

%USERPROFILE%\AppData\Roaming\Microsoft\SystemCertificates\My\Certificates

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

Как быть если доступ к старой системе невозможен?

Теория - это хорошо, но практика может подкинуть самые неожиданные ситуации. Как быть, если доступ к старой системе невозможен? Скажем вышла из строя материнская плата или серьезно повреждена операционная система?

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

С копированием сертификатов проблемы возникнуть не должно, их хранилище простая папка на диске, а вот с хранилищем закрытых ключей в реестре немного сложнее. Но не будем забывать, что системный реестр тоже хранится в файлах на диске. Вам следует любым доступным образом скопировать файл SOFTWARE из C:\Windows\System32\config

Transfer-keys-certificates-CryptoPro-004.pngЗатем на целевой системе откройте редактор реестра, перейдите в раздел HKEY_LOCAL_MACHINE и через Файл - Загрузить куст подключите скопированный из старой системы раздел реестра. Дайте ему осмысленное имя, скажем OLD_SOFTWARE.

Transfer-keys-certificates-CryptoPro-005.pngПосле чего пройдите в раздел с закрытыми ключами (с учетом новой точки монтирования) и выполните экспорт ветки Keys.

Transfer-keys-certificates-CryptoPro-006.pngДальнейшие действия ничем не отличаются от описанных нами в разделе Импорт ключей и сертификатов.