Основы OpenSSL: SSL-сертификаты, закрытые ключи и запросы на подпись | 8HOST.COM

Основы OpenSSL: SSL-сертификаты, закрытые ключи и запросы на подпись | 8HOST.COM Сертификаты

Основные команды openssl для работы с ssl. у нас можно купить ssl сертификат, сертификат с подтверждением домена, компании, субдоменов, codesign сертификат программного кода, для pdf…

Проверка версии OpenSSL

Определение используемой версии OpenSSL является важным первым шагом в подготовке генерации приватного ключа и запроса CSR. Ваша версия OpenSSL диктует криптографический алгоритм, который может использовать для генерации ключей и поддерживаемый протокол. К примеру, OpenSSL version 1.0.1 является первой версией, поддерживающей TLS 1.1 и TLS 1.2. Знание используемой версииf OpenSSL также важно когда вы решаете возникшие в процессе проблемы.

Команда для определения версии OpenSSL:

openssl version -a

В этой команде, ” -a ” включит отображение следующей информации:

При вводе команды openssl version -a появится информация такого вида:

OpenSSL 1.0.2g  1 Mar 2021
built on: reproducible build, date unspecified
platform: debian-amd64
options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx) 
compiler: cc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -
D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -g -O2 -fstack-protector-
strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-
Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -
DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -
DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -
DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
OPENSSLDIR: "/usr/lib/ssl"

OpenSSL and CSR Creation

Первым шагом к получению SSL-сертификата является использование OpenSSL для создания запроса подписи сертификата (CSR), который может быть отправлен в центр сертификации (CA) (например, DigiCert). CSR содержит общее имя (ы), которое вы хотите, чтобы ваш сертификат был защищен, информация о вашей компании и ваш открытый ключ. Чтобы создать CSR, он должен иметь закрытый ключ, из которого извлекается открытый ключ. Это можно сделать, используя существующий закрытый ключ или создав новый закрытый ключ.

Примечание по безопасности. Из-за проблем с безопасностью, связанных с использованием существующего закрытого ключа, а также потому, что очень просто и совершенно бесплатно создавать закрытый ключ, мы рекомендуем создавать новый закрытый ключ при создании CSR.

Выбор вариантов генерации ключей

При создании ключа вы должны решить три вещи:

Алгоритм ключа

Для ключевого алгоритма вам необходимо учитывать его совместимость. По этой причине мы рекомендуем использовать RSA. Однако, если у вас есть конкретная необходимость использовать другой алгоритм (например, ECDSA), вы также можете использовать его, но помните о проблемах совместимости, с которыми вы можете столкнуться.

Примечание. В этом руководстве рассматриваются только генераторы ключей с использованием алгоритма RSA.

Размер ключа

Для размера ключа вам необходимо выбрать длину бита не менее 2048 при использовании RSA и 256 при использовании ECDSA; это самый маленький размер ключа, разрешенные для сертификатов SSL. Если вам не нужен более крупный размер ключа, мы рекомендуем придерживаться 2048 с RSA и 256 с ECDSA.

Примечание. В старых версиях OpenSSL, если не задан размер ключа, используется размер ключа по умолчанию 512. Любой размер ключа ниже 2048 считается незащищенным и никогда не должен использоваться.

Passphrase

Для ключевой фразы вам нужно решить, хотите ли вы ее использовать. Если используется, закрытый ключ будет зашифрован с использованием указанного метода шифрования, и его невозможно будет использовать без кодовой фразы. Потому что есть плюсы и минусы с обоими опциями, важно понимать последствия использования или не использования кодовой фразы. В этом руководстве мы не будем использовать кодовую фразу в наших примерах.

Создание приватного ключа

После принятия решения по алгоритму и размеру ключа, а также использованию кодовой фразы вы можете приступить к генерации своего закрытого (приватного) ключа.

Используйте следующую команду для генерации вашего закрытого ключа с использованием алгоритма RSA:

openssl genrsa -out yourdomain.key 2048

