Как вытащить флаг из файла

Обновлено: 03.07.2024

Когда нужно переносить сертификаты в другое место?

И так давайте рассмотрим по каким причинам у вас может появиться необходимость в копировании ваших ЭЦП в другое место.

  1. На текущем физическом компьютере начинает умирать жесткий диск или SSD накопитель (Как проверить жизненные показатели жесткого диска), очень частая история и жизненная, когда люди теряли все свои данные, из-за банальной жадности в покупке нового оборудования и элементарного незнания принципов резервного копирования.
  2. У вас производится модернизация оборудования, его улучшение и вам нужно перенести все сертификаты с закрытыми ключами на другую систему
  3. Вы создали отдельный сервер, в виде виртуальной машины, где будут находится все ваши сертификаты и с ними смогут работать все необходимые сотрудники, терминал для бухгалтерии. Простой пример СБИС, и когда у вас 10-20 организаций.

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

Какие есть варианты по копированию контейнеров закрытых ключей?

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

Перенос сертификатов в виде пошаговой инструкции

Первые два пункта я описывать тут не стану, так как я уже это подробно рассказывал, посмотрите по ссылкам. Я расскажу, об остальных методах и начнем мы с классического КриптоПРО.

Данный метод подойдет для тех ситуаций, когда у вас один или 2 сертификата (ЭЦП). Если же их несколько десятков, а это не такая уж и редкость, то такой путь вам не подходит, и там придется выбирать 4-й метод. Важное замечание. Я буду переносить контейнеры закрытого ключа, которые хранятся в реестре. Если вы храните их только на токене, то переносить контейнеры вам не надо, только сертификаты

Копирование закрытого ключа из КриптоПро

Это самый простой способ, и будет актуальным при небольшом количестве контейнеров с закрытыми ключами. Чтобы выполнить перенос сертификатов из реестра, откройте ваш КриптоПРО, вкладка "Сервис", нажимаем кнопку "Сервис", далее через кнопку "Обзор", откройте "Выбор ключевого контейнера" и укажите, какой сертификат вы будите переносить. В моем примере это контейнер "Копия сертификата в реестре (Семин Иван)".

перенос сертификатов из реестра-01

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

перенос сертификатов из реестра-02

У вас откроется окно с выбором носителей, вы можете выбрать либо токен, либо флешку для переноса на другое место. У меня это внешний жесткий диск Z:\.

перенос сертификатов из реестра-03

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

перенос сертификатов из реестра-04

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

перенос сертификатов из реестра-05

Если вы пытаетесь копировать сертификат с токена, то в ряде случаев у вас может появиться ошибка: Ошибка копирования контейнера. У вас нет разрешений на экспорт ключа, потому что при создании ключа не был установлен соответствующий флаг. Ошибка 0x8009000B (-2146893813) Ключ не может быть использован в указанном состоянии.

Ошибка копирования контейнера

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

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

Перенос сертификатов из реестра без КриптоПРО

Существуют методы экспортировать закрытый ключ и без изспользования утилиты КриптоПРО. Представим себе ситуацию, что у вас на него кончилась лицензия и вы не успели ее купить. Вам нужно сдать отчетность в СБИС. Вы развернули CryptoPRO на другом компьютере, так как он позволяет 3 месяца бесплатного использования, осталось для СБИС выполнить перенос сертификатов, которые у вас в реестре Windows.

У нас два варианта:

  • Использование оснастки mmc-Сертификаты пользователя.
  • Использование Internet Explore

Как открыть оснастку сертификаты я уже подробно рассказывал, посмотрите. Откройте там контейнер "Личное - Сертификаты". Если у вас в контейнере не один сертификат с одинаковым именем, такое может быть, то откройте сертификат в оснастке mmc и в КриптоПРО и сравните серийные номера сертификата.

перенос сертификатов-01

В Internet Explore, откройте "Свойства браузера - Содержание - Сертификаты"

Теперь нам необходимо его экспортировать, в оснастке "Сертификаты", через правый клик, это можно сделать, в Internet Explorer, сразу видно кнопку, экспорт.

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

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

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

сбис перенос сертификата

Следующим этапом в мастере экспорта сертификатов, вам необходимо выбрать формат выгрузки, это будет PFX архив.

контур перенос сертификатов

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

сбис перенос сертификата-2

Мастер экспорта сертификатов, выведет вам сводные данные, нажимаем "Готово".

перенос сертификата на рутокен-01

Отрываем локацию, куда вы его выгрузили, и найдите свой pfx архив.

