Англоязычная кроссплатформенная утилита для просмотра российских квалифицированных сертификатов x509 / Хабр

С помощью команды 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:

Генерация и просмотр пары

Для генерации закрытого ключа по алгоритму ГОСТ Р 34.10 2021 используется следующая команда:

$certtool --generate-privkey --key-type [gost12-256 | gost12-512] --curve <значение параметра> [--no-text] [--outder] [--outfile <имя файла для ключа>]
$


Криптопараметры (–curve) при генерации ключевой пары задаются OID-ами. В настоящее время

следующие oid-ы для криптопараметров алгоритма подписи ГОСТ Р 34.10-2021 с ключом 256:

1.2.643.7.1.2.1.1.1 (id-tc26-gost-3410-12-256-paramSetA) [TC26-256-A];
1.2.643.7.1.2.1.1.2 (id-tc26-gost-3410-12-256-paramSetB) [TC26-256-B];
1.2.643.7.1.2.1.1.3 (id-tc26-gost-3410-12-256-paramSetC) [TC26-256-C];
1.2.643.7.1.2.1.1.4 (id-tc26-gost-3410-12-256-paramSetD) [TC26-256-D].

При этом продолжают действовать так называемые OID-ы параметров от КриптоПро:

1.2.643.2.2.35.1 (id-GostR3410-2001-CryptoPro-A-ParamSet) [CryptoPro-A];
1.2.643.2.2.35.2 (d-GostR3410-2001-CryptoPro-B-ParamSet) [CryptoPro-B];
1.2.643.2.2.35.3 (id-GostR3410-2001-CryptoPro-C-ParamSet) [CryptoPro-C];
1.2.643.2.2.36.0 (id-GostR3410-2001-CryptoPro-XchA-ParamSet) [CryptoPro-XchA];
1.2.643.2.2.36.1 (id-GostR3410-2001-CryptoPro-XchB-ParamSet) [CryptoPro-XchB].

Напомним, что параметры КриптоПро с OID-ами 1.2.643.2.2.35.1, 1.2.643.2.2.35.2, 1.2.643.2.2.35.3 соответствуют параметрам ТК-26 с OID-ами 1.2.643.7.1.2.1.1.1, 1.2.643.7.1.2.1.1.2, 1.2.643.7.1.2.1.1.3 соответственно.

С криптопараметрами для алгоритма подписи ГОСТ Р 34.10-2021 с ключом 512 проще:

1.2.643.7.1.2.1.2.1 (id-tc26-gost-3410-2021-512-paramSetA) [TC26-512-A];
1.2.643.7.1.2.1.2.2 (id-tc26-gost-3410-2021-512-paramSetB) [TC26-512-B];
1.2.643.7.1.2.1.2.3 (id-tc26-gost-3410-2021-512-paramSetC) [TC26-512-C];

В GnuTLS введены свои обозначения для криптопараметров и они указаны в квадратных скобках, например [TC26-256-B]. К сожалению, при генерации ключа криптопараметры можно задать только их символьным обозначением. OID-ы в точечно-цифровой форме отвергаются.

Но это не самый большой недостаток. В настоящее время в GnuTLS поддерживаются только два криптопараметра. Для ключей ГОСТР 34.10-2021-256 (опция –key-type gost12-256) это параметр с oid-ом 1.2.643.7.1.2.1.1.2 (опция –curve TC26-256-B), а для ключей длиною 512 бит это параметр с oid-ом 1.2.643.7.1.2.1.2.1 (опция –curve TC26-512-A).

Итак, создаем закрытый ключ (флаг –generate-privkey) и просматриваем информацию о ключе (флаг –key-info):

#Создаём закрытый ключ  --key-type gost12-256 --curve TC26-256-B
$certtool --generate-privkey --key-type gost12-256 --curve TC26-256-B --no-text --outder --outfile key256.der
Generating a 256 bit GOST R 34.10-2021-256 private key (TC26-256-B)...
#Смотрим ключевую пару
$certtool --key-info --inder --infile key256.der
Public Key Info:
   Public Key Algorithm: GOST R 34.10-2021-256
   Key Security Level: High (256 bits)

