- С помощью команды smime
- Управление ключевыми файлами и конвертация (rsa, pkey)
- Документация
- Как добавить корневой сертификат в доверенные в linux в веб браузеры
- Как добавить корневой сертификат в доверенные в linux на уровне системы
- Как пользоваться openssl (команды openssl)
- Как создать сертификаты ssl (tls) для сайтов
- Общесистемные корневые ca сертификаты
- Редактирования ключей gpg
- Симметричное шифрование файлов в openssl
- Три, сертификат управления инструментом keytool
- Файлы gpg
- Форматы ключей и сертификатов
- Шифрование файлов и данных с gpg
С помощью команды smime
Решение для безопасного и высокозащищенного кодирования любого файла в OpenSSL и командной строке:
Для шифрования файлов вы должны иметь готовый сертификат X.509 в формате PEM.
Сгененировать незашифрованный приватный ключ вместе с сертификатом можно следующей командой:
openssl req -x509 -nodes -days 100000 -newkey rsa:8192 -keyout private_key.pem -out certificate.pem
Сгененировать зашифрованный приватный ключ вместе с сертификатом можно следующей командой:
openssl req -x509 -days 100000 -newkey rsa:8192 -keyout private_key.pem -out certificate.pem
С уже существующим зашифрованным или незашифрованным приватным ключом сертификат можно создать следующей командой:
openssl req -x509 -new -days 100000 -key private_key.pem -out certificate.pem
Чтобы зашифровать файл выполните:
openssl smime -encrypt -binary -aes-256-cbc -in plainfile.zip -out encrypted.zip.enc -outform DER yourSslCertificate.pem
В этой команде:
- smime — ssl команда для S/MIME утилиты
- -encrypt — выбранным действием с файлом является шифрование
- -binary — использовать безопасный файловый процесс. Обычно входное сообщение преобразуется в «канонический» формат, как того требует спецификация S/MIME, этот переключатель отключает его. Это необходимо для всех двоичных файлов (например, изображений, звуков, ZIP-архивов).
- -aes-256-cbc — выбран шифр AES в 256 бит для шифрования (сильный). Если не указано, используется 40-битный RC2 (очень слабый).
- -in plainfile.zip — файл для шифрованиия
- -out encrypted.zip.enc — файл для сохранения зашифрованных данных
- -outform DER — закодировать выходной файл как двоичный файл. Если не указан, файл будет закодирован в base64, а размер файла будет увеличен на 30%.
- yourSslCertificate.pem — имя файла вашего сертификата. Он должен быть в формате PEM.
Эта команда может очень эффективно сильно шифровать большие файлы независимо от их формата.
Известная проблема: что-то не так происходит, при попытках зашифровать огромный файл (> 600 МБ). Ошибка не выводится, но зашифрованный файл будет повреждён. Всегда проверяйте каждый файл! (или используйте PGP — больше поддержки шифрования файлов с открытым ключом).
Расшифровка файла:
openssl smime -decrypt -binary -in encrypted.zip.enc -inform DER -out decrypted.zip -inkey private.key -passin pass:ВАШ-ПАРОЛЬ
В этой команде:
- -inform DER — то же самое, что и в -outform выше
- -inkey private.key — имя файла вашего приватного ключа. Он должен быть в формате PEM и может быть зашифрован паролем.
- -passin pass:ВАШ-ПАРОЛЬ — ваш пароль для зашифрованного приватного ключа.
Итак, при симметричном шифровании нужно выбрать хороший алгоритм шифроания и не забыть указать большое количество итераций. А для асимметричного шифрования имеются ограничения и костыли. По этой причине вновь рекомендуется использовать gpg:
Управление ключевыми файлами и конвертация (rsa, pkey)
(1) openssl rsa [options] <infile >outfile
- -in <infile> Введите ключевой файл
- -passin pass:<password> Введите пароль защиты ключа
- -inform <DER|NET|PEM> Введите формат ключа, по умолчанию PEM
- -out <outfile> Выходной ключевой файл
- -outform <DER|NET|PEM> Формат выходного ключа, по умолчанию – PEM
- -passout pass:<password> Пароль защиты выходного ключа
- -pubin Указывает, что ввод – это открытый ключ, а вывод по умолчанию – это пара ключей или закрытый ключ.
- -pubout Экспорт открытого ключа в файл (открытый ключ, как правило, не нужно шифровать)
- -des, -des3, -aes128, -aes192, -aes256 Указать алгоритм шифрования ключа
- -text Очистить ключевые параметры вывода текста
- -noout Не выводить ключ в файл
- -check Проверить согласованность
- -modulus Отображение ключевого модуля RSA
пример
# Извлечь публичный ключ ключа в отдельный файл openssl rsa -in rsakey0.pem -pubout -out rsakey0.pub # Формат ключа конверсии (DER-> PEM) openssl rsa -in rsakeypair.der -inform DER -out rsakeypair.pem# Изменить алгоритм шифрования, снять защиту паролем
openssl rsa -in rsakeypair.pem -passin pass:123456 -des3 -out rsakeypair1.pem
(2) openssl pkey [options] v1.0.1
(3) Другой способ преобразовать ключи формата PEM в ключи формата DER, которые могут использоваться Java JCE.
openssl pkcs8 -topk8 -inform PEM -outform DER -in <rsa_pem.key> -out <pkcs8_der.key> -nocrypt(4) преобразование открытого ключа OpenSSL и формата открытого ключа OpenSSH
Формат открытого ключа, сгенерированного OpenSSL, несовместим с форматом открытого ключа OpenSSH. Если открытый ключ, сгенерированный OpenSSL, используется для настройки SSH-соединения, проверка завершится неудачно.
Формат открытого ключа OpenSSL (PEM):
Формат открытого ключа OpenSSH:
- Восстановить открытый ключ формата OpenSSH из закрытого ключа
ssh-keygen -y -f priKey.pem > sshPubkey.pub- Преобразование открытого ключа формата OpenSSL в формат OpenSSH
ssh-keygen -i -m PKCS8 -f sslPubKey.pub〉 sshPubKey.pub # -m поддерживает PEM, PKCS8, RFC4716- Преобразование открытого ключа формата OpenSSH в открытый ключ формата OpenSSL
ssh-keygen -e -m PEM -f sshPubKey.pub> sslPubKey.pub # -m поддерживает PEM, PKCS8, RFC4716Документация
Сертификат электронной подписи – это электронный документ или документ на бумажном носителе, выданные удостоверяющим центром либо доверенным лицом удостоверяющего центра и подтверждающие принадлежность ключа проверки электронной подписи владельцу сертификата ключа проверки электронной подписи (63-ФЗ “Об электронной подписи”).
Чтобы получить сертификат подписи из Удостоверяющего центра (УЦ), нужно создать запрос на сертификат в КриптоАРМ ГОСТ и отправить его в Удостоверяющий центр. Запрос можно отправить самостоятельно или автоматически, в КриптоАРМ ГОСТ, если Удостоверяющий центр использует ПАК “КриптоПро УЦ 2.0”.
Чтобы создать запрос на сертификат и отправить его самостоятельно:
Откройте вкладку “Сертификаты” и нажмите “ ”.
В появившемся меню нажмите “Создать запрос”.
На вкладке “Сведения о владельце сертификата” введите личные данные.
Нажмите “Готово”. Выберите носитель для создания контейнера с запросом на сертификат.
Установите пароль для контейнера с запросом на сертификат и нажмите “ОК”.
Созданный запрос появится во вкладке “Сертификаты” – “Запросы”.
Чтобы экспортировать запрос, выделите его и в нижнем правом угле нажмите кнопку “Экспортировать”.
В окне “Экспорт сертификата” укажите необходимые настройки и нажмите “Экспорт”.
Укажите путь экспорта файла запроса.
Файл запроса появится в указанной директории с названием “export.cer” по умолчанию. Направьте его в Удостоверяющий центр.
Чтобы создать и отправить запрос на сертификат автоматически через сервис УЦ:
В Вашем Удостоверяющем центре узнайте URL, по которому необходимо сформировать запрос.
Откройте вкладку “Сертификаты” и нажмите “ ”.
В появившемся меню нажмите “Получить сертификат через сервис УЦ”.
Выберите пункт “Добавление нового сервиса” и нажмите “Готово”.
Откроется окно ввода параметров подключения с автоматическим выбором функции “Регистрация нового пользователя”. Если пользователь ещё не зарегистрирован в УЦ, введите данные для регистрации и нажмите кнопку “Подключить”.
Если пользователь уже зарегистрирован в УЦ, отключите функцию “Регистрация нового пользователя”, введите URL сервера и нажмите “Подключить”.
Введите данные для авторизации и нажмите “Подключить”.
Удостоверяющий центр должен появиться в списке в разделе “Сертификаты” в списке “Получить сертификат через сервис УЦ”. Теперь можно создать запрос на сертификат.
Откройте вкладку “Сертификаты” в КриптоАРМ ГОСТ и нажмите “ ”.
В появившемся меню нажмите “Получить сертификат через сервис УЦ”.
Выделите нужный удостоверяющий центр в списке, выберите тип владельца сертификата и нажмите “Готово”.
В новом окне “Создать запрос” заполните сведения о владельце так же, как при добавлении УЦ.
Заполните параметры ключа. Нажмите “Готово”.
Выберите ключевой носитель для хранения контейнера сертификата.
Установите пароль для контейнера сертификата.
Возникнет окно с информацией о результатах операции.
Запрос появится на вкладке “Запросы” в разделе меню “Сертификаты”. Запросы можно экспортировать, удалить или показать в каталоге, выбрав соответствующие кнопки в правой нижней области окна.
Для запроса сертификата будут отображаться различные статусы:
Сертификат подтверждён: выпущен для данного запроса и установлен в Хранилище КриптоПро;
Запрос сертификата отклонен удостоверяющим центром;
Запрос находится в обработке;
Проблемы с соединением, не позволяющим отобразить статус запроса.
Как добавить корневой сертификат в доверенные в linux в веб браузеры
Chrome, Chromium, Firefox и созданные на их основе веб браузеры доверяют корневым сертификатам, установленным на уровне системы. То есть вам достаточно добавить в доверенные CA сертификат как это показано в предыдущем разделе.
Причём эти браузеры хотя и используют NSS, они игнорируют общесистемные сертификаты NSS, которые можно добавить в файл /etc/pki/nssdb!
Тем не менее приложения, которые используют NSS (такие как Firefox, Thunderbird, Chromium, Chrome) хранят свои списки доверенных сертификатов в файлах cert9.db. Чтобы добавить свой сертификат в каждый из этих файлов можно использовать скрипт.
Сохранить следующий код в файл CAtoCert9.sh:
#!/bin/bash
certfile="root.cert.pem"
certname="My Root CA"
for certDB in $(find ~/ -name "cert9.db")
do
certdir=$(dirname ${certDB});
certutil -A -n "${certname}" -t "TCu,Cu,Tu" -i ${certfile} -d sql:${certdir}
doneВ этом файле измените значение certfile на имя файла вашего сертификата и значение certname на имя вашего сертификата, сохраните и закройте файл.
Затем запустите его следующим образом:
bash ./CAtoCert9.sh
В результате в домашней папке пользователя будут найдены все файлы cert9.db и в каждый из них будет добавлен указанный CA сертификат.
Вы можете добавить CA сертификаты в графическом интерфейсе каждого браузера.
- В настройках Chrome: Конфиденциальность и безопасность → Безопасность → Настроить сертификаты → Центры сертификации
- В настройках Chromium: Конфиденциальность и безопасность (выбрать «Ещё») → Настроить сертификаты → Центры сертификации
Нажмите кнопку «Импорт»:
Выберите файл с сертификатом.
Укажите, какие полномочия вы даёте этому сертификату:
- В настройках Firefox: Приватность и Защита → Сертификаты → Просмотр сертификатов → Центры сертификации:
Нажмите кнопку «Импортировать»:
Выберите файл с сертификатом.
Укажите, какие полномочия вы даёте этому сертификату:
Как добавить корневой сертификат в доверенные в linux на уровне системы
Сертификат с расширением .crt можно открыть двойным кликом и просмотреть его содержимое:
Если вы работаете в системе от обычного пользователя (не root), то кнопка «Импортировать» будет недоступна.
Чтобы разблокировать кнопку «Импортировать», выполните следующую команду:
sudo gcr-viewer /ПУТЬ/ДО/СЕРТИФИКАТА.crt
Например:
sudo gcr-viewer ./HackWareCA.crt
Данный способ может не сработать, поэтому рассмотрим, как добавить доверенные корневые центры сертификации в командной строке.
Суть метода очень проста:
- Добавить свой корневой CA сертификат в папку, предназначенную для таких сертификатов.
- Запустить программу для обновления общесистемного списка сертификатов.
Пути и команды в разных дистрибутивах Linux чуть различаются.
Просмотреть Subject всех корневых CA сертификатов можно уже знакомой командой:
awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt
Для демонстрации я добавлю сертификат с Common Name, включающим «HackWare», тогда для проверки, имеется ли сертификат с таким именем среди корневых CA, я могу использовать команду:
awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt | grep -i HackWareДля добавления своего корневого CA в доверенные в Debian, Kali Linux, Linux Mint, Ubuntu и их производных:
1. Проверьте, существует ли директория /usr/local/share/ca-certificates:
ls -l /usr/local/share/ca-certificates
Если её ещё нет, то создайте:
sudo mkdir /usr/local/share/ca-certificates
Сертификат должен быть в формате PEM (обычно так и есть) и иметь расширение .crt — если расширение вашего сертификата .pem, то достаточно просто поменять на .crt.
2. Скопируйте ваш сертификат командой вида:
sudo cp СЕРТИФИКАТ.crt /usr/local/share/ca-certificates/
Например:
sudo cp ./HackWareCA.crt /usr/local/share/ca-certificates/
3. Запустите следующую команду для обновления общесистемного списка:
sudo update-ca-certificates
Пример вывода:
Updating certificates in /etc/ssl/certs... 1 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... Adding debian:HackWareCA.pem done. done.
Проверим наличие нашего CA сертификата среди доверенных:
awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt | grep -i HackWareСертификат успешно найден:
Чтобы его удалить:
sudo rm /usr/local/share/ca-certificates/СЕРТИФИКАТ.crt sudo update-ca-certificates
Для добавления своего корневого CA в доверенные в Arch Linux, BlackArch и их производных:
1. Выполните команду вида:
sudo cp ./СЕРТИФИКАТ.crt /etc/ca-certificates/trust-source/anchors/
Например:
sudo cp ./HackWareCA.crt /etc/ca-certificates/trust-source/anchors/
2. Обновите общесистемный список доверенных CA:
sudo update-ca-trust
Чтобы удалить этот сертификат:
sudo rm /etc/ca-certificates/trust-source/anchors/СЕРТИФИКАТ.crt sudo update-ca-trust
Добавление сертификатов в базу данных NSS
Некоторые приложения используют базу данных NSS, и у вас может быть необходимость добавить доверенные CA в неё.
Последующие изменения повлияют только на приложения, использующие базу данных NSS и учитывающие файл /etc/pki/nssdb.
1. Сначала создайте структуру каталогов для системных файлов базы данных NSS:
sudo mkdir -p /etc/pki/nssdb
Затем создайте новый набор файлов базы данных. Пароль нужен для того, чтобы базу данных могли редактировать только люди, которые его знают. Если все пользователи в системе (и с доступом к резервным копиям) заслуживают доверия, этот пароль можно оставить пустым.
sudo certutil -d sql:/etc/pki/nssdb -N
2. Убедитесь, что файлы базы данных доступны для чтения всем:
sudo chmod go r /etc/pki/nssdb/*
3. Теперь, когда доступны файлы базы данных NSS, добавьте сертификат в хранилище следующим образом:
sudo certutil -d sql:/etc/pki/nssdb -A -i ФАЙЛ-СЕРТИФИКАТА.crt -n "ИМЯ-СЕРТИФИКАТА" -t "C,,"
Например:
sudo certutil -d sql:/etc/pki/nssdb -A -i ./HackWareCA.crt -n "HackWare CA" -t "C,,"
Биты доверия, используемые в приведённом выше примере, помечают сертификат как надёжный для подписи сертификатов, используемых для связи SSL/TLS. Имя (указывается после опции -n), используемое в команде, можно выбрать любое, но убедитесь, что его легко отличить от других сертификатов в магазине.
Для проверки:
certutil -L -d /etc/pki/nssdb
Аналогичные инструкции можно использовать для включения сертификата только в базу данных NSS конкретного пользователя:
certutil -d sql:$HOME/.pki/nssdb -A -i ФАЙЛ-СЕРТИФИКАТА.crt -n "ИМЯ-СЕРТИФИКАТА" -t "C,,"
Удаление из файлов базы данных NSS
Чтобы удалить сертификат из любой базы данных NSS, используйте команду certutil следующим образом. В этом примере используется общесистемное расположение базы данных NSS, но его можно легко изменить на пользовательское ~/.pki/nssdb местоположение.
sudo certutil -d sql:/etc/pki/nssdb -D -n "certificateName"
Как пользоваться openssl (команды openssl)
Команды OpenSSL не столько сложные, сколько запутанные.
Во-первых, их много (48 основных команд, 28 digest команд, 84 cipher команды, а также алгоритмы и методы), некоторые из них выполняют более чем одну функцию, некоторые имеют пересекающиеся функции и не всегда непонятно, какую команду выбрать.
Синтаксис использования команд OpenSSL:
openssl КОМАНДА ОПЦИИ
Ещё один пример как команды OpenSSL могут сбить с толку: у команды x509 есть опция -req, а у команды req есть опция -x509.
Если вы хотите получить справку по командам OpenSSL, то вам нужно знать, что это делается так:
man openssl-КОМАНДА # ИЛИ man КОМАНДА
Например:
man openssl-req man openssl-x509 man openssl-genpkey man openssl-enc man openssl-rsa # ИЛИ man req man x509 man genpkey man enc man rsa
При этом если по аналогии попытаться использовать в командной строке openssl-req или req, то такие команды будет не найдены (нужно использовать openssl req …).
Команды openssl могут быть громоздкими за счёт того, что через одну из опций команды передаются опции сертификата.
На самом деле, для типичных задач используется всего несколько команд и несколько опций. Поэтому если понимать суть, то всё довольно просто.
Перечень команд OpenSSL, которые мы будем использовать:
- genpkey (заменяет genrsa, gendh и gendsa) — генерирует приватные ключи
- req — утилита для создания запросов на подпись сертификата и для создания самоподписанных сертификатов PKCS#10
- x509 — утилита для подписи сертификатов и для показа свойств сертификатов
- rsa — утилита для работы с ключами RSA, например, для конвертации ключей в различные форматы
- enc — различные действий с симметричными шифрами
- pkcs12 — создаёт и парсит файлы PKCS#12
- crl2pkcs7 — программа для конвертирования CRL в PKCS#7
- pkcs7 — выполняет операции с файлами PKCS#7 в DER или PEM формате
- verify — программа для проверки цепей сертификатов
- s_client — команда реализует клиент SSL/TLS, который подключается к удалённому хосту с использованием SSL/TLS. Это очень полезный инструмент диагностики для серверов SSL
- ca — является минимальным CA-приложением. Она может использоваться для подписи запросов на сертификаты в различных формах и генерировать списки отзыва сертификатов. Она также поддерживает текстовую базу данных выданных сертификатов и их статус
- rand — эта команда генерирует указанное число случайных байтов, используя криптографически безопасный генератор псевдослучайных чисел (CSPRNG)
- rsautl — команда может быть использована для подписи, проверки, шифрования и дешифрования данных с использованием алгоритма RSA
- smime — команда обрабатывает S/MIME почту. Она может шифровать, расшифровывать, подписывать и проверять сообщения S/MIME
Чтобы увидеть полный список команд выполните:
openssl list -commands
Пример вывода:
asn1parse ca ciphers cms crl crl2pkcs7 dgst dhparam dsa dsaparam ec ecparam enc engine errstr gendsa genpkey genrsa help list nseq ocsp passwd pkcs12 pkcs7 pkcs8 pkey pkeyparam pkeyutl prime rand rehash req rsa rsautl s_client s_server s_time sess_id smime speed spkac srp storeutl ts verify version x509
Как создать сертификаты ssl (tls) для сайтов
Создайте корневой приватный ключ
Внимание: этот ключ используется для подписи запросов сертификатов, любой, кто получил этот ключ, может подписывать сертификаты от вашего имени, поэтому храните его в безопасном месте:
Генерация приватного ключа RSA используя параметры по умолчанию (ключ будет сохранён в файл с именем rootCA.key):
openssl genpkey -algorithm RSA -out rootCA.key
Опция -out указывает на имя файла для сохранения, без этой опции файл будет выведен в стандартный вывод (на экран). Имя выходного файла не должно совпадать с именем входного файла.
Для безопасности ключа его следует защитить паролем. Генерация приватного ключа RSA используя 128-битное AES шифрование (-aes-128-cbc) и парольную фразу “hello” (-pass pass:hello):
openssl genpkey -algorithm RSA -out rootCA.key -aes-128-cbc -pass pass:hello
Конечно, опцию -pass pass:hello можно не указывать, тогда вам будет предложено ввести пароль во время генерации ключа.
Список поддерживаемых симметричных алгоритмов шифрования приватного ключа можно узнать в документации (раздел SUPPORTED CIPHERS):
man enc
Если для генерируемого ключа не указано количество бит, то по умолчанию используется 2048, вы можете указать другое количество бит с помощью команды вида (будет создан 4096-битный ключ):
openssl genpkey -algorithm RSA -out rootCA.key -aes-128-cbc -pkeyopt rsa_keygen_bits:4096
Создание самоподписанного корневого сертификата
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt
Здесь мы использовали наш корневой ключ для создания корневого сертификата (файл rootCA.crt), который должен распространяться на всех компьютерах, которые нам доверяют. А приватный ключ (файл rootCA.key) должен быть секретным, поскольку он будет использоваться для подписи сертификатов серверов.
Создание сертификатов (делается для каждого домена) включает в себя несколько этапов. Эту процедуру необходимо выполнить для каждого домена/сервера, которым требуется доверенный сертификат от нашего ЦС.
Чтобы создать приватный ключ сертификата
Общесистемные корневые ca сертификаты
Если вы задаётесь вопросом, в какой папке хранятся сертификаты в Windows, то правильный ответ в том, что в Windows сертификаты хранятся в реестре. Причём они записаны в виде бессмысленных бинарных данных. Чуть ниже будут перечислены ветки реестра, где размещены сертификаты, а пока давайте познакомимся с программой для просмотра и управления сертификатами в Windows.
В Windows просмотр и управление доверенными корневыми сертификатами осуществляется в программе Менеджер Сертификатов.
Чтобы открыть Менеджер Сертификатов нажмите Win r, введите в открывшееся поле и нажмите Enter:
certmgr.msc
Перейдите в раздел «Доверенные корневые центры сертификации» → «Сертификаты»:
Здесь для каждого сертификата вы можете просматривать свойства, экспортировать и удалять.
Просмотр сертификатов в PowerShell
Чтобы просмотреть список сертификатов с помощью PowerShell:
Get-ChildItem cert:LocalMachineroot | format-list
Чтобы найти определённый сертификат выполните команду вида (замените «HackWare» на часть искомого имени в поле Subject):
Get-ChildItem cert:LocalMachineroot | Where {$_.Subject -Match "HackWare"} | format-listТеперь рассмотрим, где физически храняться корневые CA сертификаты в Windows. Сертификаты хранятся в реестре Windows в следующих ветках:
Сертификаты уровня пользователей:
Сертификаты уровня компьютера:
- HKEY_LOCAL_MACHINESoftwareMicrosoftSystemCertificates — содержит настройки для всех пользователей компьютера
- HKEY_LOCAL_MACHINESoftwarePoliciesMicrosoftSystemCertificates — как и предыдущее расположение, но это соответствует сертификатам компьютера, развёрнутым объектом групповой политики (GPO (Group Policy))
Сертификаты уровня служб:
- HKEY_LOCAL_MACHINESoftwareMicrosoftCryptographyServicesServiceNameSystemCertificates — содержит настройки сертификатов для всех служб компьютера
Сертификаты уровня Active Directory:
- HKEY_LOCAL_MACHINESoftwareMicrosoftEnterpriseCertificates — сертификаты, выданные на уровне Active Directory.
И есть несколько папок и файлов, соответствующих хранилищу сертификатов Windows. Папки скрыты, а открытый и закрытый ключи расположены в разных папках.
Пользовательские сертификаты (файлы):
Компьютерные сертификаты (файлы):
- C:ProgramDataMicrosoftCryptoRSAMachineKeys
Рассмотрим теперь где хранятся корневые CA сертификаты веб-браузеров.
Редактирования ключей gpg
Для редактирования ключа определённого пользователя выполните команду (замените ‘Alexey Miloserdov’ на желаемый идентификатор пользователя):
gpg --edit-key 'Alexey Miloserdov'
Вы попадёте в интерактивный интерфейс командной строки, там будут работать следующие команды:
quit выйти из этого меню save сохранить и выйти help показать данную справку fpr показать отпечаток ключа grip показать код ключа list вывести список ключей и идентификаторов пользователя uid выбрать идентификатор пользователя N key выбрать подключ N check проверка подписей sign подписать выбранные идентификаторы пользователя [* описание команд см. ниже] lsign локально подписать выбранные идентификаторы пользователя tsign подписать выбранные идентификаторы пользователя подписью доверия nrsign подписать выбранные идентификаторы пользователя без возможности отзыва adduid добавить идентификатор пользователя addphoto добавить фотоидентификатор deluid удалить выбранные идентификаторы пользователя addkey добавить подключ addcardkey добавить ключ на криптографическую карту keytocard переместить ключ на криптографическую карту bkuptocard переместить архивный ключ на криптографическую карту delkey удалить выбранные подключи addrevoker добавить ключ отзыва delsig удалить подписи с выбранных идентификаторов пользователя expire сменить срок действия ключа или выбранных подключей primary пометить выбранный идентификатор пользователя как первичный pref список предпочтений (экспертам) showpref список предпочтений (подробный) setpref установить список предпочтений для выбранных идентификаторов пользователя keyserver установить URL предпочтительного сервера ключей для выбранных идентификаторов пользователя notation установить замечание для выбранных идентификаторов пользователя passwd сменить фразу-пароль trust изменить уровень доверия владельцу revsig отозвать подписи у выбранных идентификаторов пользователя revuid отозвать выбранные идентификаторы пользователя revkey отозвать ключ или выбранные подключи enable подключить ключ disable отключить ключ showphoto показать выбранные фотоидентификаторы clean сжать непригодные идентификаторы пользователей и удалить непригодные подписи из ключа minimize сжать непригодные идентификаторы пользователей и удалить все подписи из ключа * У команды 'sign' может быть приставка 'l' (локальные подписи, lsign), 't' (подписи доверия, tsign), 'nr' (неотзываемые, nrsign) или любое их сочетание (ltsign, tnrsign и т.д.).
Симметричное шифрование файлов в openssl
Данный вид шифрования выполняется командой enc. Кстати она также задействуется при создании ключей, если выбрано их шифрование — это шифрование выполняется с помощью enc.
Для шифрования используется команда следующего вида:
openssl enc -ШИФР -in ДЛЯ-ШИФРОВАНИЯ -out ЗАШИФРОВАНЫЕ-ДАННЫЕ
Для расшифровки похожая команда, но с опцией -d, также ЗАШИФРОВАНЫЕ-ДАННЫЕ теперь являются входными, а на выходе РАСШИФРОВАННЫЕ-ДАННЫЕ:
openssl enc -ШИФР -d -in ЗАШИФРОВАНЫЕ-ДАННЫЕ -out РАСШИФРОВАННЫЕ-ДАННЫЕ
В качестве ШИФРА рекомендуют aes-256-cbc, а полный список шифров вы можете посмотреть командой:
openssl enc -list
Ещё настоятельно рекомендуется использовать опцию -iter ЧИСЛО. Она использует указанное ЧИСЛО итераций для пароля при получении ключа шифрования. Высокие значения увеличивают время, необходимое для взлома пароля брут-форсом зашифрованного файла.
Эта опция включает использование алгоритма PBKDF2 для получения ключа. Указывать можно высокие значения — десятки и сотни тысяч. В разделе «Как создать базу данных KeePass» при создании базы данных используется такой же алгоритм (первая версия), там для 1 секундной задержки я выставлял значение в 25 миллионов инераций.
Пример шифрования файла art.txt шифром aes-256-cbc, зашифрованные данные будут помещены в файл с именем art.txt.enc, при получении ключа шифрования используется десять миллионов итераций (на моём железе выполнение команды заняло несколько секунд):
openssl enc -aes-256-cbc -in art.txt -out art.txt.enc -iter 10000000
Введите, а затем подтвердите пароль для шифрования:
В результате будет создан зашифрованный файл art.txt.enc.
Для расшифровки файла art.txt.enc и сохранения данных в файл art-new.txt:
openssl enc -aes-256-cbc -d -in art.txt.enc -out art-new.txt -iter 10000000
Если файл успешно расшифрован, то не будет выведена никакая дополнительная информация.
В случае неудачной расшифровки будет показано примерно следующее:
bad decrypt 140381536523584:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:crypto/evp/evp_enc.c:583:
Возможные причины ошибки:
- неверный пароль
- неверный алгоритм для расшифровки
- неправильно указано количество итераций с опцией -iter
- неверно указан файл для расшифровки
Обратите внимание, что для расшифровки также нужно указать опцию -iter с тем же самым значением, которое было указано при шифровании. Конечно, можно не использовать опцию -iter при шифровании (а, следовательно, и при расшифровке), но в этом случае шифрование считается ненадёжным!
Не рекомендуется пропускать опцию. Если у вас слабое железо ИЛИ если файл будет расшифровываться на слабом железе, то вам необязательно использовать такие большие значения -iter — укажите хотя бы десятки или сотни тысяч (например, полмиллиона).
Предыдущие команды для шифрования и расшифровки могут запускаться чуть иначе:
openssl ШИФР
Например:
openssl aes-256-cbc -in art.txt -out art.txt.enc -iter 10000000
То есть пропускается слово enc, и перед шифром убирается дефис. Обе команды равнозначны.
Зашифрованный файл представляет собой бинарные данные, которые не получится передать, например, в текстовом сообщении (в чате). Используя опцию -a (или её псевдоним -base64), можно закодировать зашифрованные данные в кодировку Base64:
openssl enc -aes-256-cbc -in art.txt -out art.txt.b64 -iter 10000000 -a
Содержимое полученного файла art.txt.b64 можно открыть любым текстовым редактором и переслать в мессенджере или в чате.
Для расшифровки также нужно указать опцию -a:
openssl enc -aes-256-cbc -d -in art.txt.b64 -out art-new.txt -iter 10000000 -a
Чтобы просто закодировать бинарный файл в кодировку base64:
openssl enc -base64 -in file.bin -out file.b64
Чтобы раскодировать этот файл:
openssl enc -base64 -d -in file.b64 -out file.bin
Чтобы зашифровать файл используя указанный ПАРОЛЬ в команде (не интерактивный режим):
openssl enc -aes128 -pbkdf2 -d -in file.aes128 -out file.txt -pass pass:ПАРОЛЬ
Зашифровать файл, затем закодировать его с помощью base64 (например, его можно отправить по почте), используя AES-256 в режиме CTR и с получением производной ключа PBKDF2:
openssl enc -aes-256-ctr -pbkdf2 -a -in file.txt -out file.aes256
Декодировать файл из Base64 , затем расшифровывать его, используя пароль, указанный в файле:
openssl enc -aes-256-ctr -pbkdf2 -d -a -in file.aes256 -out file.txt -pass file:<ФАЙЛ-С-ПАРОЛЕМ>
Три, сертификат управления инструментом keytool
keytool – это инструмент управления ключами, сертификатами и библиотекой сертификатов, предоставляемый Java. Могут быть выполнены различные операции, такие как создание ключей и сертификатов.
Подкоманды keytool следующие:
-certreq Создать запрос сертификата-changealias Изменить псевдоним записи-delete удалить запись-exportcert Экспортный сертификат-genkeypair Создать пару ключей-genseckey Создать ключ-gencert Сгенерировать сертификат в соответствии с запросом сертификата-importcert Импортировать сертификат или цепочку сертификатов-importkeystore импортирует одну или все записи из других хранилищ ключей-keypasswd Изменить ключевой пароль записи-list Список записей в хранилище ключей-printcert Распечатать содержимое сертификата-printcertreq Распечатать содержимое запроса на сертификат-printcrl Распечатать содержимое файла CRL-storepasswd Изменить пароль хранилища хранилища ключей
Вы также можете использоватьkeytool -command_name -helpПросмотр справочной информации по каждой подкоманде
- Импортируйте сертификат из библиотеки pkcs12 в библиотеку сертификатов jks (формат хранилища ключей java)
keytool -importkeystore -srckeystore subcert.p12 -destkeystore subcert.jks -srcstoretype pkcs12Вам необходимо ввести пароль целевой библиотеки и пароль исходной библиотеки.Если файл библиотеки jks не существует, он будет автоматически сгенерирован.
- Импортируйте сертификат в библиотеку jks
keytool -importcert -keystore subcert.jks -alias rootca -file rootcert.crt
Вам необходимо ввести пароль целевой базы данных и указать, следует ли доверять добавленному сертификату. -alias можно не указывать, он будет автоматически сгенерирован, если файл библиотеки jks не существует.
Библиотека сертификатов или библиотека ключей может хранить как ключ, так и сертификат.Если только сертификат (сертификат содержит открытый ключ), но не закрытый ключ, сгенерированная библиотека является доверительной библиотекой.
Просмотр отпечатка сертификата
keytool -list -keystore <keystoreFile> -alias <aliasName>
Жду добавления …
Файлы gpg
Имеется несколько конфигурационных файлов для контроля определённых аспектов операций gpg. Если не сказано другое, ожидается что они размещены в домашней директории текущего пользователя.
gpg.conf
Стандартный конфигурационный файл, который gpg считывает при запуске. Он может содержать любое количество валидных длинных опций; можно не вводить начальные две чёрточки, нельзя использовать короткую запись опции. В командной строке можно изменить значение по умолчанию. Следует делать резервную копию этого файла.
~/.gnupg
Это домашняя папка по умолчанию, которая используется если не установлено другое в переменной окружения GNUPGHOME или опцией –homedir.
~/.gnupg/pubring.gpg
Публичный киринг (public keyring). Следует иметь резервную копию этого файла
~/.gnupg/pubring.gpg.lock
Файл блокировки для публичного киринга.
~/.gnupg/pubring.kbx
Публичный киринг использует различные форматы. Этот файл поделён с gpgsm. Следует иметь резервную копию этого файла. Фактически, это база данных, где хранятся все ключи. Структуру этого файла можно посмотреть командой:
kbxutil ~/.gnupg/pubring.kbx
~/.gnupg/pubring.kbx.lock
Файл блокировки для ‘pubring.kbx’.
~/.gnupg/secring.gpg
Секретный киринг используемой GnuPG версией до 2.1. Он не используется GnuPG 2.1 и более поздними.
~/.gnupg/secring.gpg.lock
Файл блокировки для секретного киринга.
~/.gnupg/.gpg-v21-migrated
Файл, показывающий, что сделан переход на GnuPG 2.1.
~/.gnupg/trustdb.gpg
Доверенная база данных. Нет нужды делать резервную копию этого файла; лучше делать резервную копию значений ownertrust, смотрите опцию –export-ownertrust.
~/.gnupg/trustdb.gpg.lock
Файл блокировки для доверенной базы данных.
~/.gnupg/random_seed
Файл, используемый для сохранения состояния внутреннего пула случайных чисел.
~/.gnupg/openpgp-revocs.d/
Директория, где хранятся предварительно сгенерированные сертификаты отзыва. Имя файла соответствует отпечатку OpenPGP ключа, для которого этот сертификат. У каждого, у кого есть доступ к этим файлам, может отозвать ваши ключи. Поэтому эти файлы нужно хранить в секрете и иметь их резервные копии.
Форматы ключей и сертификатов
Закрытые ключи и сертификаты могут храниться в различных форматах, а это значит, что вам часто придётся преобразовывать их из одного формата в другой. Наиболее распространённые форматы:
Бинарный (DER) сертификат
Содержит сертификат X.509 в необработанном виде с использованием кодировки DER ASN.1.
ASCII (PEM) сертификат(ы)
Содержит сертификат DER в кодировке base64, в котором —–BEGIN CERTIFICATE—– используется в качестве заголовка, а —–END CERTIFICATE—– в качестве нижнего колонтитула. Обычно встречается только с одним сертификатом на файл, хотя некоторые программы допускают более одного сертификата в зависимости от контекста.
Двоичный (DER) ключ
Содержит закрытый ключ в необработанном виде с использованием кодировки DER ASN.1. OpenSSL создаёт ключи в своём собственном традиционном (SSLeay) формате. Существует также альтернативный формат, называемый PKCS#8 (определённый в RFC 5208), но он не используется широко. OpenSSL может конвертировать в и из формата PKCS#8 с помощью команды pkcs8.
ASCII (PEM) ключ
Содержит ключ DER в кодировке base64, иногда с дополнительными метаданными (например, алгоритм, используемый для защиты паролем).
Сертификат PKCS#7
Сложный формат, предназначенный для транспортировки подписанных или зашифрованных данных, определённый в RFC 2315. Он обычно встречается с расширениями .p7b и .p7c и может при необходимости включать всю цепочку сертификатов.
PKCS#12 (PFX) ключ и сертификат(ы)
Сложный формат, который может хранить и защищать ключ сервера вместе со всей цепочкой сертификатов. Обычно встречается с расширениями .p12 и .pfx. Этот формат обычно используется в продуктах Microsoft, но также используется для клиентских сертификатов.
Шифрование файлов и данных с gpg
Про шифрование в gpg нужно знать, что оно может быть:
- ассиметричным (шифруется публичным ключом, расшифровывается приватным)
- симметричным (шифруется и расшифровывается приватным ключом, шифруется и расшифровывается одной и той же парольной фразой)
Второе, что нужно знать: шифрование можно совмещать с подписыванием файла. Подписывание файла и проверку подписи мы рассмотрим далее. Также далее мы рассмотрим одновременное шифрование и подпись файла.
Третье: зашифровать можно одним или более публичными ключами.
Для шифрования файла используя симметричный метод с паролем используйте опцию -c (либо её длинный аналог –symmetric):
Следующая команда для шифрования файла test.php паролем в gpg:
gpg -c test.php
В результате шифрования будет создан файл с расширением .gpg (в данном случае это будет файл test.php.gpg).
Для того, чтобы зашифровать файл симметричным шифрованием с возможностью расшифровки приватным ключом (в этом случае его можно будет расшифровать приватным ключом, либо паролем) нужно использовать сразу несколько опций:
- -e — означает шифрование данных
- -c — означает симметричное шифрование
- -r ‘id’ — означает зашифровать данные для пользователя с определённым id
Пример команды симметричного шифрования файла test.php для пользователя Alexey Miloserdov с возможностью его расшифровки приватным ключом ЛИБО для расшифровки паролем:
gpg -e -c -r 'Alexey Miloserdov' test.php
Точнее говоря, комбинирование двух опций -e и -c шифрует ключ сессии публичным ключом и симметричным шифром, поэтому для расшифровки может использоваться И приватный ключ, И пароль (на выбор). Если на другом компьютере, где вы расшифровываете файл, имеется ваш приватный ключ, то при расшифровке будет запрошен пароль приватного ключа. Если приватный ключ отсутствует, то будет запрошен пароль, который использовался при шифровании файла.
Для шифрования публичным ключом (-e), чтобы файл (test.php) мог расшифровать только владелец соответствующего парного приватного ключа (-r ‘Alexey Miloserdov’):
gpg -e -r 'Alexey Miloserdov' test.php
Вместо опции -r ‘Имя Адресата’ можно использовать опцию -R ‘Имя Адресата’ или её длинный аналог –hidden-recipient ‘Имя Адресата’. Она также шифрует файл для указанного адресата, но имя этого адресата шифруется.
Пример шифрования файла test.php публичным ключом пользователя Alexey Miloserdov, но с зашифрованным именем адресата.
gpg -e -R 'Alexey Miloserdov' test.php
Обратите внимание, что во всех случаях шифрования оригинальный файл остаётся!!! Вам самим нужно решать, что с ним делать, например, удалить его.
Чтобы каждый раз не вводить имя получателя, можно установить значение по умолчанию опцией –default-recipient. Также с ней в комплекте идут опции –default-recipient-self и –no-default-recipient.