Эта команда генерирует закрытый ключ в вашем текущем каталоге с именем yourdomain.key (-out yourdomain.key) с использованием алгоритма RSA (genrsa) с длиной ключа 2048 бит (2048). Сгенерированный ключ создается с использованием формата OpenSSL под названием PEM.

Используйте следующую команду для просмотра необработанного, закодированного содержимого (формат PEM) закрытого ключа:

cat yourdomain.key

Несмотря на то, что содержимое файла может выглядеть как случайный фрагмент текста, на самом деле он содержит важную информацию о ключе. Используйте следующую команду для декодирования закрытого ключа и просмотра его содержимого:

openssl rsa -text -in yourdomain.key -noout

Переключатель -noout отключает вывод кодированной версии закрытого ключа.

Извлечение открытого ключа

Файл закрытого ключа содержит как закрытый ключ, так и открытый ключ. Вы можете извлечь свой открытый ключ из своего файла закрытого ключа, если это необходимо.

Используйте следующую команду для извлечения открытого ключа:

openssl rsa -in yourdomain.key -pubout -out yourdomain_public.key

Создание CSR

После создания секретного ключа вы готовы создать свою CSR. CSR создается с использованием формата PEM и содержит часть открытого ключа закрытого ключа, а также информацию о вас (или вашей компании).

Используйте следующую команду для создания CSR с использованием только что созданного закрытого ключа:

openssl req -new -key yourdomain.key -out yourdomain.csr

После ввода команды вам будет задан ряд вопросов. Ваши ответы на эти вопросы будут включены в CSR. Ответьте на вопросы, как описано ниже:

Про сертификаты:  Наш генеральный спонсор… Как и во что грамотно вложить маркетинговые деньги — СКБ Контур

Некоторые из вышеуказанных вопросов CSR имеют значения по умолчанию, которые будут использоваться, если вы оставите пустой ответ и нажмите Enter. Эти значения по умолчанию извлекаются из файла конфигурации OpenSSL, расположенного в OPENSSLDIR (см. Проверка версии OpenSSL). Если вы хотите оставить вопрос пустым, не используя значение по умолчанию, введите «.». (период) и нажмите Enter.

Использование переключателя -subj

Другим вариантом при создании CSR является предоставление всей необходимой информации внутри самой команды с помощью -subj-переключателя.

Используйте следующую команду, чтобы отключить приглашения к запросам при создании CSR:

openssl req -new -key yourdomain.key -out yourdomain.csr 
-subj "/C=US/ST=Utah/L=Lehi/O=Your Company, Inc./OU=IT/CN=yourdomain.com"

This command uses your private key file (-key yourdomain.key) to create a new CSR (-out yourdomain.csr) and disables question prompts by providing the CSR information (-subj).

Создание CSR с помощью одной команды

Вместо того, чтобы генерировать закрытый ключ, а затем создавая CSR двумя разными шагами, вы можете одновременно выполнять обе задачи.

Используйте следующую команду для создания как закрытого ключа, так и CSR:

openssl req -new 
-newkey rsa:2048 -nodes -keyout yourdomain.key 
-out yourdomain.csr 
-subj "/C=US/ST=Utah/L=Lehi/O=Your Company, Inc./OU=IT/CN=yourdomain.com"

Эта команда генерирует новый закрытый ключ (-newkey) с использованием алгоритма RSA с длиной ключа 2048 бит (rsa: 2048) без использования парольной фразы (-nodes), а затем создает файл ключа с именем yourdomain.key (- keyout yourdomain.key). Затем команда cгенерирует CSR с именем файла yourdomain.csr (-out yourdomain.csr),  информация для CSR предоставляется (-subj).

Примечание. Хотя возможно добавление альтернативного имени объекта (SAN) в CSR с использованием OpenSSL, процесс немного сложнее. Если вам нужно добавить SAN в свой сертификат, это легко сделать, добавив их в виде примечания в форму заказа при покупке вашего сертификата  ssl.