curve:   TC26-256-B
digest:  STREEBOG-256
paramset:   TC26-Z
private key:
   4b:df:cb:9e:cc:49:c5:a2:70:36:c9:d8:df:55:97:f5
   8b:be:ae:06:7b:34:76:39:b6:aa:57:af:3f:2d:98:36
x:
   0d:71:29:56:d2:39:59:6f:14:d3:4b:75:44:85:91:a9
   5d:fa:83:4a:93:9a:2c:20:b0:6b:5c:74:8c:76:5f:a5
y:
   2d:ac:da:23:f3:2f:45:d9:47:c4:a3:c1:d7:65:bd:46
   1d:ba:12:cd:15:e1:b0:8f:5a:99:f2:35:ea:fc:33:fc
   
Public Key PIN:
   pin-sha256:nrftlmdCrSf11N ivohfuGXSQixa4Scnhl7GTsUTE2E=
Public Key ID:
   sha256:9eb7ed966742ad27f5d4dfa2be885fb865d2422c5ae12727865ec64ec5131361
   sha1:25927018f3775ed86996c625a99b7db86b2d0a7e
-----BEGIN PRIVATE KEY-----
MEACAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQECBCIEIDaYLT vV6q2OXY0ewau
vov1l1Xf2Mk2cKLFScyey99L
-----END PRIVATE KEY-----
$

В информации о ключе мы имеем полную информацию как о приватном (закрытом) ключе, включая его asn1-структуру, так и публичном ключе, включая его значение (x и y).

Теперь посмотрим на asn1-структуру приватного ключа. Для этого воспользуемся утилитой

В этой структуре вы не найдете значения открытого ключа. Значение открытого ключа вычисляется через закрытый ключ. А вот закрытый ключ по открытому вычислить, естественно, нельзя!!! И всё же досадно, что asn1-структура публичного ключа не доступна при просмотре приватного ключа (флаг –key-info).

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

$certtool --generate-privkey --pkcs8 --pkcs-cipher gost28147-tc26z [--password <пароль>] --key-type [gost12-256 | gost12-512] --curve <значение параметра> [--no-text] [--outder] [--outfile <имя файла для ключа>]
$

Если опция “–password” не задана, то пароль для шифрования закрытого ключа будет запрошен в командной строке:

bash-5.1$ ./generate_key_parse_password.sh 
#Создаём закрытый ключ  --key-type gost12-256 --curve TC26-256-B
$certtool --generate-privkey --pkcs8 --pkcs-cipher gost28147-tc26z --password 01234567  --key-type gost12-256 --curve TC26-256-B --no-text --outder --outfile key256_pkcs8.der
Generating a 256 bit GOST R 34.10-2021-256 private key (TC26-256-B)...
#Смотрим информацию о ключе
$certtool --key-info --inder --infile key256.der
Encrypted structure detected...
Enter password: <ВВОД ПАРОЛЯ>
PKCS #8 information:
   Cipher: GOST28147-TC26Z-CFB
   Schema: PBES2-GOST28147-89-TC26Z (1.2.643.7.1.2.5.1.1)
   Salt: 32b2798c23a5d0ab8c3144daf273745bdb
   Salt size: 17
   Iteration count: 5333

Public Key Info:
   Public Key Algorithm: GOST R 34.10-2021-256
   Key Security Level: High (256 bits)

curve:   TC26-256-B
digest:  STREEBOG-256
paramset:   TC26-Z
private key:
   05:20:c3:7a:93:a2:e1:b4:64:50:a4:fb:db:cc:74:43
   1a:14:d9:00:c4:82:dc:f5:94:8a:8a:65:a4:76:47:76   
x:
   1b:3e:0b:e0:3b:fc:1d:ee:62:10:63:66:72:fc:66:a6
   d5:b8:94:b1:fe:a4:ec:d6:d8:f1:18:63:95:a9:30:15   
