- Введение
- Ecdsa
- Видео
- Завершение процедуры экспорта
- Зашифровать закрытый ключ
- Извлечь только сертификаты или закрытый ключ
- Как выполнить копирование сертификата с рутокена через криптопро
- Как перенести нужный контейнер на рутокен из другого источника
- Как перенести сертификат криптопро csp
- Как произвести копирование сертификата с рутокен
- Конвертировать закрытый ключ в формат pkcs # 1
- Общая информация
- Перенос сертификата на другой компьютер из реестра
- Подготовка
- Проведение копирования контейнера с помощью встроенных средств операционной системы windows
- Просмотр информации pkcs # 12 на экране
- Простой экспорт сертификатов в powershell – pki extensions
- Процедура экспорта
- Системные требования
- Сохранить сертификаты и личные ключи в файлы
Введение
Ну вот частенько приходится переносить сертификаты с компьютера на компьютер. То по одному или по два сертификата, то сразу десятками. Когда сертификатов много, то перенести сертефикаты удобнее сразу пачкой.
Данные методы работают, если ключи экспортируемые.
Ecdsa
openssl pkcs12 -in INFILE.p12 -nodes -nocerts | openssl ec -out OUTFILE.key
Видео
Во всех приведенных ниже примерах подставьте имена файлов, с которыми вы фактически работаете.INFILE.p12, OUTFILE.crtи OUTFILE.key.
Завершение процедуры экспорта
- После успешного экспорта проведите процедуру удаления VipNet CSP. Для этого перейдите в Панель управления → Программы → Удаление программы → VipNet CSP → Удалить. Произведите удаление, отметка Удалить пользовательские данные должна быть снята. Перезагрузите ПК.
- Далее установите CryptoPro CSP и после установки обязательно перезагрузите ПК.
- Чтобы удостовериться, что все требуемые сертификаты и контейнеры перенесены, перейдите в Пуск → Инструменты КриптоПро. В меню слева откройте раздел Контейнеры, где будут находиться контейнеры и названия субъектов, которым они соответствуют. Сами же сертификаты из этих контейнеров можно увидеть в разделе Сертификаты в меню слева. Процедура экспорта завершена.
- Используется CryptoPro CSP 4.0
После экспорта контейнера/контейнеров, все папки с ключами находиться в папке …AppDataLocalCrypto Pro:
Что бы данные контейнера отобразились в СКЗИ CryptoPro CSP, требуется данные папки перенести в корень любого локального диска (кроме диска на который установлена операционная система) и/или перенести на любой флеш-накопитель. После чего все ключи отобразятся в самом приложение CryptoPro CSP, их можно будет использовать.
- Если используется CryptoPro CSP, 5.0, то дополнительно ничего делать не требуется. Ключи сразу будут работать.
Зашифровать закрытый ключ
Если вы хотите зашифровать закрытый ключ и защитить его паролем перед выводом, просто опустите -nodes флаг из команды:
openssl pkcs12 -info -in INFILE.p12
В этом случае вам будет предложено ввести и проверить новый пароль после того, как OpenSSL выдаст какие-либо сертификаты, а закрытый ключ будет зашифрован (обратите внимание, что текст ключа начинается с —–BEGIN ENCRYPTED PRIVATE KEY—–):
Введите PEM фразу: контролирующая - Enter PEM фразу: ----- BEGIN зашифрованного Частного KEY ----- MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIGwhJIMXRiLQCAggA MBQGCCqGSIb3DQMHBAiXdeymTYuedgSCBMjwGg78PsqiNJLfpDFbMxL98u3tK9Cs ... SGVCCBj5vBpSbBXAGbOv74h4satKmAMgGc8SgU06geS9gFgt / wLwehMJ / H4BSmex 4S / 2tYzZrDBJkfH9JpggubYRTgwfAGY2BkX03dK2sqfu QVTVTKMj2VI0sKcFfLZ BDW = ----- END зашифрованы ЧАСТНЫЙ КЛЮЧ -----
Извлечь только сертификаты или закрытый ключ
Если вы хотите вывести только закрытый ключ, добавьте -nocerts в команду:
openssl pkcs12 -info -in INFILE.p12 -nodes -nocerts
Если вам нужны только сертификаты, используйте -nokeys (и поскольку нас не интересует закрытый ключ, мы также можем спокойно опустить -nodes):
openssl pkcs12 -info -in INFILE.p12 -nokeys
Как выполнить копирование сертификата с рутокена через криптопро
Для решения задачи понадобится программа КриптоПРО CSP. Непосредственно копирование ЭЦП с токена идет следующим образом:
В указанном нами месте на жестком диске или USB-носителе появится новая папка с ключами, которую далее можно копировать «традиционным» способом.
Обратим внимание, что если вы планируете далее использовать скопированную ЭЦП по прямому назначению, то находиться указанная папка должна в корневой директории диска.
Как перенести нужный контейнер на рутокен из другого источника
В идеальном случае, контейнер с действующим сертификатом должен храниться в реестре либо на токене, где обеспечен максимальный уровень защиты. Для копирования его на Рутокен необходимо предварительно подключить считыватель и проконтролировать его доступность через КриптоПро. Если ее нет, то настраиваем, а в противном случае, выполняем действия в соответствии со следующим алгоритмом:
Для использования обновленного контейнера для подписи различных документов необходимо переместить сертификат с токена непосредственно в хранилище. В зависимости от вашей версии КриптоПро необходимо либо нажать на кнопку «Установить» либо сначала нажать «Свойства» и затем выбрав соответствующую операцию по установке нужного сертификата. В дальнейшем достаточно соблюдать рекомендации специального мастера.
Обратим внимание, что если уже этим сертификатом пользовались на компьютере с использованием другого носителя, то старый необходимо удалить из хранилища. Для этого можно использовать несколько способов. Если вы планируете это сделать на компьютере под управлением Windows, то придерживайтесь следующего алгоритма:
Удалить также можно с помощью программы КриптоПро CSP, которое значительно упрощает действия с контейнерами. Для проведения операции сделайте ряд действий:
Подобным образом рекомендовано также удалять ненужные уже сертификаты или иные электронные подписи, которые уже недействительны, или если обновление ЭЦП запланировано в другом удостоверяющем центре. В этих случаях старый корневой сертификат больше не нужен, но одновременно вы не сможете открывать зашифрованные «старыми» ЭЦП документы.
При необходимости решить вопросы с копированием, организацией рабочих мест, где понадобится использование ЭЦП Рутокен любого типа, обращайтесь в компанию «Астрал-М». Мы специализируемся на внедрении в компаниях IT-решений по автоматизации электронного документооборота, выпуске электронных цифровых подписей любой степени сложности.
Как перенести сертификат криптопро csp
Экспортировать сертификаты можно конечно и через КриптоПро (CryptoPro), но это слишком много кнопок нужно нажать 😓. И так с каждым сертификатом:
Установка перенесённых сертификатов из КриптоПро выполняется на той же вкладке Сервис ► Просмотреть сертификаты в контейнере… ►
Обзор выбираем необходимый сертификат Далее ► Установить ► Oк.
Как произвести копирование сертификата с рутокен
На одном накопителе Рутокен может находиться до 28 сертификатов ЭЦП (зависит от объема встроенной памяти). Этого достаточно для решения задач даже с учетом постепенного копирования на имеющийся носитель дополнительных ключей. На практике иногда приходится сталкиваться с необходимостью копирования сертификата с токена для переноса на другой или временного хранения на жестком диске, в облаке.
Перед выполнением копирования необходимо понимать, что сделать это традиционным способом с локального диска компьютера невозможно. Подобная операция доступна при наличии одного из следующих считывателей:
Если в качестве исходного носителя используется USB-накопитель, то контейнер с размещенным сертификатом должен находиться в корневой папке. Параллельно на нем может располагаться другая информация любой степени вложенности, которая не будет мешать работе с контейнером во время подписи документации.
Обратим внимание, что использование обычного USB-накопителя стоит рассматривать исключительно в качестве временной меры для хранения сертификатов и ключей из-за риска их хищения злоумышленниками. Исключением будет случай, когда подобное копирование используется для получения дополнительного комплекта файлов на случай выхода из строя Рутокен.
Конвертировать закрытый ключ в формат pkcs # 1
Приведенные выше примеры выводят закрытый ключ в OpenSSL по умолчанию. PKCS # 8 формат. Если вы знаете, что вам нужно PKCS # 1 вместо этого вы можете передать вывод утилиты OpenSSL PKCS # 12 ее утилите RSA или EC в зависимости от типа ключа. Обе команды ниже выведут файл ключа в формате PKCS # 1:
Общая информация
2 способа экспорта контейнеров с сертификатами:
- Выборочный – будут экспортированы только контейнеры, сертификаты которых установлены в хранилище сертификатов Личное, а сами контейнеры указаны в разделе Контейнеры ключей в VipNet CSP.
- Массовый – будут экспортированы все контейнеры, которые указаны в разделе Контейнеры ключей в VipNet CSP
Перенос сертификата на другой компьютер из реестра
Перенос сертификата из реестра на другой компьютер заключается в экспорте ветки Keys из реестра (Win R regedit Enter):
Подготовка
Для того, чтобы утилита обнаружила требуемые для экспорта контейнеры с сертификатами, необходимо:
1.Указать имена контейнеров в VipNet CSP в разделе Контейнеры ключей:
2. Далее необходимо удостовериться, что требуемые сертификаты находятся в хранилище сертификатов Личное. Для этого используйте сочетание клавиш Win R и в появившейся строке введите certmgr.msc и нажмите ОК:
3. В появившемся окне слева в папках пройдите Личное → Сертификаты и убедитесь, что в окне справа указаны все сертификаты, которые необходимо экспортировать:
Если какого-то из сертификатов не хватает, вернитесь в VipNet CSP в раздел Контейнеры ключей, нажмите на требуемые контейнеры, пройдите по пути Открыть → Установить сертификат → Далее → Поместить все сертификаты в следующее хранилище → Личное → ОК → Далее → Готово.
Проведение копирования контейнера с помощью встроенных средств операционной системы windows
При использовании USB-накопителя либо дискеты все можно выполнить стандартными средствами Windows. Для этого достаточно скопировать папку с сертификатом на конкретный носитель. Внутри этой папки будет 6 файлов с одинаковым расширением .key. Также здесь может находиться ключ в виде файла типа keyName.cer, копировать который необязательно.
Файлы для электронной цифровой подписи имеют следующие наименования (все имеют расширение .key):
Файл primary.key включает в себя 32 байта ключа, представленного в формате ASN1. При этом данное значение представляет собой только 50% искомого ключа, так как полная его версия может быть получена при делении на маску с учетом модуля Q.
Файл masks.key включает 32 байта маски ключа, которая также представлена в формате ASN1. Также здесь есть 12 байт данных для генерации ключа при условии, что криптографический контейнер защищен от несанкционированного доступа паролем (последний также принимает участие при генерации уникального ключа хранения). Завершает перечень информации в файле контрольная сумма, занимающая 4 байта.
Файл header.key представляет собой набор параметров ЭЦП и другую общую информацию.
Просмотр информации pkcs # 12 на экране
Чтобы вывести всю информацию из файла PKCS # 12 на экран в Формат PEM, используйте эту команду:
openssl pkcs12 -info -in INFILE.p12 -nodes
Затем вам будет предложено ввести пароль файла PKCS # 12:
Введите пароль для импорта:
Введите пароль, введенный при создании файла PKCS # 12, и нажмите enter. OpenSSL выведет на экран все сертификаты и закрытые ключи из файла:
Простой экспорт сертификатов в powershell – pki extensions
Update 03.12.2021: исправлен код записи base64 строки в файл.
С различной периодичностью на ньюсгруппах и англоязычных форумах встречаю вопрос, как экспортировать сертификаты из хранилища (Certificate Store) или сертификаты цифровых подписей файлов в .CER или .DER файл. Сегодня я продемонстрирую простой метод для экспорта этих сертификатов.
На самом деле разница между экспортом сертификата из хранилища сертификатов и подписанного файла заключается только в методе извлечения самого сертификата в x509Certificate2 объект. Давайте начнём с самого простого – экспорт сертификата из хранилища. В PowerShell уже есть свой провайдер для этого хранилища и свой PSDrive:
[↓] [vPodans] dir cert: Location : CurrentUser StoreNames : {SmartCardRoot, UserDS, AuthRoot, CA...} Location : LocalMachine StoreNames : {SmartCardRoot, AuthRoot, CA, Trust...} [↓] [vPodans] dir cert:currentuser Name : SmartCardRoot Name : UserDS Name : AuthRoot Name : CA Name : AddressBook Name : Trust Name : Disallowed Name : My Name : Root Name : TrustedPeople Name : TrustedPublisher Name : REQUEST [↓] [vPodans] dir cert:currentusermy Directory: Microsoft.PowerShell.SecurityCertificate::currentusermy Thumbprint Subject ---------- ------- 9C5E4DCEF6598C1298894F62D4BD16E601B8C780 CN=Microsoft Corporation, OU=MOPR, O=Microsoft Corporation, L=Redmond, S=W... 986D375362652FE9E39BA4D042A6B8BA75745998 CN=Administrator, CN=Users, DC=sysadmins, DC=lv 4BB89D732920DD91DE66983DDF2CC4EEC272A802 CN=Administrator, CN=Users, DC=sysadmins, DC=lv 14B931DB4790403CCE2A3D03B62638FC7A0D5F34 CN=Administrator, OU=Administrators, DC=sysadmins, DC=lv [↓] [vPodans]
Если просто посмотреть содержимое Cert:, то мы увидим там 2 хранилища
Внутри уже видны контейнеры, которые мы видим в виде папок в MMC консоли. А дальше уже хранятся наши сертификаты. Эти сертификаты здесь представлены в виде массива x509Certificate2.
[↓] [vPodans] (dir cert:currentusermy)[0].gettype().FullName System.Security.Cryptography.X509Certificates.X509Certificate2 [↓] [vPodans]
Если посмотреть свойства этого объекта через Get-Member, то мы сможем там увидеть метод Export(). Но лучше посмотреть этот метод на MSDN, т.к. он имеет несколько конструкторов: x509Certificate2.Export Method. Из них нас заинтересует только первый конструктор, который Export(X509ContentType). Остальные 2 необходимы для экспорта с паролем (только для PFX). Но, как мы видим из описания метода, нам надо ещё указать x509ContentType объект, который будет указывать нам на тип экспортируемого сертификата. Типы экспортируемых сертификатов можно посмотреть по ссылке: http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509contenttype.aspx или в консоли PowerShell:
[↓] [vPodans] [System.Enum]::GetNames([system.security.cryptography.x509certificates.x509contenttype])
Unknown
Cert
SerializedCert
Pfx
Pkcs12
SerializedStore
Pkcs7
AuthenticodeНас сейчас будет интересовать только тип Cert (только открытая часть сертификата).
Теперь мы уже знаем достаточно много, чтобы уже начать писать код. Мы сейчас получим объект сертификата, укажем тип экспортируемого сертификата и выполним метод Export():
$cert=(dircert:currentuserMy)[0]$type=[System.Security.Cryptography.X509Certificates.X509ContentType]::Cert$ExportedData=$cert.Export($type)
Но это ещё не всё. Посмотрите, что у вас находится в переменной $ExportedData! Там на самом деле огромный массив байтов (в среднем более 2-20 тысяч элементов). Это же и указано в описании метода, что он возвращает. Именно массив байтов. Но что с ним делать? Я сам по-началу думал об этом, пока не вспомнил про одну вещь:

У нас есть выбор, как экспортировать сертификат – в DER или Base64 кодировке. Когда я писал про PsFCIV, то у меня была такая же ситуация. Hasher у меня так же возвращал массив байтов, который мы сразу же загоняли в Base64 кодировку. В нашем случае потребуется то же самое:
$base64Data=[System.Convert]::ToBase64String($ExportedData)
И на выходе мы молучим длинную Base64 строку, которую уже и нужно экспортировать в файл любым удобным для вас методом:
Set-Content-Pathpathfile.cer-Value$base64Data-EncodingAscii
вы можете убедиться в этом просто открыв .CER файл. Чтобы получить объект сертификата из цифровой подписи файла, то мы можем просто воспользоваться командлетом Get-AuthenticodeSignature и выбрать свойство SignerCertificate. Если подпись файла дополнительно подписана сертификатом сервера времени, то вы можете использовать так же и свойство TimeStampCertificate:
[↓] [vPodans] $a.SignerCertificate Thumbprint Subject ---------- ------- 9E95C625D81B2BA9C72FD70275C3699613AF61E3 CN=Microsoft Corporation, OU=MOPR, O=Microsoft Corporation, L=Redmond, S=W... [↓] [vPodans] $a = Get-AuthenticodeSignature .DesktopEASetup.exe [↓] [vPodans] $a.SignerCertificate Thumbprint Subject ---------- ------- 9E95C625D81B2BA9C72FD70275C3699613AF61E3 CN=Microsoft Corporation, OU=MOPR, O=Microsoft Corporation, L=Redmond, S=W... [↓] [vPodans] $a.TimeStamperCertificate Thumbprint Subject ---------- ------- 4D6F357F0E6434DA97B1AFC540FB6FDD0E85A89F CN=Microsoft Time-Stamp Service, OU=nCipher DSE ESN:85D3-305C-5BCF, OU=MOP... [↓] [vPodans]
В этих свойствах сертификаты уже хранятся в виде объектов x509Certificate2 и дальше их можно экспортировать тем же самым путём, как мы это делали для сертификатов из Certificate Store. Собственно, для извлечения сертификатов из цифровых подписей файлов я написал неплохой скриптик, который добавляет в контекстное меню элемент Export Certificate:

и по нажатию на него цифровая подпись будет экспортирована в MyDocsFileName.ext.cer, где FileName.ext – оригинальное имя файла и к нему просто пристыковывается расширение CER. В скрипте предусмотрены несколько диалоговых окон о состоянии сертификата:
- файл подписан и хеш файла соответствует хешу в цифровой подписи:

- файл подписан, но хеш файла не соответствует хешу в цифровой подписи:

- файл не содержит цифровых подписей:

В двух последних случаях сертификат не экспортируется никуда по очевидным причинам. И, собственно скрипты-инсталляторы этого контекстного меню с рабочим кодом для:
![]()
1
PS1 file
9.0 KB
ExportCertificate_ps1.0
![]()
1
PS1 file
8.4 KB
ExportCertificate_ps2.0
В следующих статьях я планирую поговорить про импорт сертификатов в Certificate Store, а так же и экспорт сертификатов с закрытыми ключами в PFX файл с использованем Windows PowerShell.
Процедура экспорта
После того, как требуемые контейнеры указаны в VipNet CSP, а сертификаты из них установлены в хранилище Личное, перейдите к процедуре экспорта.
Откройте папку с утилитой и запустите файл ImportKeysFromStore.bat. Появится командная строка и через некоторое время всплывающее окно Убедитесь, что все ключевые носители подключены, нажмите ОК:
Спустя некоторое время появится всплывающее окно со списком сертификатов, которые были экспортированы, это сигнализирует об успехе операции:
Системные требования
- Windows 7 SP1 и выше.
- В системе установлен один криптопровайдер – VipNet CSP.
Сохранить сертификаты и личные ключи в файлы
Вы можете экспортировать сертификаты и закрытый ключ из файла PKCS # 12 и сохранить их в формате PEM в новый файл, указав выходное имя файла:
openssl pkcs12 -in INFILE.p12 -out OUTFILE.crt -nodes
Вам снова будет предложено ввести пароль файла PKCS # 12. Как и раньше, вы можете зашифровать закрытый ключ, удалив -nodes пометка из команды и / или добавление -nocerts or -nokeys выводить только закрытый ключ или сертификаты. Итак, для генерации файла закрытого ключа мы можем использовать эту команду:
openssl pkcs12 -in INFILE.p12 -out OUTFILE.key -nodes -nocerts
И чтобы создать файл, включающий только сертификаты, используйте это:
openssl pkcs12 -in INFILE.p12 -out OUTFILE.crt -nokeys