Проверка информации CSR

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

Используйте следующую команду для просмотра информации в вашей CSR перед отправкой ее в сертификационный центр.

openssl req -text -in yourdomain.csr -noout -verify

Переключатель -noout отключает вывод кодированной версии CSR. Переключатель -verify проверяет подпись файла, чтобы убедиться, что он не был изменен. Выполнение этой команды дает вам следующий результат:

verify OK

Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=US, ST=Utah, L=Lehi, O=Your Company, Inc., OU=IT, CN=yourdomain.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:bb:31:71:40:81:2c:8e:fb:89:25:7c:0e:cb:76:
                    [...17 lines removed]
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         0b:9b:23:b5:1f:8d:c9:cd:59:bf:b7:e5:11:ab:f0:e8:b9:f6:
         [...14 lines removed]

В первой строке выведенного выше вы увидите, что CSR была проверена (verify OK).

В четвертой строке поле Subject: содержит информацию, предоставленную вами при создании CSR. Убедитесь, что эта информация верна.

Если какая-либо информация неверна, вам нужно будет создать совершенно новІй запрос CSR для исправления ошибок. Это связано с тем, что файлы CSR имеют цифровую подпись, что означает, что даже если в файле изменяется один символ, он будет отклонен центром сертификации.

Отправка CSR в CA

Когда вы подготовите запрос CSR для оформления сертификата SSL, вам нужно использовать формат PEM – необработанный, закодированный текст CSR, который вы увидите при открытии его в текстовом редакторе.

Для того, чтобы просмотреть исходный вывод CSR:

cat yourdomain.csr

Вам надо скопировать содержимое (включая —–BEGIN CERTIFICATE REQUEST—– и —–END CERTIFICATE REQUEST—– вместе с черточками) вставить в текстовый документ и направить в компанию, которая оформляет для вас сертификат ssl.

Просмотр информации о сертификате

После получения сертификата от CA (например, DigiCert) мы рекомендуем убедиться, что информация в сертификате верна и соответствует вашему закрытому ключу. Вы делаете это, используя команду x509.

Используйте следующую команду для просмотра содержимого вашего сертификата:

openssl x509 -text -in yourdomain.crt -noout

Проверка соответствия ваших ключей

Чтобы проверить соответствие ваших общих и закрытых ключей, используйте ключ -modulus для генерации хэша вывода для всех трех файлов (закрытый ключ, CSR и сертификат).

Используйте следующие команды для генерации хэша модуля каждого файла:

openssl rsa -modulus -in yourdomain.key -noout | openssl sha256
openssl req -modulus -in yourdomain.csr -noout | openssl sha256
openssl x509 -modulus -in yourdomain.crt -noout | openssl sha256

Примечание. Вышеприведенные команды должны вводиться один за другим для генерации трех отдельных выходов.

Каждая команда выведет (stdin) =, а затем строку символов. Если результат каждой команды соответствует, то ключи для каждого файла одинаковы.

Однако, если есть какое-либо несоответствие, то ключи не совпадают, и сертификат не может быть установлен.

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

Преобразование форматов сертификатов

По умолчанию OpenSSL генерирует ключи и CSR, используя формат PEM. Однако могут быть случаи, когда вам нужно преобразовать свой ключ или сертификат в другой формат, чтобы экспортировать его в другую систему.

Про сертификаты:  Подарочный сертификат на пейнтбол или лазертаг

PEM для PKCS # 12

Формат PKCS # 12 представляет собой архивный файл, в котором хранятся как сертификат, так и закрытый ключ. Этот формат полезен для переноса сертификатов и ключей из одной системы в другую, так как содержит все необходимые файлы. Файлы PKCS # 12 используют либо расширение .pfx, либо .p12.

Используйте следующую команду для преобразования вашего ключа PEM и сертификата в формат PKCS # 12 (т. Е. Один файл .pfx):