y:
   fb:c0:24:10:41:12:98:7f:aa:15:cd:3b:7e:e7:64:bd
   c4:97:3d:18:04:82:f0:80:61:8e:ff:48:eb:d6:97:d5  
Public Key PIN:
   pin-sha256:eD6s4BQl4R0WY6H8KJZKDA6zuzd6A7JcNCh4FpUH1Rg=
Public Key ID:
   sha256:783eace01425e11d1663a1fc28964a0c0eb3bb377a03b25c342878169507d518
   sha1:62afc2d7c8bf77f1ac0820324170cd2262a63091

-----BEGIN PRIVATE KEY-----
MEACAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQECBCIEIHZHdqRlioqU9dyCxADZ
FBpDdMzb 6RQZLThopN6wyAF
-----END PRIVATE KEY-----
#Смотрим закрытый ключ средствами openssl и сравниваем
/usr/local/lirssl_csp_64/bin/lirssl pkcs8 -inform DER -in key256_pkcs8.der  -outform PEM
-----BEGIN PRIVATE KEY-----
MEACAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQECBCIEIHZHdqRlioqU9dyCxADZ
FBpDdMzb 6RQZLThopN6wyAF
-----END PRIVATE KEY-----
bash-5.1$  

Доступ к токену pkcs#11

Для доступа к токену и сертификатам, хранящимя на нем, воспользуемся пакетом

. Пакет распространяется как в бинарниках, так и в исходниках. Исходные коды пригодятся позднее, когда мы будем добавлять в пакет поддержку токенов с российской криптографией. Загрузить пакет TclPKCS11 можно двумя способами, либо командой tcl вида:

load  <библиотека tclpkcs11> Tclpkcs11


Либо загрузить просто как пакет pki::pkcs11, предварительно положив библиотеку tclpkcs11 и файл pkgIndex.tcl в удобный вам каталог (в нашем случае это подкаталог pkcs11 текущего каталога) и добавив его в путь auto_path:

#lappend auto_path [file dirname [info scrypt]] 
lappend auto_path pkcs11
package require pki
package require pki::pkcs11

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

::pki::pkcs11::loadmodule <filename>                       -> handle
::pki::pkcs11::unloadmodule <handle>                       -> true/false
::pki::pkcs11::listslots  <handle>                       -> list: slotId label flags
::pki::pkcs11::listcerts  <handle> <slotId>                -> list: keylist
::pki::pkcs11::login <handle> <slotId> <password>          -> true/false
::pki::pkcs11::logout <handle> <slotId>                    -> true/false

Сразу оговоримся, что функции login и logout здесь рассматриваться не будут. Это связано с тем, что в рамках этой статьи мы будем иметь дело только с сертификатами, а они являются публичными объектами токена. Для доступа к публичным объектам нет необходимости авторизовываться через PIN-код на токене.

Первая функция ::pki::pkcs11::loadmodule предназначена для загрузки библиотеки PKCS#11, которая поддерживает токен/смарткарту, на котором находятся сертификаты. Библиотека может быть получена либо при приобретении токена, либо загружена из Интернета или она была предустановлена на компьютере.

set filelib "/usr/local/lib64/librtpkcs11ecp_2.0.so"
set handle [::pki::pkcs11::loadmodule  $filelib]


Соответственно есть функция выгрузки загруженной библиотеки:

::pki::pkcs11::unloadmodule $handle

После того как была загружена библиотека и у нас есть ее handle можно получить список слотов, поддерживаемых этой библиотекой:

Как добавить корневой сертификат в доверенные в linux на уровне системы

Сертификат с расширением .crt можно открыть двойным кликом и просмотреть его содержимое:

Если вы работаете в системе от обычного пользователя (не root), то кнопка «Импортировать» будет недоступна.


Чтобы разблокировать кнопку «Импортировать», выполните следующую команду:

sudo gcr-viewer /ПУТЬ/ДО/СЕРТИФИКАТА.crt

Например:

sudo gcr-viewer ./HackWareCA.crt