перенос сертификата на рутокен-02

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

перенос сертификата на рутокен-03

Выберите формат файла "X.509 (.CER) в кодировке DEP", задайте ему имя и место сохранения. На выходе у вас появятся два файла.

перенос сертификата на рутокен-04

Одни открытый ключ в формате cer и закрытый ключ в формате pfx. Этого набора вам будет достаточно, чтобы перенести сертификаты СБИС, Контура и остальных программ на другой компьютер.

перенос сертификата на рутокен-05

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

Установка перенесенного сертификата-01

На втором шаге проверяем импортируемый сертификат.

Установка перенесенного сертификата-02

Указываем пароль, который задавали при выгрузке.

Установка перенесенного сертификата-03

Оставляем автоматический выбор хранилища на основе типа сертификатов.

Установка перенесенного сертификата-04

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

Установка перенесенного сертификата-05

Массовый перенос ключей и сертификатов CryptoPro на другой компьютер

Выше описанные методы хороши, когда у вас один или 5 ключиков в реестре, а как быть если их десятки. Помню лет 5 назад, когда я еще был младшим администратором, то я очень часто устанавливал электронные цифровые подписи главбуху, так как она работала в СБИС++ и сдавала там постоянно отчетность по огромному количеству организаций, по типу рога и копыта. Держать кучу токенов было не вариант, и для таких вещей у нее все хранилось в реестре и копия сертификатов была на флешке в сейфе. Флешку потом потеряли, встал вопрос сделать резервную копию всего и плюс обновить систему, в виду нового компьютера, на операционной системе Windows 8.1. ЭЦП было штук 50, а так как я ценю свое время, то и искал методы, выполнить это быстрее, к счастью я его нашел.

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

Открываете командную строку cmd и вводите команду:

криптопро перенос сертификатов-01

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Crypto Pro\Settings\Users\Номер вашего SID, который мы узнали\Keys

криптопро перенос сертификатов-02

В контейнере Keys, вы найдете все ваши закрытые ключи от ЭЦП. С правой стороны вы увидите файлы:
* header.key
* masks.key
* masks2.key
* name.key
* primary.key
* primary2.key

Щелкаем правым кликом по контейнеру Keys и экспортируем его.

криптопро перенос сертификатов-03

Сохраняем нашу ветку реестра с контейнерами закрытых ключей. Далее нам нужно скопировать открытые ключи, которые лежат по пути:

C:\Users\имя вашего пользователя\AppData\Roaming\Microsoft\SystemCertificates\My

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

перенос сертификатов-05

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

перенос сертификатов-01

Как я показывал выше, определите SID нового пользователя, скопируйте его полностью и замените им значение в файле reg, я отметил это стрелками.

перенос сертификатов-02

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

перенос сертификатов-03

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

Каждый процесс поддерживает соответствующий флаг fd для всех открытых файлов. В настоящее время определен только один флаг дескриптора файла: FD_CLOEXEC: если флаг fd файла установлен (то есть 1), когда процесс выходит из дочернего процесса, дескриптор файла должен быть закрыт перед выполнением exec.

  • Флаг close_on_exec - это битовый флаг всех файловых дескрипторов процесса.Каждый бит представляет дескриптор открытого файла и используется для определения состояния FD_CLOEXEC (1, установлено; 0, очищено) открытого файла.
  • FD_CLOEXEC по умолчанию равен 0, поэтому дескрипторы файлов, унаследованные дочерним процессом, по умолчанию открыты. (Проблема безопасности "Сверхмощность")
  • Установите флаг закрытия при выполнении файла: fcntl (fd, F_SETFD, flags | FD_CLOEXEC), чтобы установить (сначала флаги можно получить с помощью F_GETFD).
Проблемы безопасности, вызванные FD_CLOSEEXEC

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

  • Если это сокет, поскольку сам сокет fd содержит такую ​​информацию, как локальный IP-адрес, номер порта и т. Д., Если сокет fd унаследован и занят дочерним процессом или не закрыт, это вызовет новый родительский процесс перезапустить и не использовать эти сетевые порты в обычном режиме Серьезно Устройство отключено.
  • Пример: на веб-сервере он сначала будет запущен с привилегиями root, чтобы открывать порты, журналы и другие файлы, которые могут быть открыты только с привилегиями root. Затем отключите питание обычных пользователей, отключите некоторые рабочие процессы, а затем выполните дальнейшие операции, такие как анализ сценариев, запись журналов и вывод результатов в этих процессах. Это неявная проблема безопасности: дочерний процесс наследует fd родительского процесса, поэтому скрипту, запущенному в дочернем процессе, нужно только продолжить работу с этими fd, и он может использовать обычные разрешения для «неавторизации» файлов, которыми может управлять пользователь root.