openssl pkcs12 -export -name "yourdomain-digicert-(expiration date)" 
-out yourdomain.pfx -inkey yourdomain.key -in yourdomain.crt

Примечание. После ввода команды вам будет предложено указать пароль для шифрования файла. Поскольку формат PKCS # 12 часто используется для миграции системы, мы рекомендуем шифровать файл с помощью очень надежного пароля. Эта команда объединяет ваш закрытый ключ (-inkey yourdomain.key) и ваш сертификат (-in yourdomain.crt) в один файл .pfx (-out yourdomain.pfx) с дружественным именем (-name «yourdomain-digicert- (expiration дата) “), где дата истечения срока действия сертификата истекает.

PKCS № 12 для PEM

Поскольку формат PKCS # 12 содержит как сертификат, так и закрытый ключ, вам нужно использовать две отдельные команды для преобразования файла .pfx в формат PEM.

Используйте следующую команду, чтобы извлечь закрытый ключ из файла PKCS # 12 (.pfx) и преобразовать его в закрытый ключ, закодированный PEM:

openssl pkcs12 -in yourdomain.pfx -nocerts -out yourdomain.key -nodes

Используйте следующую команду для извлечения сертификата из файла PKCS # 12 (.pfx) и преобразования его в сертификат, закодированный PEM:

openssl pkcs12 -in yourdomain.pfx -nokeys -clcerts -out yourdomain.crt

Примечание. Вам необходимо указать пароль, используемый для шифрования файла .pfx, чтобы преобразовать ключ и сертификат в формат PEM.

PEM to DER

Формат DER использует кодировку ASN.1 для хранения сертификата или ключевой информации. Подобно формату PEM, DER хранит информацию о ключах и сертификатах в двух отдельных файлах и обычно использует те же расширения файлов (то есть .key, .crt и .csr). Расширение файла .der было использовано в приведенных ниже примерах для ясности.

Используйте следующую команду для преобразования сертификата, закодированного в PEM, в сертификат, закодированный DER:

openssl x509 -inform PEM -in yourdomain.crt -outform DER -out yourdomain.der

Используйте следующую команду для преобразования закрытого ключа, закодированного в PEM, в закрытый закрытый ключ DER:

openssl rsa -inform PEM -in yourdomain.key -outform DER -out yourdomain_key.der

DER to PEM Используйте следующую команду для преобразования закодированного DER сертификата в сертификат, закодированный PEM:

openssl x509 -inform DER -in yourdomain.der -outform PEM -out yourdomain.crt

Используйте следующую команду для преобразования закрытого ключа с кодировкой DER в закрытый секретный ключ PEM:

openssl rsa -inform DER -in yourdomain_key.der -outform PEM -out yourdomain.key

Ключевые слова

Ключевые слова набора шифров являются базовыми строительными блоками конфигурации наборов шифров. Каждое имя набора (например, RC4-SHA) является ключевым словом, с помощью которого выбирается ровно один набор. Все остальные ключевые слова отбирают группу наборов в соответствии с некоторыми критериями.

Имена ключевых слов чувствительны к регистру символов. Конечно, можно было бы просто перенаправить вас на документацию OpenSSL для просмотра всего списка ключевых слов, но оказывается, что раздел по шифрам в ней не актуален: в нём не хватает нескольких последних добавлений. По этой причине я попытался задокументировать все ключевые слова в этом разделе.

Групповые ключевые слова — это сокращения для выбора часто используемых наборов шифров. Например, при наличии ключевого слова HIGH будут отобраны только очень стойкие наборы шифров.

Таблица 1.1. Групповые ключевые слова