Данный способ может не сработать, поэтому рассмотрим, как добавить доверенные корневые центры сертификации в командной строке.

Суть метода очень проста:

  1. Добавить свой корневой CA сертификат в папку, предназначенную для таких сертификатов.
  2. Запустить программу для обновления общесистемного списка сертификатов.
Про сертификаты:  НОУ ИНТУИТ | Лекция | Инфраструктура Открытого Ключа (часть 4)


Пути и команды в разных дистрибутивах 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 (заменяет genrsagendh и 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

Общие сведения об утилите certtool


Как уже было отмечено, утилита certtool имеет много общего с утилитой openssl.

Первым параметром утилиты certtool, как правило, идет флаг, который определяет какую функцию необходимо выполнить. Например, флаг “–certificate-info”, указывает на необходимость разобрать сертификат, а флаг “–generate-privkey” предписывает провести генерацию закрытого ключа.

Если данные будут поступать в формате DER, то необходимо задать опцию “–inder”.

Результатом выполнения соответствующей функции является ASN1-структура (тот же сертификат, например). По умолчанию, выходная ASN1-структура представляется в PEM-формате. Если её необходимо получить в DER-формате, то добавляется опция “–outder”. Вместе с ASN1-структурой по умолчанию (опция “–text”) выводится и её содержимое в текстовом виде. Если нет необходимости выводить текстовый вид, то задается опция “–no-text”.

Все это можно продемонстрировать на примере конвертации файлов с сертификатами из формата PEM в DER и наоборот:

#Конвертация файла с сертификатом из формата PEM в DER
#Если установлена опция --outder, то опция --no-text устанавливается по умолчанию.
$certtool --certificate-info --infile certPEM.pem --outder --outfile certDER.der
#Конвертация файла с сертификатом из формата DER в PEM
$certtool --certificate-info --inder --infile certDER.der --no-text  --outfile certPEM_new.pem
$

Для получения справки по утилите certtool выполните команду:

$certtool –help

Справка по утилите certtool
certtool - GnuTLS certificate tool
Usage:  certtool [ -<flag> [<val>] | --<name>[{=| }<val>] ]...

   -d, --debug=num            Enable debugging
				- it must be in the range:
				  0 to 9999
   -V, --verbose              More verbose output
				- may appear multiple times
       --infile=file          Input file
				- file must pre-exist
       --outfile=str          Output file

Certificate related options:

   -i, --certificate-info     Print information on the given certificate
       --pubkey-info          Print information on a public key
   -s, --generate-self-signed  Generate a self-signed certificate
   -c, --generate-certificate  Generate a signed certificate
       --generate-proxy       Generates a proxy certificate
   -u, --update-certificate   Update a signed certificate
       --fingerprint          Print the fingerprint of the given certificate
       --key-id               Print the key ID of the given certificate
       --v1                   Generate an X.509 version 1 certificate (with no extensions)
       --sign-params=str      Sign a certificate with a specific signature algorithm

Certificate request related options:

       --crq-info             Print information on the given certificate request
   -q, --generate-request     Generate a PKCS #10 certificate request
				- prohibits the option 'infile'
       --no-crq-extensions    Do not use extensions in certificate requests

PKCS#12 file related options:

       --p12-info             Print information on a PKCS #12 structure
       --p12-name=str         The PKCS #12 friendly name to use
       --to-p12               Generate a PKCS #12 structure

Private key related options:

   -k, --key-info             Print information on a private key
       --p8-info              Print information on a PKCS #8 structure
       --to-rsa               Convert an RSA-PSS key to raw RSA format
   -p, --generate-privkey     Generate a private key
       --key-type=str         Specify the key type to use on key generation
       --bits=num             Specify the number of bits for key generation
       --curve=str            Specify the curve used for EC key generation
       --sec-param=str        Specify the security level [low, legacy, medium, high, ultra]
       --to-p8                Convert a given key to a PKCS #8 structure
   -8, --pkcs8                Use PKCS #8 format for private keys
       --provable             Generate a private key or parameters from a seed using a provable method
       --verify-provable-privkey  Verify a private key generated from a seed using a provable method
       --seed=str             When generating a private key use the given hex-encoded seed

CRL related options:

   -l, --crl-info             Print information on the given CRL structure
       --generate-crl         Generate a CRL
       --verify-crl           Verify a Certificate Revocation List using a trusted list
				- requires the option 'load-ca-certificate'

Certificate verification related options:

   -e, --verify-chain         Verify a PEM encoded certificate chain
       --verify               Verify a PEM encoded certificate (chain) against a trusted set
       --verify-hostname=str  Specify a hostname to be used for certificate chain verification
       --verify-email=str     Specify a email to be used for certificate chain verification
				- prohibits the option 'verify-hostname'
       --verify-purpose=str   Specify a purpose OID to be used for certificate chain verification
       --verify-allow-broken  Allow broken algorithms, such as MD5 for verification
       --verify-profile=str   Specify a security level profile to be used for verification

PKCS#7 structure options:

       --p7-generate          Generate a PKCS #7 structure
       --p7-sign              Signs using a PKCS #7 structure
       --p7-detached-sign     Signs using a detached PKCS #7 structure
       --p7-include-cert      The signer's certificate will be included in the cert list.
				- disabled as '--no-p7-include-cert'
				- enabled by default
       --p7-time              Will include a timestamp in the PKCS #7 structure
				- disabled as '--no-p7-time'
       --p7-show-data         Will show the embedded data in the PKCS #7 structure
				- disabled as '--no-p7-show-data'
       --p7-info              Print information on a PKCS #7 structure
       --p7-verify            Verify the provided PKCS #7 structure
       --smime-to-p7          Convert S/MIME to PKCS #7 structure

Other options:

       --get-dh-params        List the included PKCS #3 encoded Diffie-Hellman parameters
       --dh-info              Print information PKCS #3 encoded Diffie-Hellman parameters
       --load-privkey=str     Loads a private key file
       --load-pubkey=str      Loads a public key file
       --load-request=str     Loads a certificate request file
       --load-certificate=str Loads a certificate file
       --load-ca-privkey=str  Loads the certificate authority's private key file
       --load-ca-certificate=str Loads the certificate authority's certificate file
       --load-crl=str         Loads the provided CRL
       --load-data=str        Loads auxiliary data
       --password=str         Password to use
       --null-password        Enforce a NULL password
       --empty-password       Enforce an empty password
       --hex-numbers          Print big number in an easier format to parse
       --cprint               In certain operations it prints the information in C-friendly format
       --hash=str             Hash algorithm to use for signing
       --salt-size=num        Specify the RSA-PSS key default salt size
       --inder                Use DER format for input certificates, private keys, and DH parameters
				- disabled as '--no-inder'
       --inraw                an alias for the 'inder' option
       --outder               Use DER format for output certificates, private keys, and DH parameters
				- disabled as '--no-outder'
       --outraw               an alias for the 'outder' option
       --template=str         Template file to use for non-interactive operation
       --stdout-info          Print information to stdout instead of stderr
       --ask-pass             Enable interaction for entering password when in batch mode.
       --pkcs-cipher=str      Cipher to use for PKCS #8 and #12 operations
       --provider=str         Specify the PKCS #11 provider library
       --text                 Output textual information before PEM-encoded certificates, private
keys, etc
				- disabled as '--no-text'
				- enabled by default

Version, usage and configuration options:

   -v, --version[=arg]        output version information and exit
   -h, --help                 display extended usage information and exit
   -!, --more-help            extended usage information passed thru pager

Options are specified by doubled hyphens and their name or by a single
hyphen and the flag character.

Tool to parse and generate X.509 certificates, requests and private keys.
It can be used interactively or non interactively by specifying the
template command line option.

The tool accepts files or supported URIs via the --infile option.  In case
PIN is required for URI access you can provide it using the environment
variables GNUTLS_PIN and GNUTLS_SO_PIN.

Please send bug reports to:  <bugs@gnutls.org>

Про сертификаты:  android - Опасно ли передавать третьим лицам свой SHA1 certificate fingerprint? - Stack Overflow на русском


Теперь переходим к основным функциям утилиты certtool

Получаем публичный ключ

Теперь, когда с переводчиком определились, приступим к разбору сертификата. Для этого нам потребуется пакет pki:

package require pki). 