2. Флаг состояния файла.

Укажите атрибуты статуса файла, которые задаются параметром flags для open. В отличие от «соответствующего процесса флага дескриптора файла», флаг состояния файла используется всеми флагами дублированных файлов, подключенными к одному и тому же открытому файлу (когда задействован dup, флаг состояния fd используется совместно, пока используется общая запись в таблице файлов).

Классификация флагов состояния файлов

1. Логотип метода доступа: Указывает, что идентификатор файла разрешено использовать для чтения, записи или и того, и другого, включая O_RDONLY, O_WRONLY и O_RDWR.

  • Эти методы доступа выбираются при открытии файла и не могут быть изменены впоследствии.
  • Метод доступа к файлу можно получить с помощью функции fcntl. —— Так как режимы доступа для чтения и записи не занимают по одному биту каждый, переносимый метод получения режима доступа к файлу состоит в использовании слова маски O_ACCMODE для выполнения побитовой операции И ('&') со значением флага состояния файла, чтобы получить бит режима доступа, а затем сравнить результат с этими 3 значениями одно за другим (функция APUE set_fl).

2. Подпишите при открытии: Укажите некоторые параметры, которые влияют на поведение при открытии файлов.

  • Эти параметры не сохраняются после открытия файла, за исключением O_NONBLOCK.Поскольку O_NONBLOCK также является режимом работы ввода-вывода, этот флаг сохраняется.
  • O_CREAT: если установлено, создавать и открывать этот файл, когда файл не существует.
  • O_EXCL: если O_CREAT и O_EXCL установлены одновременно, открытие завершается ошибкой, когда указанный файл уже существует. Убедитесь, что не повредили существующие файлы.
  • O_TRUNC: усечь файл до нулевой длины.Эта опция полезна только для обычных файлов и не полезна для специальных файлов, таких как каталоги или FIFO.
  • O_NONBLOCK: предотвращает длительную блокировку открытия файла. Обычно это имеет смысл только для устройств, сетей и файлов конвейера. Этот флаг также используется как флаг режима работы ввода-вывода, что означает, что указание O_NONBLOCK в открытом состоянии также устанавливает неблокирующий режим ввода-вывода. Следовательно, чтобы открыть файл без блокировки и не повлиять на нормальный блокирующий ввод-вывод, вы должны сначала установить O_NONBLOCK для вызова open, а затем вызвать fcntl, чтобы закрыть этот бит.

3. Флаг режима работы ввода / вывода.: Используйте рабочий метод чтения / записи fd. Эти флаги устанавливаются с помощью open () и могут быть получены и изменены позже с помощью fcntl ().

  • O_APPEND: используется для дополнительной записи. Если этот бит установлен, все операции write () записывают данные в конец файла независимо от его расположения. Это единственный надежный способ добавить данные в конец файла. Дополнительный метод может гарантировать, что независимо от того, записывают ли другие процессы тот же файл или нет, операция write () всегда записывает данные в конец текущего файла. Напротив, если этот бит не установлен, если вы просто переместите позицию файла в конец файла, а затем запишите данные, после установки позиции файла перед записью могут быть другие процессы, расширяющие файл (соответствующие два разных Когда процессы открывают один и тот же файл, они используют один и тот же vnode, но каждый имеет свою собственную системную таблицу открытых файлов и, следовательно, имеет свое собственное местоположение файла), в результате чего записанные данные появляются где-то перед концом фактического файла.
  • O_NONBLOCK: используется для неблокирующего ввода-вывода.
  • O_ASYNC: используется для управляемого сигналами ввода-вывода (асинхронный ввод-вывод). Если этот бит установлен, сигнал SIGIO будет генерироваться при наличии входных данных в идентификаторе файла.
  • O_SYNC: используется для синхронизации ввода-вывода. Если этот бит установлен, файл открывается в режиме синхронного ввода-вывода, и любая операция, которая записывает файл, будет блокировать вызывающий процесс до тех пор, пока не будут выполнены все данные в буфере ввода-вывода ядра и атрибуты файла, связанные с этой записью. записано на физический носитель.
  • O_DSYNC: используется для синхронизации ввода-вывода данных. Если этот бит установлен, файл открывается в режиме синхронного ввода-вывода, и любая операция, которая записывает файл, будет блокировать вызывающий процесс до тех пор, пока данные буфера ввода-вывода ядра не будут записаны на физический носитель. Однако, если записанные данные не влияют на чтение только что записанных данных, они не ждут обновления атрибута файла.
  • O_RSYNC: если этот бит установлен, файл будет открыт в режиме синхронного ввода-вывода, и любая операция по чтению файла будет ожидать завершения всех операций записи в одну и ту же область с помощью O_DSYNC и O_SYNC. Если флаги O_SYNC и O_RSYNC установлены одновременно, операция чтения блокируется до тех пор, пока атрибут времени доступа файла не будет записан на физический носитель данных. Если флаги O_DSYNC и O_RSYNC установлены одновременно, операция чтения будет заблокирована до тех пор, пока все данные, относящиеся к поддержанию целостности файла, не будут записаны на физический носитель данных.