Ключевое словоЗначение
DEFAULTСписок шифров по умолчанию. Определяется во время компиляции, для OpenSSL 1.0.0, как правило, ALL:!aNULL:!eNULL. При настройке отбора наборов шифров в приложении это ключевое слово должно быть указано первым в конфигурационной строке.
COMPLEMENTOFDEFAULTШифры, входящие в ALL, но не задействованные по умолчанию. В настоящий момент это ADH. Обратите внимание, что это правило не распространяется на шифры eNULL, которые не входят в ALL (если это необходимо, используйте COMPLEMENTOFALL).
ALLВсе наборы шифров, кроме шифров eNULL, которые должны быть включены явно.
COMPLEMENTOFALLНаборы шифров, не включённые в ALL, в настоящий момент это eNULL.
HIGHНаборы шифров “высокой” криптографической стойкости. В настоящий момент это означает наборы шифров с ключами, имеющими уровень криптостойкости более 128 бит, а также некоторые наборы шифров с уровнем криптостойкости в 128 бит.
MEDIUMНаборы шифров “средней” криптографической стойкости, в настоящий момент некоторые из них используют шифрование с уровнем криптостойкости 128 бит.
LOWНаборы шифров “низкой” криптографической стойкости. В настоящее время это те из них, в которых используются криптографические алгоритмы с уровнем криптостойкости 64 или 56 бит, за исключением экспортных наборов шифров. Небезопасные.
EXP, EXPORTЭкспортные криптографические алгоритмы. Включая алгоритмы с уровнем криптостойкости 40 и 56 бит. Небезопасные.
EXPORT40Экспортные алгоритмы с уровнем криптостойкости 40 бит. Небезопасные.
EXPORT56Экспортные алгоритмы с уровнем криптостойкости 56 бит. Небезопасные.
TLSv1, SSLv3, SSLv2Наборы шифров TLS 1.0, SSL 3 и SSL 2, соответственно.
Про сертификаты:  Ортодонтия от 12 до 18 лет - детская и подростковая стоматология в Москве, цены, скидки и акции

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

Таблица 1.2. Ключевые слова алгоритмов хэширования

Ключевое словоЗначение
MD5Наборы шифров, использующие MD5. Устаревшие и небезопасные.
SHA, SHA1Наборы шифров, использующие SHA1.
SHA256 (v1.0.0 )Наборы шифров, использующие SHA256.
SHA384 (v1.0.0 )Наборы шифров, использующие SHA384.

Примечание: С помощью ключевых слов алгоритмов хэширования выбираются только те наборы шифров, которые проверяют целостность данных на уровне протокола. В TLS 1.2 появилась поддержка аутентифицированного шифрования, представляющего собой механизм, который связывает шифрование с проверкой целостности.

При использовании так называемых наборов AEAD (Authenticated Encryption with Associated Data), протоколу не требуется обеспечивать дополнительную проверку целостности. По этой причине вы не сможете использовать ключевые слова алгоритмов хэширования для выбора наборов AEAD (в настоящее время это наборы, в названии которых присутствует GCM).

В названиях таких наборов используются суффиксы SHA256 и SHA384, но в данном случае они указывают на хэш-функции, используемые для построения используемой с набором псевдослучайной функции (что вносит некоторую путаницу).

С помощью ключевых слов аутентификации наборы выбираются на основании тех методов аутентификации, которые они используют. Сегодня для аутентификации практически во всех публичных сертификатах используется RSA. Со временем мы, вероятно, увидим очень медленный прирост использования сертификатов Elliptic Curve (ECDSA).

Табица 1.3. Ключевые слова аутентификации

Ключевое словоЗначение
aDHНаборы шифров, фактически использующие аутентификацию DH, то есть сертификаты содержат ключи DH. (v1.0.2 )
aDSS, DSSНаборы шифров, использующие аутентификацию DSS, то есть сертификаты содержат ключи DSS.
aECDH (v1.0.0 )Наборы шифров, использующие аутентификацию ECDH.
aECDSA (v1.0.0 )Наборы шифров, использующие аутентификацию ECDSA.
aNULLНаборы шифров, не предлагающие аутентификацию. В настоящее время это анонимные алгоритмы DH. Небезопасные.
aRSAНаборы шифров, использующие аутентификацию RSA, то есть сертификаты содержат ключи RSA.
PSKНаборы шифров, использующие аутентификацию PSK (Pre-Shared Key).
SRPНаборы шифров, использующие аутентификацию SRP (Secure Remote Password).

