OpenSSL основные команды

Пример файла openssl.cnf

openssl.cnf
[custom_oids ]
1.2.3.1 = customOID1
1.2.3.2 = customOID2
1.2.3.3 = customOID3

[ req ]
default_bits = 2048		# Размер ключа RSA
default_md = sha256		# Алгоритм хэширования
distinguished_name = dn		
req_extensions = v3_req
x509_extensions = v3_ext
prompt = yes			# Отключение интерактивного ввода DN установить в "no"
oid_section = custom_oids

[ dn ]
C = RU
ST = Moscow
L = Moscow
O = My Organization
OU = IT Department
emailAddress = example@mail.com
CN = example.com

[ v3_req ]
subjectAltName = @alt_names
#keyUsage = digitalSignature, keyEncipherment, dataEncipherment, keyAgreement
keyUsage = digitalSignature, keyEncipherment
#extendedKeyUsage = serverAuth, clientAuth
#extendedKeyUsage = serverAuth
extendedKeyUsage = clientAuth
basicConstraints = CA:FALSE
1.2.3.1 = ASN1:UTF8String:AnyString
1.2.3.2 = ASN1:PRINTABLESTRING:Some String
1.2.3.3 = ASN1:UTF8String:{"key1":"value1","key2":"value2","key3":"value3"}

[ alt_names ]
DNS.1 = 1.example.com
DNS.2 = 2.example.com
IP.1 = 127.0.0.1
IP.2 = 192.168.1.1
email.1 = example-1@mail.com
email.2 = example-2@mail.com

Сгенерировать приватный ключ

openssl genpkey -algorithm RSA -out $имя_ключа
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out $имя_ключа
openssl genpkey -algorithm ED25519 -out $имя_ключа
openssl genrsa -out $имя_ключа 4096

Если требуется зашифровать ключ до добавляется ключ -aes256

Зашифровать существующий приватный ключ

openssl rsa -aes256 -in private.key -out private.enc

Извлечь публичный ключ из приватного

openssl rsa -pubout -in $имя_приватного_ключа -out $имя_публичного_ключа

Самоподписной сертфикат с ключом одним запросом

Создание запроса на сертификат (CertificateSignRequest) из существующего приватного ключа

После выполнения команды OpenSSL запросит ввод данных, таких как:

  • Страна (Country Name, C)

  • Регион / область (State or Province Name, ST)

  • Город (Locality Name, L)

  • Организация (Organization Name, O)

  • Подразделение (Organizational Unit Name, OU)

  • Доменное имя (Common Name, CN) — важно, укажите корректный домен!

  • Email (Email Address)

Эти данные можно не вводить, а передать их в команде с ключом -subj

Генерация CSR с расширенными атрибутами (-addext)

Все значения keyUsage

digitalSignature

Подпись данных (например, TLS-сертификаты, подпись кода)

nonRepudiation (или contentCommitment)

Гарантирует, что владелец не сможет отказаться от подписанных данных

keyEncipherment

Шифрование ключей (например, для TLS)

dataEncipherment

Шифрование данных (редко используется)

keyAgreement

Используется в алгоритмах обмена ключами (например, Diffie-Hellman, ECDH)

keyCertSign

Подпись сертификатов (нужно для корневых и промежуточных CA)

cRLSign

Подпись списков отзыва сертификатов (CRL)

encipherOnly

Только шифрование (используется с keyAgreement)

decipherOnly

Только расшифровка (используется с keyAgreement)

Примеры использования keyUsage:

  1. Для TLS-сертификата сервера:

  2. Для сертификата подписи кода:

  3. Для корневого сертификата (CA):

  4. Для сертификата аутентификации клиента:

Просмотр содержимого CSR

Просмотр содержимого сертификата

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

Просмотр публичного ключа

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

Конвертировать PEM в DER

Конвертировать DER в PEM

Конвертировать PEM в PKCS#12 (PFX/P12)

Конвертировать PKCS#12 в PEM

Конвертировать P7B в PEM

Last updated