Проще говоря, основная функция флагов O_SYNC, O_DSYNC и O_RSYNC - записывать данные непосредственно на диск или читать их прямо с диска.

Три, схема структуры данных ядра открытого файла

这里写图片描述

这里写图片描述

这里写图片描述

Знайте из трех картинок выше:

  • У процесса есть свой собственный флаг дескриптора файла и запись в таблице файлов (флаг состояния файла, текущее смещение) для каждого открытого файла. Когда дочерний процесс разветвляется, дескриптор открытого файла и флаг дескриптора файла наследуются по умолчанию, а записи таблицы файлов копируются, а не совместно используются, гарантируя, что каждый процесс получит свою собственную запись таблицы файлов.
  • Во время dup - запись в таблице общих файлов в процессе, то есть флаг состояния общего файла и текущее смещение. Но dup сбросит флаг FD_CLOEXEC, поэтому процесс fork по-прежнему открывает файл и копирует запись в таблице файлов.
  • Наследуйте файловый дескриптор и наследуйте флаг файлового дескриптора. Запись в таблице общих файлов, то есть флаг состояния общего файла и текущее смещение.

В-четвертых, функция интерфейса

dup / dup2: копировать существующий файловый дескриптор

dup: Возвращает минимальное значение доступных дескрипторов файлов. FD_CLOEXEC по умолчанию сброшен.

dup2: Копировать в указанный файловый дескриптор: если fd2 уже открыт, сначала закройте файл, а затем скопируйте и вернитесь в fd2 и очистите FD_CLOEXEC; если fd = fd2, не закрывайте файл и сохраняйте статус флага его дескриптора файла и возвращайте fd2 одновременно.

fcntl: изменить атрибуты открытого файла (просто укажите fd)

Прототип функции:

Функция функции: 5 категорий

  1. Скопируйте существующий дескриптор (cmd = F_FUPFD или F_DUPFD_CLOEXEC)
  2. Получить / установить флаг дескриптора файла (cmd = F_GETFD или F_SETFD)
  3. Получить / установить флаг состояния файла (cmd = F_GETFL или F_SETFL)
  4. Получить / установить владение асинхронным вводом-выводом (cmd = F_GETOWN или F_SETOWN)
  5. Получить / установить блокировку записи (cmd = F_GETLK, F_SETLK или F_SETLKW)

Интеллектуальная рекомендация


[Makefile от более мелких к более глубоким полная запись обучения 4] Переменные и различные методы присвоения

Давайте сегодня узнаем о различных методах присваивания переменных в Makefile! Смысл тяжелой работы, чтобы бедность больше не ограничивать свое воображение! Добавьте QQ, чтобы вместе учиться и обменив.

[Luogu P3147] [BZOJ 4576] [USACO16OPEN]262144

Портал Луогу БЗОЙ Портал Описание заголовка Bessie likes downloading games to play on her cell phone, even though she doesfind the small touch screen rather cumbersome to use with her large hooves. Sh.

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

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти .

Введение

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

  1. Перенести или скопировать контейнер закрытого ключа через стандартную оснастку CryptoPro в панели управления. Это самый простой и быстрый способ, если у вас не много сертификатов и ключей. Если же их несколько десятков, а это не такая уж и редкость, то такой путь вам не подходит.
  2. Скопировать сертификаты и ключи непосредственно через перенос самих исходных файлов и данных, где все это хранится. Объем работы одинаков и для 5 и для 50-ти сертификатов, но требуется больше усилий и знаний.

Я опишу оба этих способа, но подробно остановлюсь именно на втором способе. В некоторых ситуациях он является единственно возможным.

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