Пакет pki заточен на работу с ключами и сертификатами алгоритма RSA. Если сертификат (proc ::pki::x509::parse_cert) создан с другим типом ключа, то информацию об этом ключе мы не получим:

# Handle RSA public keys by extracting N and E
switch -- $ret(pubkey_algo) {
	"rsaEncryption" {
		set pubkey [binary format B* $pubkey]
		binary scan $pubkey H* ret(pubkey)
			::asn::asnGetSequence pubkey pubkey_parts
			::asn::asnGetBigInteger pubkey_parts ret(n)
			::asn::asnGetBigInteger pubkey_parts ret(e)
			set ret(n) [::math::bignum::tostr $ret(n)]
			set ret(e) [::math::bignum::tostr $ret(e)]
			set ret(l) [expr {int([::pki::_bits $ret(n)] / 8.0000   0.5) * 8}]
			set ret(type) rsa
	}
 }


Удивительно то, что алгоритм публичного ключа все же возвращается (ret(pubkey_algo))

Аналогичным образом обстоит дело и с разбором запроса на сертификат (proc ::pki::pkcs::parse_csr):

# Parse public key, based on type
switch -- $pubkey_type {
	"rsaEncryption" {
		set pubkey [binary format B* $pubkey]
		::asn::asnGetSequence pubkey pubkey_parts
		::asn::asnGetBigInteger pubkey_parts key(n)
		::asn::asnGetBigInteger pubkey_parts key(e)
		set key(n) [::math::bignum::tostr $key(n)]
		set key(e) [::math::bignum::tostr $key(e)]
		set key(l) [expr {2**int(ceil(log([::pki::_bits $key(n)])/log(2)))}]
		set key(type) rsa
	}
	default {
		return -code error "Unsupported key type: $pubkey_type"
	}
}