С помощью ключевых слов обмена ключами наборы выбираются на основании алгоритма обмена ключами. Когда речь заходит о наборах с эфемерным обменом по протоколу Диффи-Хеллмана, разработчики OpenSSL непоследовательны в именовании наборов и ключевых слов.

В названиях наборов эфемерные алгоритмы обмена ключами, как правило обозначаются буквой E на конце названия алгоритма (например, ECDHE-RSA-RC4-SHA и DHE-RSA-AES256-SHA), а в ключевых словах отбора буква E указывается в начале (например, EECDH и EDH).

Таблица 1.4. Ключевые слова обмена ключами

Ключевое словоЗначение
ADHНаборы шифров с анонимным обменом DH. Небезопасные.
AECDH (v1.0.0 )Наборы шифров с анонимным обменом ECDH. Небезопасные.
DHНаборы шифров, использующие обмен DH (в том числе эфемерный и анонимный обмен DH).
ECDH (v1.0.0 )Наборы шифров, использующие обмен ECDH (в том числе эфемерный и анонимный обмен ECDH).
EDH (v1.0.0 )Наборы шифров, использующие эфемерное согласование ключей DH.
EECDH (v1.0.0 )Наборы шифров, использующие эфемерный обмен ECDH.
kECDH (v1.0.0 )Наборы шифров, использующие эфемерное согласование ключей ECDH.
kEDHНаборы шифров, использующие эфемерное согласование ключей DH (включая анонимный обмен DH).
kEECDH (v1.0.0 )Наборы шифров, использующие эфемерное согласование ключей ECDH (включая анонимный обмен ECDH).
kRSA, RSAНаборы шифров, использующие алгоритм обмена ключами RSA.

С помощью ключевых слов шифров наборы выбираются на основании используемых ими шифров.

Таблица 1.5. Ключевые слова шифров

Ключевое словоЗначение
3DESНаборы шифров, использующие Triple DES. Устаревшие и небезопасные.
AESНаборы шифров, использующие AES.
AESGCM (v1.0.0 )Наборы шифров, использующие AES GCM.
CAMELLIAНаборы шифров, использующие Camellia. Устаревшие.
DESНаборы шифров, использующие Single DES. Устаревшие и небезопасные.
eNULL, NULLНаборы шифров не использующие шифрование. Небезопасные.
IDEAНаборы шифров, использующие IDEA. Устаревшие.
RC2Наборы шифров, использующие RC2. Устаревшие и небезопасные.
RC4Наборы шифров, использующие RC4. Небезопасные.
SEEDНаборы шифров, использующие SEED. Устаревшие.

Остаётся ряд наборов, которые не вписываются ни в одну из рассмотренных ранее категорий. Основная их часть связана со стандартами ГОСТ, которые актуальны для стран, входящих в Содружество Независимых Государств, образовавшееся после распада Советского Союза.

Таблица 1.6. Прочие ключевые слова

Ключевое словоЗначение
@STRENGTHСортирует текущий список наборов шифров в порядке длины ключа алгоритма шифрования..
aGOSTНаборы шифров, использующие аутентификацию GOST R 34.10 (как 2001, так и 94). Для работы требуется модуль обеспечения совместимости с ГОСТ.
aGOST01Наборы шифров, использующие аутентификацию GOST R 34.10-2001.
aGOST94Наборы шифров, использующие аутентификацию GOST R 34.10-94. Устаревшие. Вместо них используйте GOST R 34.10-2001.
kGOSTНаборы шифров, использующие обмен ключами VKO 34.10, определённый в RFC 4357.
GOST94Наборы шифров, использующие HMAC, основанный на GOST R 34.11-94.
GOST89MACНаборы шифров, использующие GOST 28147-89 MAC вместо HMAC.
Оцените статью
Мой сертификат
Добавить комментарий