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 $имя_публичного_ключа

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

openssl req -x509 -newkey rsa:4096 -keyout private.key -out certificate.crt -days 365 -nodes

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

openssl req -new -key private.key -out request.csr

После выполнения команды 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

-subj "/C=RU/ST=Moscow/L=Moscow/O=My Organization/OU=IT Department/CN=www.example.ru/emailAddress=example.mail.ru"

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

openssl req -new -key private.key -out request.csr \
-addext "subjectAltName = DNS:example.com, DNS:www.example.com" \
-addext "keyUsage = critical, digitalSignature, keyEncipherment" \
-addext "extendedKeyUsage = serverAuth, clientAuth"

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

digitalSignature

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

nonRepudiation (или contentCommitment)

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

keyEncipherment

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

dataEncipherment

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

keyAgreement

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

keyCertSign

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

cRLSign

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

encipherOnly

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

decipherOnly

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

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

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

    -addext "keyUsage = digitalSignature, keyEncipherment"
  2. Для сертификата подписи кода:

    -addext "keyUsage = digitalSignature, nonRepudiation"
  3. Для корневого сертификата (CA):

    -addext "keyUsage = keyCertSign, cRLSign"
  4. Для сертификата аутентификации клиента:

    -addext "keyUsage = digitalSignature, keyAgreement"

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

openssl req -text -noout -in request.csr

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

openssl x509 -text -noout -in certificate.crt

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

openssl rsa -text -noout -in private.key

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

openssl rsa -pubout -in private.key -out public.key

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

openssl x509 -noout -modulus -in cert.crt | openssl md5
openssl rsa -noout -modulus -in private.key | openssl md5
# вывод хэшей в обоих командах должен совпадать

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

openssl x509 -in cert.pem -outform DER -out cert.der

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

openssl x509 -in cert.der -inform DER -out cert.pem

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

openssl pkcs12 -export -out keystore.pfx -inkey private.key -in cert.crt

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

openssl pkcs12 -in keystore.pfx -nodes -out cert.pem

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

openssl pkcs7 -in certificate_file.p7b -print_certs -out cert.pem

Last updated