Но здесь он хоть возвращает информацию об ошибке. Но сегодня помимо RSA в ходу, например, ключи на эллиптических кривых ЕС, в том числе и ГОСТ Р 34.10-2021 (ГОСТ Р 34.10-2001 тоже пока ходит).

А ведь достаточно по умолчанию (default) возвращать ASN-структуру публичного ключа, лежащего в сертификате или запросе, а пользователь уже сам в зависимости от типа ключа разберет публичный ключ. Для этого достаточно добавить в возвращаемые значения ASN-структуру публичного ключа в шестнадцатеричном виде:

proc ::pki::x509::parse_cert {cert} {
	. . . 
	::asn::asnGetSequence cert subject
	::asn::asnGetSequence cert pubkeyinfo
#Добавляем в возвращаемый массив ASN-структуру публичного ключа.
       binary scan $pubkeyinfo H* ret(pubkey_pubkeyinfo)
	. . .
}

Все, больше ничего делать не надо. Именно таким образом процедура ::pki::x509::parse_cert возвращает большинство расширений сертификата по той простой причине, что не знает как их разобрать (например, subjectSignTool у наших квалифицированных сертификатов), т.е. отдает на усмотрения пользователя.

С другой стороны, процедура ::pki::x509::parse_cert возвращает одним из результатов tbs-сертификат, который содержит всю информацию из сертификата, кроме его подписи (signature) и типа подписи (signature_algo):

#Читаем сертификат из файла
set fd [open «cert.pem» r]
chan configure –translation binary
set datacert [read $fd]
close $fd 
#разбираем сертификат
array set cert_parse [::pki::x509::parse_cert  $datacert]
#Сохряняем tbs-сертификат
set cert_tbs_hex $cert_parse(cert)

Пишем процедуру извлечения информации о публичном ключе из tbs-сертификата:

