Как посмотреть закрытый ключ сертификата
Чем отличаются открытый и закрытый ключи ЭЦП?
При создании электронной цифровой подписи с помощью криптографических алгоритмов формируется ключевая пара — открытый и закрытый ключи. Расскажем подробно о том, что такое ключевая пара, чем отличаются части ЭЦП, какие функции они выполняют.
Открытый ключ ЭЦП
Эта часть ключевой пары представляет собой уникальный набор символов, который формируется криптопровайдером (средством криптографической защиты информации). Открытый ключ находится в сертификате проверки электронной подписи (в электронной и бумажной версии). Он доступен всем, так как используется для расшифровки ЭЦП. То есть с его помощью получатель подписанного электронного документа может идентифицировать и проверить ЭЦП. Удостоверяющие центры хранят выданные открытые ключи в специальном реестре.
Закрытый ключ ЭЦП
Это секретный уникальный набор символов, который также формируется криптопровайдером. Закрытый ключ необходим для формирования ЭЦП на электронном документе и хранится в зашифрованном виде на носителе (токене). Доступ к закрытому ключу имеет только владелец ЭЦП, он защищен PIN-кодом. Теоретически, скопировать закрытый ключ на другой носитель можно, но делать это рекомендуется, так как безопасность использования ЭЦП гарантирована только тогда, когда закрытый ключ существует в единственном экземпляре. Если носитель с закрытым ключом утерян, то в целях безопасности необходимо отозвать ЭЦП, чтобы злоумышленники не могли ей воспользоваться.
В ключевой паре открытая и закрытая части привязаны друг к другу.
Как найти и выгрузить ключи на компьютер?
Чаще всего появляется необходимость выгрузить открытый ключ, например, чтобы предоставить его контрагентам для проверки ЭЦП. На токене сертификат проверки ключа скрыт. Как его открыть? Сделать это можно через свойства браузера или программу КриптоПро CSP. Чтобы экспортировать ключ, в первую очередь необходимо подключить токен к компьютеру.
Через свойства браузера:
В ОС Windows необходимо открыть: «Пуск» — «Панель управления» — «Свойства браузера».
В появившемся окне выбрать вкладку «Содержание», а далее — «Сертификаты».
Появится список сертификатов, в котором следует выбрать нужный, а затем нажать кнопку «Экспорт».
Появится окно «Мастер экспорта сертификатов», где нужно выбрать «Не экспортировать закрытый ключ», если это не требуется.
Выбрать формат файла «Файлы в DER-кодировке X.509 (.CER)».
Выбрать место хранения ключа и сохранить.
Через КриптоПро CSP:
В ОС Windows надо перейти в «Пуск» — «Панель управления» — «КриптоПро CSP».
В открывшемся окне следует выбрать вкладку «Сервис» и нажать «Просмотреть сертификаты в контейнере».
Через кнопку «Обзор» нужно выбрать контейнер.
В окне «Сертификат для просмотра» следует нажать кнопку «Свойства» и на вкладке «Состав» нажать «Копировать в файл».
Далее порядок действий в окне «Мастер экспорта сертификатов» аналогичный: выбрать, нужно ли сохранять закрытый ключ, установить формат и определить место хранения.
Выгрузка закрытого ключа через свойства браузера выполняется по тому же алгоритму, что и в случае с открытым. Только в окне «Мастер экспорта сертификатов» нужно выбрать «Экспортировать закрытый ключ». А порядок действий при выгрузке из КриптоПро CSP следующий:
В ОС Windows нажать «Пуск» перейти на «Панель управления» и выбрать «КриптоПро CSP».
Далее — вкладка «Сервис» и кнопка «Скопировать контейнер».
Через кнопку «Обзор» нужно выбрать контейнер и подтвердить (потребуется ввести PIN-код).
Затем нужно ввести название копии закрытого ключа и нажать «Готово».
Далее нужно выбрать, куда будет записан ключ, установить пароль для обеспечения дополнительной защиты и подтвердить действия.
Ещё раз напомним, что экспортировать закрытый ключ без необходимости, не рекомендуется. Его может использовать любой, кто имеет доступ к компьютеру, на который он скопирован.
Заказав электронную цифровую подпись в СберКорус, вы сможете самостоятельно настроить компьютер для работы с ЭЦП, посмотрев видеоинструкцию. При возникновении сложностей мы поможем настроить компьютер бесплатно. А также в любое время проконсультируем по интересующим вопросам.
Читаем контейнер закрытого ключа КриптоПро средствами OpenSSL
Речь пойдет о файлах primary.key, masks.key и header.key, которые лежат в директории ххххх.000 на флешке. Данные файлы входят в состав криптоконтейнера закрытого ключа электронной подписи криптопровайдера КриптоПро, формат которого нигде не опубликован. Целью данной статьи является чтение контейнера и преобразование закрытого ключа в формат, который может быть прочитан в библиотеке OpenSSL. Долгое время было распространено ошибочное суждение, что достаточно сделать нечто вида (primary_key XOR masks_key) и мы получим закрытый ключ в чистом (raw) виде, однако забегая вперед, можно утверждать, что в КриптоПро было применено более сложное преобразование, в худшем случае состоящее из более чем 2000 (двух тысяч) операций хеширования.
Файл primary.key
Содержит 32 байта ключа в формате Asn1. Это только половина ключа, полный ключ получается при делении этого числа по модулю Q на маску. Поле, хранящее модуль Q в библиотеке OpenSSL имеет название order. Маска лежит в файле masks.key:
Файл masks.key
Содержит 32 байта маски ключа в формате Asn1, зашифрованного на ключе хранения pwd_key. Далее 12 байт «затравочной» информации для генерации ключа хранения pwd_key, если криптоконтейнер защищен паролем, то пароль также участвует в генерации ключа хранения.
Далее контрольная сумма (имитозащита) 4 байта. Контрольной информацией для простоты мы пользоваться не будем, общий контроль будет осуществляться путем генерации открытого ключа и сравнения первых 8 байт полученного ключа с соответствующим полем из файла header.key:
Файл header.key
Читаем закрытый ключ и конвертируем
Основную работу выполняют следующие 3 функции:
1. Создаем ключ хранения исходя из 12-ти байтовой «соли» и пароля.
2. Расшифровываем основной ключ на ключе хранения.
3. Делим ключ с маской на маску.
Но так как в библиотеке OpenSLL операция деления по модулю традиционно отсутствует, пользуемся операцией взятия обратного числа и умножением.
Сборка утилиты конвертирования ключа
Далее сборка исходников описана для Linux версии.
Версию для Windows можно скачать отсюда там же есть сертификаты и закрытый ключ для тестирования, для сборки потребуется бесплатный компилятор Borland C++ 5.5
Компиляция OpenSSL библиотеки
После скачивания и распаковки исходных текстов openssl в целевой директории выполняем команды:
Получаем готовую библиотеку libcrypto.a в текущей директории.
Также потребуются заголовочные файлы из директорий engines/ccgost и include.
Компиляция privkey.c
Формирование файла закрытого ключа private.key
Тестовый закрытый ключ в криптоконтейнере lp-9a0fe.000, сертификат открытого ключа signer.cer и другие файлы для тестирования можно взять отсюда
Получаем результат работы:
Cохраняем в private.key
Пользуемся закрытым ключом private.key для подписывания файла file.txt
Проверяем подпись
Все работает просто замечательно!
Спасибо за внимание. Это была моя первая статья на хабре.
Практические приёмы работы с Реестром¶
В данном разделе рассматриваются практические примеры работы с реестром:
Лицензия КриптоПро в реестре [1017]¶
Лицензия КриптоПро хранится в реестре, её можно оттуда скопировать, либо ввести.
КриптоПро 3.6:
КриптоПро 3.9:
КриптоПро 4.0:
КриптоПро 3.0:
Где хранятся ключи(закрытый ключ сертификата) в реестре? [1739]¶
Реестр может использоваться в качестве ключевого носителя, другими словами, в него можно скопировать Квалифицированную электронную подпись (КЭП). После копирования закрытые ключи будут находиться:
Где SID (идентификатор пользователя) (англ. Security Identifier (SID)) — структура данных переменной длины, которая идентифицирует учетную запись пользователя, группы, домена или компьютера.
Рис. 23 – Узнать SID пользователя через командную строку
Чтобы скопировать текст из командной строки Windows, необходимо нажать правой кнопкой мыши на заголовок окна консоли и в меню «Свойства» на вкладке «Общие» включить опцию «Выделение мышью».
Восстановление закрытых ключей с неисправного компьютера¶
Обязательно ознакомьтесь с главой Работа с Редактором реестра и разделами:
Есть возможность восстановить закрытые ключи сертификата, если они были записаны в реестре компьютера и этот компьютер сломался.
Если условия выполняются, необходимо проделать следующее:
Открыть редактор реестра с помощью утилиты PsExec.exe (см. раздел Работа через утилиту PsExec ). В командной строке («Пуск → Выполнить → cmd») ввести команду;
Загрузить куст HKEY_LOCAL_MACHINE\Software (см. раздел Загрузка и выгрузка куста ):
В некоторых случаях сертификат попадает сюда:
Рис. 24 – Изменение пути к веткам реестра
Чтобы скопировать текст из командной строки Windows, необходимо нажать правой кнопкой мыши на заголовок окна консоли и в меню «Свойства» на вкладке «Общие» включить опцию «Выделение мышью».
Если разрядность(битность) текущей системы отличается от той, на которой находился контейнер закрытого ключа, то необходимо проверить и при необходимости исправить путь в текстовом редакторе.
Извлечение информации из резервной копии реестра¶
Резервные копии реестра обычно создаются автоматически каждые десять дней. Сохраняются они в папке:
Если, например, из реестра случайно был удален контейнер закрытого ключа, теоретически, есть возможность импортировать куст из резервной копии.
Доступ к считываетлям (Calais)¶
Иногда возникает проблема с доступом к считывателям смарт-карт. Она может быть связана с тем, что у текущего пользователя недостаточно прав на следующие ветки:
Может возникнуть ситуация, когда текущий пользователь системы даже не будет являться владельцем данных веток реестра, следовательно, у него не будет прав на них. В таком случае, необходимо сначала добавить текущего пользователя во владельцы этих веток, а затем проставить ему соответствующие права, как описано в разделе Права доступа (Разрешения) данного руководства.
Доверенные узлы¶
Если узел не добавляется в надежные узлы, можно добавить его вручную через реестр, для этого необходимо:
Рис. 25 – Добавление зон надежных узлов вручную
Что такое private key (pKey) зачем он нужен и с чем его едят?
Где же находится мой Private Key
Если ваш сертификат уже установлен, выполните следующие действия, чтобы найти файл секретного ключа для этих популярных операционных систем.
Apache
Местоположение вашего личного ключевого файла будет указано в главном файле конфигурации Apache, который называется httpd.conf или apache2.conf. Директива SSLCertificateKeyFile укажет путь на вашем сервере, где хранится ваш ключ.
Nginx
Вы сможете найти местоположение секретного ключа в файле виртуальных хостов вашего сайта. Перейдите к серверному блоку для этого сайта (по умолчанию в каталоге /var/www/). Откройте основной файл конфигурации для сайта и найдите директиву ssl_certificate_key которая предоставит вам путь к файлу для частного ключа (некоторые пользователи имеют отдельный файл конфигурации для своего SSL, например ssl.conf).
Windows (IIS)
На серверах Windows ОС управляет вашими файлами сертификатов для вас в скрытой папке, но вы можете получить закрытый ключ, экспортировав файл «.pfx», содержащий сертификаты и закрытый ключ. Подробнее процедура трансфера описана в разделе Экпорт-Ипорт сертификатов
Где еще может быть мой приватный ключ?
Если вы работаете с сервером, который обеспечивает рабочие соединения HTTPS, то ключ находится где-то на этом сервере или доступен для этого сервера на другом сервере, в противном случае протокол HTTPS работать не будет. Возможно, ваша организация использует специальную настраиваемую конфигурацию. Вы можете попробовать выполнить поиск на вашем сервере файла «.key» или выполнить шаги, по установке нового сертификат, которые должны указать где сохранить частного ключ. На некоторых платформах OpenSSL сохранит файл .key в том же каталоге, откуда была запущена команда -req
Частный, секретный, приватный ключ является «ключевым ключом», который расшифровывает зашифрованные данные, отправленные на сервер во время сеанса SSL. Если секретный ключ был скомпрометирован, зашифрованные данные могут быть легко дешифрованы тем, кто получил этот закрытый ключ. Таким образом, жизненно важно, чтобы закрытый ключ оставался защищенным на сервере в любое время. Открытый ключа встроена в файл CSR и отправляется в компанию CA. При одобрении и выдаче сертификата SSL компания Центр сертификации в цифровом виде подписывает открытый ключ и отправляет его вам для установки на сервер в соответствии с вашим закрытым ключом.
Как найти или восстановить секретный ключ SSL сертификата в среде IIS MicroSoft?
SSL-сертификат установлен, но отсутствует закрытый ключ. Каковы шаги по восстановлению секретного ключа сертификата SSL в среде Microsoft Internet Information Services (IIS)? Сертификаты SSL не включают закрытый ключ. Закрытый ключ находится на сервере, который сгенерировал запрос подписи сертификата (CSR). При правильной установке сертификат сервера будет соответствовать закрытому ключу, как показано ниже.
Решение: Чтобы восстановить закрытый ключ, выполните следующие действия.
Если Windows смог восстановить закрытый ключ, вы увидите следующее сообщение:
Установка сертификата и закрытого ключа
Мы опишем установку сертификата электронной подписи и закрытого ключа для ОС семейства Windows. В процессе настройки нам понадобятся права Администратора (поэтому нам может понадобится сисадмин, если он у вас есть).
Если вы еще не разобрались что такое Электронная подпись, то пожалуйста ознакомьтесь вот с этой инструкцией. Или если еще не получили электронную подпись, обратитесь в Удостоверяющий центр, рекомендуем СКБ-Контур.
Хорошо, предположим у вас уже есть электронная подпись (токен или флешка), но OpenSRO сообщает что ваш сертификат не установлен, такая ситуация может возникнуть, если вы решили настроить ваш второй или третий компьютер (разумеется подпись не «прирастает» только к одному компьютеру и ее можно использовать на нескольких компьютерах). Обычно первоначальная настройка осуществляется с помощью техподдержки Удостоверяющего центра, но допустим это не наш случай, итак поехали.
1. Убедитесь что КриптоПро CSP 4 установлен на вашем компьютере
Для этого зайдите в меню Пуск КРИПТО-ПРО КриптоПро CSP запустите его и убедитесь что версия программы не ниже 4-й.
Если ее там нет, то скачайте, установите и перезапустите браузер.
2. Если у вас токен (Рутокен например)
Прежде чем система сможет с ним работать понадобится установить нужный драйвер.
Алгоритм такой: (1) Скачиваем; (2) Устанавливаем.
Для токена может понадобиться стандартный (заводской) пин-код, здесь есть стандартные пин-коды носителей.
3. Если закрытый ключ в виде файлов
Тут есть тонкость если эти файлы записаны на жесткий диск вашего компьютера, то КриптоПро CSP не сможет их прочитать, поэтому все действия надо производить предварительно записав их на флешку (съемный носитель), причем нужно расположить их в папку первого уровня, например: E:\Andrey\ <файлики>, если расположить в E:\Andrey\keys\ <файлики>, то работать не будет.
(Если вы не боитесь командной строки, то съемный носитель можно сэмулировать примерно так: subst x: C:\tmp появится новый диск (X:), в нем будет содержимое папки C:\tmp, он исчезнет после перезагрузки. Такой способ можно использовать если вы планируете установить ключи в реестр)
Нашли файлы, записали на флешку, переходим к следующему шагу.
4. Установка сертификата из закрытого ключа
Теперь нам нужно получить сертификат, сделать это можно следующим образом:
5. Использование электронной подписи без токена или флешки (установка в реестр)
Если скорость и удобство работы для вас стоит чуть выше чем безопасность, то можно установить ваш закрытый ключ в реестр Windows. Для этого нужно сделать несколько простых действий:
Чтобы для сертификата проставить ссылку на этот закрытый ключ выполните действия из пункта (4).
Важное замечание: портал OpenSRO не «увидит» сертификат, если вышел срок его действия.