Копирование закрытого ключа через оснастку КриптоПро

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

Копирование закрытого ключа сертификата через оснастку КриптоПро

Далее вы выбираете текущий контейнер, который хотите скопировать. Это может быть либо токен, либо реестр компьютера. Затем новое имя и новое расположение контейнера. Опять же, это может быть как реестр, так и другой токен.

Выбор контейнер для экспорта

Ошибка копирования контейнера

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

Ошибка копирования контейнера

Ошибка копирования контейнера. У вас нет разрешений на экспорт ключа, потому что при создании ключа не был установлен соответствующий флаг. Ошибка 0x8009000B (-2146893813) Ключ не может быть использован в указанном состоянии. Либо вы просто не сможете его выбрать для копирования, если у вас последняя версия CryptoPro. Он будет неактивен:

Неэкспортируемый контейнер

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

Посмотреть список сертификатов в системе

Выбираем необходимый сертификат и нажимаем Посмотреть свойства сертификата.

Выбор сертификата

Далее переходим на вкладку Состав в информации о сертификате и нажимаем Копировать в файл.

Сохранение сертификата КриптоПро в файл

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

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

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

Формат экспортируемого ключа

Укажите какой-нибудь пароль и запомните его! Без пароля продолжить нельзя. В завершении укажите имя файла, куда вы хотите сохранить закрытый ключ. Теперь вам нужно скопировать сам сертификат. Только что мы копировали закрытый ключ для него. Не путайте эти понятия, это разные вещи. Опять выбираете этот же сертификат в списке из оснастки Crypto Pro, жмёте Копировать в файл, экспортировать БЕЗ закрытого ключа. И выбираете файл формата .CER.

Перенос сертификата

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

Вам достаточно перенести эти 2 файла на другой компьютер и кликнуть по каждому 2 раза мышкой. Откроется мастер по установке сертификатов. Вам нужно будет выбрать все параметры по умолчанию и понажимать Далее. Сертификат и контейнер закрытого ключа к нему будут перенесены на другой компьютер. Я описал первый способ переноса в ручном режиме. Им можно воспользоваться, если у вас немного сертификатов и ключей. Если их много и руками по одному переносить долго, то переходим ко второму способу.

Массовый перенос ключей и сертификатов CryptoPro с компьютера на компьютер

В интернете достаточно легко находится способ переноса контейнеров закрытых ключей КриптоПро через копирование нужной ветки реестра, где это все хранится. Я воспользуюсь именно этим способом. А вот с массовым переносом самих сертификатов у меня возникли затруднения и я не сразу нашел рабочий способ. Расскажу о нем тоже. Для дальнейшей работы нам надо узнать SID текущего пользователя, у которого мы будем копировать или переносить сертификаты с ключами. Для этого в командной строке выполните команду:

Как узнать SID пользователя

В данном случай user - имя учетной записи, для которой узнаем SID. Далее скопируем контейнеры закрытых ключей в файл. Для этого на компьютере открываем редактор реестра (regedit.exe) и переходим в ветку:

где S-1-5-21-4126888996-1677807805-1843639151-1000 - SID пользователя, у которого копируем сертификаты. Выбираем папку Keys и экспортируем ее. Этот путь актуален для 64-х битных систем - Windows 7, 8, 10. В 32-х битных путь может быть немного другой. Я специально не проверял, но поиском по реестру вы при желании найдете его.

Массовый перенос закрытых ключей сертификатов с компьютера на компьютер

Сохраняем ветку реестра в файл. В ней хранятся закрытые ключи. Теперь нам нужно скопировать сразу все сертификаты. В Windows 7, 8 и 10 они живут в директории - C:\Users\user\AppData\Roaming\Microsoft\SystemCertificates\My. Сохраняйте эту директорию. Для переноса ключей и сертификатов нам надо скопировать на другой компьютер сохраненную ветку реестра и директорию с сертификатами My.

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

Замена SID пользователя

После этого запускаем .reg файл и вносим данные из файла в реестр. Теперь скопируйте папку My с сертификатами в то же место в профиле нового пользователя. На этом перенос сертификатов и контейнеров закрытых ключей КриптоПро завершен. Можно проверять работу. Я не раз пользовался этим методом, на текущий момент он 100% рабочий. Написал статью, чтобы помочь остальным, так как сам не видел в интернете подробной и понятной с первого раза статьи на эту тему. Надеюсь, моя таковой получилась.

КриптоПро CSP ошибка 0x80090010 Отказано в доступе

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

КриптоПро CSP ошибка 0x80090010 Отказано в доступе

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

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