proc ::pki::x509::parse_cert_pubkeyinfo {cert_tbs_hex} {
	array set ret [list]
	set wholething [binary format H* $cert_tbs_hex]
	::asn::asnGetSequence wholething cert

	::asn::asnPeekByte cert peek_tag
	if {$peek_tag != 0x02} {
		# Version number is optional, if missing assumed to be value of 0
		::asn::asnGetContext cert - asn_version
		::asn::asnGetInteger asn_version ret(version)
	}
	::asn::asnGetBigInteger cert ret(serial_number)
	::asn::asnGetSequence cert data_signature_algo_seq
		::asn::asnGetObjectIdentifier data_signature_algo_seq ret(data_signature_algo)
	::asn::asnGetSequence cert issuer
	::asn::asnGetSequence cert validity
		::asn::asnGetUTCTime validity ret(notBefore)
		::asn::asnGetUTCTime validity ret(notAfter)
	::asn::asnGetSequence cert subject
	::asn::asnGetSequence cert pubkeyinfo
#Сохраняем и возвращаем в hex asn-структуру публичного ключа
	binary scan $pubkeyinfo H* ret(pubkeyinfo)
	return $ret(pubkeyinfo)
}


А поскольку нас интересует российская криптография, то сразу напишем и процедуру разбора ГОСТ-ового публичного ключа:

proc parse_key_gost {pubkeyinfo_hex} {
    array set ret [list]
    set pubkeyinfo [binary format H* $pubkeyinfo_hex]
    ::asn::asnGetSequence pubkeyinfo pubkey_algoid
	::asn::asnGetObjectIdentifier pubkey_algoid ret(pubkey_algo)
#Убеждаемся, что это ГОСТ-ключ
    if {[string first "1 2 643 " $ret(pubkey_algo)] == -1} {
	return [array get ret]
    }
    ::asn::asnGetBitString pubkeyinfo pubkey
    set pubkey [binary format B* $pubkey]
#Значение публичного ключа
    binary scan $pubkey H* ret(pubkey)
    ::asn::asnGetSequence pubkey_algoid pubalgost
#OID - параметра
    ::asn::asnGetObjectIdentifier pubalgost ret(paramkey)
#OID - Функция хэша
    ::asn::asnGetObjectIdentifier pubalgost ret(hashkey)
#puts "ret(paramkey)=$ret(paramkey)n"
#puts "ret(hashkey)=$ret(hashkey)n"
#parray ret
#Возвращаем разобранный ключ: алгоритм ключа, значение ключа и параметры
    return [array get ret]
}

Да, чуть не упустил: после загрузки пакета pki, необходимо добавить в массив ::pki::oids oid-ы, характеризующие ГОСТ и квалифицированный сертификат или просто отсутствующих в этом массиве:

package require pki
#Добавляемые oid-ы
set ::pki::oids(1.2.643.100.1)  "OGRN"
set ::pki::oids(1.2.643.100.5)  "OGRNIP"
set ::pki::oids(1.2.643.3.131.1.1) "INN"
set ::pki::oids(1.2.643.100.3) "SNILS"
 set ::pki::oids(1.2.643.2.2.19) "GOST R 34.10-2001"
 set ::pki::oids(1.2.643.7.1.1.1.1) "GOST R 34.10-2021-256"
 set ::pki::oids(1.2.643.7.1.1.1.2) "GOST R 34.10-2021-512"
set ::pki::oids(1.2.643.2.2.3) "GOST R 34.10-2001 with GOST R 34.11-94"
 set ::pki::oids(1.2.643.7.1.1.3.2) "GOST R 34.10-2021-256 with GOSTR 34.11-2021-256"
 set ::pki::oids(1.2.643.7.1.1.3.3) "GOST R 34.10-2021-512 with GOSTR 34.11-2021-512"
 set ::pki::oids(1.2.643.100.113.1) "KC1 Class Sign Tool"
 set ::pki::oids(1.2.643.100.113.2) "KC2 Class Sign Tool"
. . . 

Можно также пополнить словарный запас переводчика, пополнив файл ru.msg:

mcset ru "GOST R 34.10-2001" "ГОСТ Р 34.10-2001"
mcset ru "GOST R 34.10-2021-256" "ГОСТ Р 34.10-2021-256"
mcset ru "GOST R 34.10-2021-512" "ГОСТ Р 34.10-2021-512"
mcset ru "GOST R 34.10-2001 with GOST R 34.11-94" "ГОСТ Р 34.10-2001 с ГОСТ Р 34.11-94"
mcset ru "GOST R 34.10-2021-256 with GOSTR 34.11-2021-256" "ГОСТ Р 34.10-2021-256 с ГОСТ Р 34.11-2021-256"
mcset ru "GOST R 34.10-2021-512 with GOSTR 34.11-2021-512" "ГОСТ Р 34.10-2021-512 с ГОСТ Р 34.11-2021-512"
. . .

Англоязычная кроссплатформенная утилита для просмотра российских квалифицированных сертификатов x509 / Хабр

Симметричное шифрование файлов в 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:<ФАЙЛ-С-ПАРОЛЕМ>

Стандартный просмотрщик

Утилита хорошо сделана, удобная. И вообще задумана как универсальная утилита для просмотра файлов, содержащих данные в различных криптографических форматах (сертификаты, запросы, электронные подписи/PKCS#7, защищенные контейнеры PKCS#12 и т.д.). Но, к сожалению, она рассчитана на западную криптографию и не учитывает oid-ы, которые вводятся в вашей стране.

И если взглянуть на скриншот, то уже при выводе сведений о владельце сертификата появляются непонятные символы. Слева это сами oid-ы, а справа в 16-ом виде asn1-структура с их значениями. В данном случае это ОГРН (1.2.643.100.1), СНИЛС (1.2.643.100.3) и ИНН (1.2.643.3.131.1.1).

Появляются какие-то расширения, идентификаторы и значения. В данном случае под oid-ом 1.2.643.100.111 скрывается наименование СКЗИ, которое использовалось пользователем для генерации ключевой пары, закрытый ключ из которой использовался для подписания запроса на сертификат, а открытый ключ из которой лежит в сертификате:

И здесь мало что понятно владельцу сертификата. Он даже не понимает, какой алгоритм использовался при генерации ключа, то ли ГОСТ Р 34.10-2001, то ли ГОСТ Р 34.10-2021 и с какой длиной ключа.

Можно продолжать приводить примеры. Например, если со сроком действия сертификата понятно, то где срок действия ключа?

Есть еще два вопроса, на которые владельцы сертификатов хотели бы иметь ответ: где можно получить цепочку корневых сертификатов (а еще лучше просто получить) и аналогичное вопрос по списку отозванных сертификатов.

И последнее, хотелось бы иметь универсальную утилиту, учитывающую по максимуму особенности российской ИОК/PKI, по настоящему кроссплатформенной и работающей на отечественных и неотечественных ОС. На чем разрабатывать? Конечно на скриптовом языке, хотя бы в силу их кроссплатформенности.

Тут вспомнилось, что совсем недавно отпраздновал свое 30-летие прекрасный скриптовый язык Tcl (Tool Command Language). Программировать на нем одно удовольствие. У него огромное количество расширений (package), которые позволяют практически все.

Все то же самое можно сказать и про Pyton с Tkinter, и про perl, и про ruby. Каждый может выбрать по своему вкусу. Мы останавливаемся на связке Tcl/Tk.

Графический дизайн для утилиты позаимствуем у утилиты gcr-viewer. И еще одно требование.

Поскольку у Хабра появилась англоязычная версия, то хотелось, чтобы и утилита имела различные интерфейсы (русский/английский). Но это не главная причина. Важнее то, что все больше граждан западного мира становятся гражданами Российской Федерации, например, всемирно известный актер Депардье. Могут возразить: он француз. Но я тоже военный переводчик с французского языка:

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

Шифрование файлов и данных с 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.

Оцените статью
Мой сертификат
Добавить комментарий