Часто задаваемые вопросы по теме статьи (FAQ)

Можно ли перенести сертификат, который находится на токене и защищен от копирования?

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

Безопасно ли хранить сертификаты в реестре?

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

Подойдет ли предложенный способ копирования сертификатов CryptoPro для VipNet?

Нет, не подойдет. В статье описан способ переноса сертификатов CryptoPro. Другие криптопровайдеры хранят сертификаты по-другому. Универсального способа для всех не существует.

Есть ли какой-то очень простой способ скопировать сертификаты crypto pro? То, что описано в статье слишком сложно для меня.

Да, есть статья на сайте контура, в ней ссылка на утилиту для копирования контейнеров Certfix. Можете воспользоваться ей.

Если для работы используется дискета или flash-накопитель, скопировать контейнер с сертификатом можно средствами Windows (этот способ подходит для версий КриптоПро CSP не ниже 3.0). Папку с закрытым ключом (и, если есть, файл сертификата — открытый ключ) поместите в корень дискеты или flash-накопителя (если поместить не в корень, то работа с сертификатом будет невозможна). Название папки при копировании рекомендуется не изменять.

В папке с закрытым ключом должно быть 6 файлов с расширением *.key. Как правило, в закрытом ключе присутствует открытый ключ (файл header.key в этом случае будет весить больше 1 Кб). В этом случае копировать открытый ключ необязательно. Пример закрытого ключа — папки с шестью файлами и открытого ключа — файла с расширением *.cer.



Закрытый ключ Открытый ключ

Копирование на профиле Диагностики

Массовое копирование

  1. Скачайте и запустите утилиту. Дождитесь загрузки всего списка контейнеров/сертификатов и отметьте нужные.
  2. Выберите меню « Массовые действия » и нажмите на кнопку « Копирование контейнеров ».
  3. Выберите носитель для хранения копии контейнера и нажмите « ОК » . При копировании в реестр можно выбрать пункт «Копировать к ключевой контейнер компьютера», тогда после копирования контейнер будет доступен всем пользователям данного компьютера.
  4. После копирования нажмите внизу слева кнопку « Обновить ».

Если хотите работать со скопированными контейнерами — необходимо установить сертификаты.

Копирование с помощью КриптоПро CSP


Экспорт PFX-файла и его установка

Экспорт сертификата с закрытым ключом:

  1. Откройте окно «Сертификаты» одним из способов:
    • «Пуск» → «Все программы» → «КриптоПро» → «Сертификаты».
    • «Internet Explorer» → «Сервис» → «Свойства обозревателя» → вкладка «Содержание» → «Сертификаты.
  2. Откройте сертификат, который нужно скопировать. На вкладке «Состав» нажмите «Копировать в файл».
  3. В «Мастере экспорта сертификатов» нажмите «Далее» и выберите пункт «Да, экспортировать закрытый ключ». Нажмите «Далее».
  4. Выберите пункты «Включить по возможности все сертификаты в путь сертификации» и «Экспортировать все расширенные свойства», остальные пункты должны быть не выбраны. Нажмите «Далее».
  5. Обязательно задайте пароль для экспортируемого файла. Данный пароль не рекомендуется сообщать по электронной почте. Нажмите «Далее».
  6. Укажите имя файла, выберите путь, куда его сохранить, и нажмите «Далее».
  7. Нажмите «Готово».
  8. Экспортируйте открытый ключ сертификата (см. Экспорт открытого ключа).
  9. Заархивируйте полученные файлы форматов *.pfx и *.cer.

Установка сертификата с закрытым ключом

  1. Откройте *.pfx файл. Запустится «Мастер импорта сертификатов».
  2. Укажите хранилище «Текущий пользователь» и нажмите «Далее», затем снова «Далее».
  3. Введите пароль, который указывали при экспорте и выберите пункт «Пометить этот ключ как экспортируемый…», иначе контейнер нельзя будет скопировать в дальнейшем. Нажмите «Далее».
  4. Выберите пункт «Поместить все сертификаты в следующее хранилище», нажмите на кнопку «Обзор», выберите «Личное» и нажмите на кнопку «ОК». Нажмите «Далее», а затем «Готово».
  5. Выберите носитель, на который хотите сохранить контейнер. При необходимости задайте пароль.
  6. Для корректной работы сертификата со встроенной лицензией переустановите сертификат в контейнер (см. Как установить личный сертификат в КриптоПро).

Копирование контейнера из реестра другого пользователя

Читайте также: