21 пример команд OpenSSL, которые помогут вам на практике


Оглавление (нажмите, чтобы открыть):

Команды OpenSSL

Полезные команды при работе с SSL-сертификатами

  • Создание ключа для SSL-сертификата.

В случае утери пароля или файла ключа придется заказывать пересоздание сертификата.

Имя домена на который создается запрос прописывается в Common Name — example.com, A challenge password и An optional company name вводить не нужно (просто нажимаем enter).

  • Создание ключа и запроса с данными одной командой:
  • Создание ключа и самоподписанного сертификата одной командой:
  • Убрать пароль с ключа (необходимо когда сертификат ставится руками в конфигурацию Apache иначе он при запуске будет просить пароль):

и вводим пароль с консоли (либо -passin pass:supersecretpassw0rd что менее секурно так как пароль сохраняется в .history)

  • Посмотреть данные CSR:
  • Данные сертификата (проверить кем выдан например):
  • Проверить, что ключ соответствует сертификату:

Два значения должны совпадать.

  • Узнать длину запроса:
  • Проверить выдачу HTTPS:
  • На операционной системе Windows (в IIS в частности) используется PFX-контейнер для сертификата, его можно создать из файлов ключа и сертификата командой:

Как изменить ssl-сертификат, выданный при регистрации сервера?

Далее отвечаете на вопросы и перезапускаете сервер Apache.

Команды OpenSSL

Запомнить все команды наизусть, и помнить их вечно — дело непростое. Вообще не рекомендую этого делать, как бы это странно не звучало. Как по мне лучше хорошо уметь пользоваться справочником, чем изрядно забивать голову большим объемом информации, большая часть которой будет забыта, всё потому что не пригодилась в течении длительного времени.

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

Основные команды:

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

Создание самоподписного сертификата

Создание CSR запроса для существующего приватного ключа

Создание нового CSR запроса на основе существующего сертификата

Удаление секретной фразы-пароля из приватного ключа

Все выше перечисленные команды предназначены для создания CSR запросов, сертификатов, приватных ключей, и др. задач. Так же существуют команды для просмотра данных о сертификате, CSR, закрытых ключей, далее по тексту.

Команды для проверки

Проверка CSR запроса

Проверка приватного ключа

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

Проверка файла PKCS#12 (.pfx или .p12)

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

Эти команды проверяют MD5-хеш открытого ключа на соответствие с CSR и приватного ключа.
Так же можно произвести проверку SSL соединения:

Так же при необходимости есть возможность преобразовать сертификаты и ключи в другие форматы. Делается это обычно для совместимости с конкретными типами серверов и программного обеспечения.

Команды для конвертирования

Конвертирование файла DER (.crt .cer .der) в PEM

Конвертирование файла PEM в DER:

Конвертирование файла PKCS#12, содержащий приватный ключ и сертификат в PEM:

Конвертирование PEM файла и приватного ключа в PKCS # 12:

1.2.1. Создание запроса на сертификат с помощью OpenSSL

Не важно, UNIX у вас или Windows: если вы решили создавать CSR с помощью программы openssl — все действия будут одинаковые, отличаться могут разве только пути к файлам.

Если предполагается, что сертификат должен быть правильным для нескольких доменных имен, то предварительно нужно обеспечить возможность передать openssl дополнительные доменные имена (основное будет запрошено). К сожалению, в openssl нет никакого механизма, чтобы SAN (Subject Alternate Names — альтернативные имена субъекта) можно было запрашивать с консоли. Поэтому, чтобы иметь возможность создавать запросы на сертификаты как с дополнительными именами, так и без них, в файле /etc/ssl/openssl.cnf на том компьютере, на котором создается CSR, следует сделать небольшие добавления, а именно заменить в секции [v3_req] строку subjectAltName, наложив следующий патч (именно этот патч накладывает скрипт keyreq):

— openssl.cnf.old 2012-03-25 21:43:23.000000000 +0700

+++ openssl.cnf 2012-03-25 21:44:47.000000000 +0700 @@ -261,7 +261,7 @@

keyUsage = nonRepudiation, digitalSignature, keyEncipherment

Для задания SAN мы будем использовать переменную окружения SAN, которая должна быть задана вот в такой форме:

SAN=»DNS: www. first. org, DNS :firse. org, DNS: www. second, org»

Ну и, разумеется, для задания содержимого SAN можно использовать все способы, описанные в разделе 1.1.3.

Программа openssl имеет столько различных параметров и режимов работы, что даже описывается не в одной man-странице, а каждому ее режиму работы посвящена отдельная страница. В данном случае мы пользуемся режимом req — режимом генерации запросов на сертификацию. Полная командная строка генерации нового CSR при наличии SAN выглядит так:

env SAN=”DNS:dcltahv.ru, DNS:www.deltahw.ru, emaihcopy, URI: http://www.dcltahw.ru” openssl req -new -shal -newkey rsa:2048 -nodes -keyout filename.key -out filename.pem -config /etc/ssl/ openssl.cnf

При отсутствии необходимости в SAN строка будет куда короче и патч предварительно накладывать не надо:

openssl req -new -shal -newkey rsa:2048 -nodes -keyout filenamc.key -out filename.pern -config /etc/ssl/openssl.cnf


Вся приводимые команды — это одна строка, без конвейеров и перенаправлений! Запускается команда env, которая формирует заданную переменную окружения и вызывает заданную команду, передав ей эту переменную, оттого запись несколько громоздкая. Конечно, это не все ключи командной строки — их там раза в два больше, но остальные имеют отношение главным образом к отображению подготовленного CSR, перекодировке его между различными форматами и созданию самоподписанных сертификатов, которые обычно используются или для тестирования, или как сертификаты СЛ. Эти операции описаны в разделе 1.6.

Разберем нужные нам ключи командной строки подробнее.

  • -new создает новый CSR и заполняет его данными, которые запрашивает у пользователя.
  • -sha 1 — указывает message digest для запроса.
  • -rsa:2048 создаваемый сертификат будет формата RSA 2048 бит. -nodes — не шифровать ключ сертификата.
  • -keyout имя файла ключа сертификата.
  • -out — имя файла собственно CSR.
  • -config указывает, где находится конфигурационный файл openssl.

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

Что здесь можно было бы поменять: кроме message digest sha 1, есть еще md5, md2 и mdc2. Поскольку они все априори слабее, используется максимально сильный digest. (Как известно, message digest позволяет гарантировать, что текст сообщения не был модифицирован.)

Ключи RSA длиной 2048 бит стали использоваться совсем недавно, до этого были 512 и 1024 бита.

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

keyout и out задают имена файлов ключа и CSR. Их можно задавать произвольно.

config — указывает расположение конфигурационного файла openssl. Ключ обязателен только в том случае, если используется конфигурационный файл, расположенный не в /etc/ssl, а в другом месте. В Windows этот ключ обязателен.

Какие еще можно было бы использовать ключи: х509 — мы его использовали при генерации сертификата СЛ. Если в команде указан этот ключ, то генерируется самоподписанный сертификат, а не CSR, серийный номер этого сертификата устанавливается в 0.

days — задает время, в течение которого сертификат будет действителен. По умолчанию для обычных сертификатов — 365 дней (1 год), для CRL — 30 дней. Для сертификатов СА обычно задается достаточно продолжительный период времени (10 лет и более, например мы при создании нашего сертификата СЛ указали интервал 20 лет).

set serial — имеет смысл только для сертификатов СЛ. Задает серийный номер сертификата С Л и фактически номер, с которого начнется нумерация в данном СЛ (все сертификаты получают номер после номера СЛ). Правда, при этом нужно соответствующим образом поправить файл serial.

При создании CSR (любым способом), как правило, нужно указывать некоторые данные. Практически ни одни запрашиваемые данные не являются обязательными, но не указать некоторые — значит просто создать бессмысленный сертификат, потому что многие проверки базируются как раз на значениях, получаемых из этих полей. Все данные указываются ASCII-кодами с применением транслитерации. Транслитерация русских букв, вообще говоря, не стандартизирована, некоторые используют свои собственные таблицы, но я как человек ленивый предпочитаю использовать готовую таблицу, которую используют при заполнении загранпаспортов [5].

При вводе строк имейте в виду, что кавычки любого типа считаются недопустимыми символами — сертификат с ними будет создан, но в дальнейшем при попытке проверить его поля могут возникнуть проблемы в силу того, что кавычки в ОС UNIX могут быть «интерпретированы», а не просто переданы. То есть при получении, например, строки ‘ sometext’ будет выполняться команда sometext. Разные программы по-разному обрабатывают поля, а сертификат выдается надолго. Обнаружите ошибку — и придется еще год с ним мириться, писать обходы — ведь как всегда, по закону падающего бутерброда, ошибочный сертификат будет выдан одному из директоров. Поэтому лучше ограничиться старым добрым DOS’obckum стандартом — [a-zA- Z0-9], а также символами «минус» и «знак подчеркивания». Максимальная длина строк указана в разделе 1.1.2.

Как правило, запрашиваются:

  • ? страна (Country). Указывается двухбуквенным кодом по ISO 3166, Россия имеет код «RU»;
  • ? регион (State or Province). Указывается произвольной строкой текста. При этом слово «область» обычно указывается как region;
  • ? город (Locality). Указывается название города;
  • ? наименование организации (Organization Name). Указывается наименование организации вместе с организационно-правовой формой, при этом для указания собственно формы используется не транслитерация сокращения, а его перевод в общепринятое латинское, например ООО => LLC, несмотря на то что это не точное соответствие. Можно также указать в конце наименования Ltd [1] ;
  • ? наименование подразделения (Organizational Unit Name). Указывается наименование подразделения организации, если, конечно, таковое имеется. Также можно вписать любой текст, который можно потом проверить;
  • ? общее имя (Common Name). Самое важное поле, собственно, из-за которого сертификат и выдается. Заносить сюда произвольное значение можно, только если сертификат запрашивается для человека. Если запрашивается сертификат для серве- ра/сервиса, в этом поле должно содержаться DNS-имя сервера, к которому будут обращаться. Имя должно быть записано в точности так, как будет использоваться. Если, например, будет использоваться http://www.deltahw.ru, то поле CN должно содержать www.deltahv;.ru. Если же сертификат запрашивается на человека, то сюда обычно заносятся имя и фамилия;
  • ? адрес электронной почты (Email). Самое важное поле в персональных сертификатах. Здесь указывается адрес электронной почты, для защиты которой он будет использоваться. Если персональный сертификат будет использоваться с другой целью (например, для доступа к защищенному ресурсу), сюда можно вписать произвольный текст, но для защиты электронной почты такой сертификат уже не подойдет. Для серверов/сервисов не используется, можно вписать произвольный текст, обычно это адрес электронной почты ответственного лица.

Итак, создадим запрос на сертификат для сервера www.deltahw.ru таким образом, чтобы допустимыми именами для него были также deltahw.ru и ftp.deltahw.ru:

Мастер Йода рекомендует:  В чём разница между шифрованием, кодированием и хешированием

# env SAN=”DNS:dcltahw.ru, DNS: ftp.dcltahw.ru, emaihcopy, URI: http://www.deltahw.ru” opcnssl rcq -new -shal -newkey rsa:2048 -nodes -keyout deltalnv.key -out deltahw.pem -config /etc/ssl/opcnssl.cnf

Generating a 2048 bit RSA private key . +++

writing new private key to ‘deltahw.key’

You are about to be asked to enter information that w’ill be incorporated into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank For some fields there will be a default value,

If you enter the field will be left blank.

Country Name (2 letter code) [AU]:RU

State or Province Name (full name) [Some-State]:Novosibirsk region Locality Name (eg, city) [ ] :Novosibirsk

Organization Name (eg, company) [Internet Pty Ltd]:DeltaHardware Ltd. Organizational Unit Name (eg, section) []:Web Server Common Name (eg, YOUR name) []rwww.deltahw.ru Email Address []: Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script

Please enter the following ‘extra’ attributes to be sent with your certificate request A challenge password []:

An optional company name []:

Теперь у нас есть файл ключа сертификата — перемещаем его сразу в каталог /etc/ssl — и файл CSR. В нашем случае файл CSR мы сразу можем переписать в ssl.csr и создавать сертификат. В обычном случае CSR направляется в СЛ обычными способами — электронной почтой, FTP, веб-формами, даже на флэшке можно принести — в нем нет ни конфиденциальной информации, ни пользы для того, кто его может перехватить. В Windows файл ключа просто прибирается «подальше» до тех пор, пока не будет получен собственно сертификат, после чего сертификат вместе с ключом будет импортирован в системное хранилище, поскольку один личный ключ поместить в системное хранилище нельзя.

Важно! Если вы используете в SAN атрибуты DNS, то при проверке правильности сертификата при заходе на страницу имя из атрибута CN больше не используется! Используются только имена, перечисленные в SAN.

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

OpenSSL – это многофункциональный инструмент командной строки, предназначенный для управления инфраструктурой открытых ключей (PKI) и HTTPS.

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

Запросы на подпись сертификатов (CSR)

Чтобы получить SSL-сертификат от центра сертификации (ЦС), нужно сначала создать запрос на подпись сертификата (CSR). CSR включает в себя открытый ключ и некоторые дополнительные данные. При подписи эти данные добавляются в сертификат.

Чтобы сгенерировать запрос на подпись сертификата, нужно предоставить данные о сертификате. В частности важно правильно заполнить поле Common Name (CN) в разделе Distinguised Name, в котором нужно указать FQDN хоста, для которого предназначается сертификат. Чтобы обойти интерактивные подсказки, можно передать все запрашиваемые данные через командную строку.

Другие поля в разделе Distinguised Name запрашивают данные об организации или компании. Если вы заказываете сертификат в ЦС, эти поля, как правило, нужно обязательно заполнить.

Запрос на подпись сертификата имеет такой вид:


Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:Brooklyn
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Brooklyn Company
Organizational Unit Name (eg, section) []:Technology Division
Common Name (e.g. server FQDN or YOUR name) []:examplebrooklyn.com
Email Address []:

Чтобы ответить на запросы CSR в неинтерактивном режиме, добавьте в команду опцию –subj, например:

-subj «/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=examplebrooklyn.com»

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

Генерирование запроса на подпись сертификата

Генерирование закрытого ключа и запроса

Этот метод позволяет вам подписать сертификат в ЦС и защитить веб-сервер Apache или Nginx с помощью HTTPS. Сгенерированный запрос на подпись можно отправить в ЦС, чтобы получить подписанный сертификат. Если ЦС поддерживает SHA-2, добавьте опцию -sha256.

Следующая команда создаст 2048-битный закрытый ключ (domain.key) и CSR (domain.csr):

openssl req \
-newkey rsa:2048 -nodes -keyout domain.key \
-out domain.csr

Заполните поля в запросе на подпись.

Опция -newkey rsa:2048 создаст 2048-битный RSA-ключ. Опция –nodes отключает пароль для закрытого ключа.

Генерирование запроса для существующего закрытого ключа

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

Следующая команда создаст запрос сертификата (domain.csr) для существующего ключа (domain.key):

openssl req \
-key domain.key \
-new -out domain.csr

Ответьте на запросы программы, чтобы продолжить. Опция –new указывает, что запрос нужно сгенерировать.

Генерирование запроса для существующего сертификата и ключа

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

Следующая команда создаст запрос (domain.csr) на основе существующего сертификата (domain.crt) и закрытого ключа (domain.key):

openssl x509 \
-in domain.crt \
-signkey domain.key \
-x509toreq -out domain.csr

Опция -x509toreq создаст сертификат X509.

Генерирование SSL-сертификата

Если вы хотите защитить свой сервис, но не хотите подписывать его в ЦС, вы можете создать и подписать сертификат самостоятельно.

Такие сертификаты называются самоподписанными.

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

Если вам ненужно подтверждать подлинность сайта, вы можете спокойно использовать самоподписанные сертификаты.

Генерирование самоподписанного сертификата

Этот метод позволяет защитить веб-сервер Apache или Nginx с помощью HTTPS.


Следующая команда создаст 2048-битный закрытый ключ (domain.key) и CSR (domain.csr):

openssl req \
-newkey rsa:2048 -nodes -keyout domain.key \
-x509 -days 365 -out domain.crt

Заполните запрос на подпись.

Опция -x509 создаёт самоподписанный сертификат. Опция -days 365 задаёт срок действия сертификата в днях.

Создание сертификата для существующего закрытого ключа

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

Следующая команда создаст сертификат (domain.csr) для существующего ключа (domain.key):

openssl req \
-key domain.key \
-new \
-x509 -days 365 -out domain.crt

Ответьте на запросы программы, чтобы продолжить.

  • Опция -x509 создаёт самоподписанный сертификат. Опция -days 365 задаёт срок действия сертификата в днях.
  • Опция –new запускает запрос данных для создания CSR.

Генерирование запроса для существующего сертификата и ключа

Этот метод позволяет создать сертификат, если у вас уже есть закрытый ключ и запрос на подпись сертификата.

Следующая команда создаст сертификат (domain.crt) на основе существующего запроса (domain.csr) и закрытого ключа (domain.key):

openssl x509 \
-signkey domain.key \
-in domain.csr \
-req -days 365 -out domain.crt

Опция -days 365 задаёт срок действия сертификата в днях.

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

Файлы сертификатов и запросов на подпись закодированы в формате PEM, который не может быть прочитан человеком.

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

Просмотр CSR

Эта команда позволяет просмотреть содержимое файла запроса на подпись сертификата в виде простого текста:

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

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

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

openssl x509 -text -noout -in domain.crt

Проверка подписи сертификата

Чтобы убедиться, что сертификат был подписан в ЦС, введите:

openssl verify -verbose -CAFile ca.crt domain.crt

Закрытые ключи

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

Чтобы создать закрытый 2048-битный ключ, защищённый паролем, введите:

openssl genrsa -des3 -out domain.key 2048

По запросу введите пароль, чтобы продолжить.

Проверка закрытого ключа

Эта команда подтвердит валидность закрытого ключа:

openssl rsa -check -in domain.key

Если ключ зашифрован, программа запросит парольную фразу. Предоставьте пароль от ключа, чтобы просмотреть его в незашифрованном формате.

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

Эта команда позволяет узнать, относится ли закрытый ключ (domain.key) к тому или иному сертификату (domain.crt) и запросу (domain.csr):

openssl rsa -noout -modulus -in domain.key | openssl md5
openssl x509 -noout -modulus -in domain.crt | openssl md5
openssl req -noout -modulus -in domain.csr | openssl md5

Если команды вернули одинаковый вывод, то, скорее всего, этот ключ, запрос и сертификат связаны.

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

Следующая команда возьмёт незашифрованный ключ (unencrypted.key) и зашифрует его (encrypted.key):

openssl rsa -des3 \
-in unencrypted.key \
-out encrypted.key

Введите пароль, чтобы зашифровать ключ.

Дешифровка закрытого ключа

Эта команда может расшифровать зашифрованный ключ:

openssl rsa \
-in encrypted.key \
-out decrypted.key
Enter the pass phrase for the encrypted

Введите пароль, чтобы расшифровать ключ.

Форматы сертификатов

До этого в руководстве рассматривались только сертификаты X.509 с кодированием ASCII PEM. Однако существует множество других форматов. Некоторые форматы позволяют объединить компоненты – ключ, запрос, сертификат – в один файл.

Конвертация PEM в DER

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

openssl x509 \
-in domain.crt \
-outform der -out domain.der

Формат DER обычно использует Java.

Конвертация DER в PEM

Для этого введите:

openssl x509 \
-inform der -in domain.der \
-out domain.crt

Конвертация PEM в PKCS7

Чтобы добавить сертификаты PEM (domain.crt и ca-chain.crt) в файл PKCS7 (domain.p7b), введите:

openssl crl2pkcs7 -nocrl \
-certfile domain.crt \
-certfile ca-chain.crt \
-out domain.p7b

Файлы PKCS7 (также известные как P7B) часто используются в Java Keystores и Microsoft IIS (Windows).

Конвертация to PKCS7 в PEM

Чтобы конвертировать PKCS7 в PEM, введите:

openssl pkcs7 \
-in domain.p7b \
-print_certs -out domain.crt

Обратите внимание: файл PKCS7 содержит много компонентов, а именно сертификат и промежуточный сертификат ЦС.

Конвертация PEM в PKCS12

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

openssl pkcs12 \
-inkey domain.key \
-in domain.crt \
-export -out domain.pfx


Программа запросит пароль. Файл PKCS12 позволяет объединить несколько сертификатов в один PEM-файл (domain.crt).

Файлы PKCS12 (или PFX) обычно используются для перемещения наборов сертификатов в Micrsoft IIS (Windows).

Конвертация PKCS12 в PEM

Чтобы конвертировать файл PKCS12 в формат PEM, введите:

openssl pkcs12 \
-in domain.pfx \
-nodes -out domain.combined.crt

Если в файле PKCS12 было несколько объектов (например, ключ и сертификат), все они переместятся в файл PEM.

Версии OpenSSL

Чтобы проверить версию OpenSSL, используйте команду openssl version.

Следующая команда выведет версию OpenSSL и все параметры, с которыми она была скомпилирована.

openssl version -a

В данном руководстве используется бинарный файл OpenSSL со следующими подробностями:

OpenSSL 1.0.1f 6 Jan 2014
built on: Mon Apr 7 21:22:23 UTC 2014
platform: debian-amd64
options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx)
compiler: cc -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector —param=ssp-buffer-size=4 -Wformat -Werror=format-security -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
OPENSSLDIR: «/usr/lib/ssl»

Теперь вы знакомы с основными методами и командами OpenSSL.

Создание сертификата OpenSSL

В наши дни очень часто для повышения безопасности сетевых соединений или просто для аутентификации используются ssl сертификаты. Одна из самых популярных свободных программ для создания сертификатов — это OpenSSL. Это утилита командной строки, которая позволяет создавать различные виды сертификатов, например, PKI или HTTPS.

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

Что такое сертификаты?

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

Если вы смогли расшифровать отправленное сообщение, зашифрованное с помощью вашего открытого ключа, то значит — это вы. Ключи работают только в паре, и вы не сможете расшифровать ничего другим ключом. Но еще остался один момент. Как определить что этот открытый ключ именно ваш, например, принадлежит вашему домену? Все просто, достаточно, чтобы кто-то из авторитетных источников, например, Comodo или LetsEncrypt подписал ваш ключ. Это так называемые центры сертификации.

В этой инструкции мы будем иметь дело с такими видами ключей:

  • .pem, .crt, .cer — готовый, подписанный центром сертификации сертификат, расширения разные, но означают одно и то же. Если совсем просто, то сертификат, это подписанный открытый ключ, плюс немного информации о вашей компании;
  • .key — закрытый или открытый ключ;
  • .csr — запрос на подпись сертификата, в этом файле хранится ваш открытый ключ плюс информация, о компании и домене, которую вы указали.

А теперь рассмотрим как создать сертификат openssl, как его подписать и что для этого нужно сделать. Генерация ключей openssl — это довольно простая задача, если во всем разобраться.

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

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

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

openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr

Опция -newkey указывает, что нужно создать новую пару ключей, а в параметрах мы сообщаем тип rsa и сложность 2048 байт. Опция -nodes указывает, что шифровать ключ не нужно, опция -new указывает что нужно создать запрос csr. Если у вас уже есть закрытый ключ, то вы можете создать для него csr запрос такой командой:

Мастер Йода рекомендует:  10 интересных вопросов по Java, которые вам могут задать на собеседовании

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

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

openssl genrsa -des3 -out domain.key 2048

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

openssl x509 -in domain.crt -signkey domain.key -x509toreq -out domain.csr

Параметр -x509toreq указывает, что нужно использовать сертификат для X509 для получения CSR. X509, это сертификаты, подписанные сами собой. Обычно сертификат подписывается другим сертификатом, а этот был подписан сам собой. Если вы получили сертификат от CA, то этот параметр не нужен.

Подпись сертификатов OpenSSL

Допустим, у вас есть приватный ключ и запрос на подпись, фактически, открытый ключ. Теперь вам нужно его подписать чтобы получить сертификат, который можно использовать. Тут есть несколько вариантов. Можно отправить csr файл на подпись какому-либо центру сертификации, например, LetsEncrypt. Можно подписать сертификат тем же ключом, с помощью которого он был создан, и третий вариант — создать свой центр сертификации.

Первый способ я рассматривать не буду. Здесь все просто. Либо используете утилиту сервиса, либо заполняете веб форму и получаете готовый сертификат. Второй вариант гораздо интереснее. Мы подпишем наш сертификат сами, ключом, на основе которого он был создан:

openssl x509 -signkey domain.key -in domain.csr -req -days 365 -out domain.crt

С помощью параметра -days мы указываем что сертификат будет действительным в течение 365 дней, то есть в течение года. Вы можете объединить все в одну команду и сразу создать закрытый ключ, csr и подписанный сертификат:

openssl req -newkey rsa:2048 -nodes -keyout domain.key
-x509 -days 365 -out domain.crt

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

openssl req -key domain.key -new -x509 -days 365 -out domain.crt

Опция -new говорит, что нужно запросить информацию о csr у пользователя. Чтобы браузер доверял ключу нужно этот же сертификат импортировать в список доверенных. А теперь рассмотрим третий способ выполнить создание сертификата OpenSSL — подписать его с помощью собственного CA, центра сертификации.

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

Вообще, центр сертификации в крупных корпорациях находится на отдельных компьютерах, которые даже к сети не подключены. Но для примера мы разместим папку в нашей файловой системе /etc/:

Дальше нужно создать самоподписанный сертификат openssl для нашего CA:

openssl req -newkey rsa:4096 -x509 -extensions x509_ca -keyout /etc/ca/certs/ca.key -out /etc/ca/certs/ca.crt -days 3654

Параметр -extensions загружает необходимые расширения для создания сертификата центра сертификации. Мы устанавливаем долгий строк действия — десять лет. Осталось подписать наш сертификат, созданный ранее:

openssl ca -extensions x509_client -in

Готово, теперь наш сертификат подписан. Но теперь, чтобы браузеры ему доверяли нужно добавить сертификат CA в список доверенных браузера.

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

Сертификаты сохраняются в формате pem, а это значит, что вы не сможете их открыть как текстовый файл и нужно использовать специальные команды для просмотра информации о них. Сначала смотрим содержимое csr:

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

Смотрим содержимое сертификата в режиме обычного текста:

openssl x509 -text -noout -in domain.crt

Проверяем действительно ли сертификат подписан нужным CA:

openssl verify -verbose -CAfile ca.crt domain.crt

Просмотр закрытого ключа:

openssl rsa -check -in domain.key

Чтобы проверить связаны ли между собой закрытый ключ, сертификат и открытый ключ можно подсчитать сумы md5 для этих ключей, если значения совпадут, то есть вероятность что это ключи из одной пары:

openssl rsa -noout -modulus -in domain.key | openssl md5
$ openssl x509 -noout -modulus -in domain.crt | openssl md5
$ openssl req -noout -modulus -in domain.csr | openssl md5

Выводы

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

Как: Создать CSR в OpenSSL без Вопросов (Неинтерактивно)

В это статье, Вы найдете информацию о том, как сгенерировать CSR (Запрос на Подписание Сертификата) с помощью OpenSSL из командной строки в Linux, автоматически отвечая на вопросы о теме сертификата.

Ниже Вы найдете два примера создания CSR с помощью OpenSSL.

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

А во втором примере Вы увидите как сгенерировать CSR из существующего ключа (если у Вас уже есть секретный ключ и Вы ходите продолжить использовать его).

Оба примера показывают как создать CSR с помощью OpenSSL автоматически (во время генерации CSR Вас не будут спрашивать о значении полей темы сертификата).


Таким образом Вы можете использовать эти примеры в shell скриптах, для автоматизации генерации CSR.

Создание CSR и Ключа в OpenSSL Без Вопросов

Используйте следующую команду для генерации нового 2048-битного секретного ключа example.key и создания CSR example.csr на его основании:

Опция Описание
openssl req утилита генерации CSR
-nodes секретный ключ не шифруется
-newkey создание CSR и нового секретного ключа
rsa:2048 генерация 2048-битного RSA ключа
-keyout файл в который будет записан новый секретный ключ
-out файл в который будет записан CSR
-subj устанавливает тему сертификата

Генерация CSR из Существующего Ключа в OpenSSL

Используйте следующую команду для генерации CSR example.csr из секретного ключа example.key :

Опция Описание
openssl req утилита генерации CSR
-new создание нового CSR
-key указывает из какого файла брать секретный ключ
-out файл в который будет записан CSR
-subj устанавливает тему сертификата

Автоматическая Неинтерактивная Генерация CSR

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

-subj arg Указывает значение полей темы сертификата. Аргументы (arg) должны передаваться в формате /тип0=значение0/тип1=значение1/тип2=…, символы могут экранироваться \ (обратным слэшем), пробелы не пропускаются.

Ниже приведены поля, которые необходимо заполнить для создания CSR:

Поле Значение Пример
/C= Country (Страна) GB
/ST= State (Область) London
/L= Location (Город) London
/O= Organization (Организация) Global Security
/OU= Organizational Unit (Отдел организации) IT Department
/CN= Common Name (Доменное имя сайта) example.com

Вы создали Запрос на Подписание Сертификата, который представляет из себя закодированный файл.

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

linux-notes.org

Примеры использования OpenSSL в Unix/Linux

При работе с SSL, нужно уметь работать с утилитой OpenSSL чтобы создавать, конвертировать, управляют SSL-сертификатами. В этой статье «Примеры использования OpenSSL в Unix/Linux» я буду говорить о примерах использования OpenSSL.

Некоторые из сокращений, связанных с сертификатами:

  • SSL – Secure Socket Layer (Безопасный уровень сокета).
  • CSR – Certificate Signing Request (Запрос на подпись сертификата).
  • TLS – Transport Layer Security (Транспортный уровень безопастности).
  • PEM – Privacy Enhanced Mail
  • DER – Distinguished Encoding Rules
  • SHA – Secure Hash Algorithm (Безопасный hash алгорит).
  • PKCS – Public-Key Cryptography Standards (Стандарты шифрования публичных ключей).

Создание нового приватного ключа (Private Key) и Certificate Signing Request (CSR).

Команда выше будет генерировать CSR и 2048-битный RSA ключ. Если вы собираетесь использовать этот сертификат в Apache или Nginx, то вам необходимо отправить этот CSR файл в службу сертификации и они дадут вам подписанный сертификат в «der» или «pem» формате. После чего вы настроите его на веб-сервере Apache или Nginx.

Так же, можно использовать такой вариант:

Создание самоподписанного сертификата (Self-Signed Certificate).

Команда выше будет генерировать самоподписанный сертификат (self-signed) и 2048-битный RSA ключ. Я также использую алгорит шифрования — SHA256. Так как он считается наиболее безопасным в данный момент.

Замечание: По умолчанию, будет сгенерирован ключ толкьо на 1 месяц, если нужно создать на более длительное время — используйте опцию «–days», пример использования ниже.

Пример: Чтобы создать self-signed сертификат на 2 год, используйте:

Проверка CSR файла.

и вы получите информацию.

Проверка подписи (signature):

Кем(кому) был выдан сертификат:

Показать открытый ключ (public key):

Создать приватный RSA ключ (Private Key).

Чтобы это сделать, выполните:

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

Удалить ключевую фразу (Passphrase) с ключа.

Если вы установили ключевую фразу для ключа, то при каждом старте веб-сервера (Apache/Nginx) вы должны будите вводить пароль. Если это вас злит, вы можете с легкостью удалить passphrase с RSA ключа.

Проверка приватного ключа (Private Key)

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

Проверка сертификата (Certificate).

Если вы хотите проверить данные сертификата( CN, OU, и т.д.), то вы можете использовать команду, которая даст вам сведения о сертификате:

Команда довольна простая в использовании.

Проверка подписанного сертификата (Certificate Signer Authority).

Можно узнать много полезного.

Создать тестовый SSL сервер.

Команда OpenSSL s_server реализует общий SSL/TLS-сервер. Она должна использоваться только для целей тестирования. В приведенном ниже примере данный сервер прослушивает соединения на порту 8080 и возвращает отформатированную HTML страницу статуса, который включает много информации о ciphers:

Проверить хеш вашего сертификата.

Конвертирование сертификатов с DER в PEM формат.

Как правило, при покупке SSL сертификатов, его отдают вам в формате .der и если вам нужно использовать его в веб-сервере или .pem формате, вы можете использовать команду выше, чтобы преобразовать такие сертификаты.

Конвертирование сертификатов с PEM в DER формат.

В случае, если вам необходимо изменить .pem формат в .der:

Конвертирование CSR c DER в PEM формат.

Конвертирование сертификата и приватного ключа в PKCS#12 фотмат.

Если вам необходимо использовать сертификат с приложением Java или с любым другим, кто принимает формат PKCS# 12.

Совет: Вы можете включить «chain certificate» используя «-chain» опцию:

Создание CSR используя приватный ключ (private key).

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

Проверьте содержимое сертификата в PKCS12 формате.

PKCS12 — это двоичный формат, так что вы не сможете просматривать содержимое в блокноте или другом редакторе. Таким образом, вы должны использовать команду что выше, для просмотра содержимого файла формата PKCS12.

Конвертирование PKCS12 формата в PEM сертификат.

Получить SHA-1 отпечаток сертификата или CSR

Чтобы получить отпечаток SHA1 сертификата с использованием OpenSSL, используйте команду, приведенную ниже:

Чтобы получить SHA1 отпечаток пальца CSR с использованием OpenSSL, используйте команду, приведенную ниже:

Получить MD5 отпечаток сертификата или CSR

Чтобы получить отпечаток MD5 сертификата с использованием OpenSSL, используйте команду, приведенную ниже:

Чтобы получить MD5 отпечаток пальца CSR с использованием OpenSSL, используйте команду, приведенную ниже:

Тестирование SSL сертификата по URL.

Я использую это довольно часто для проверки SSL-сертификатов по URL с сервера. Это очень удобно для проверки некоторых деталей протокола, шифров и CERT.

Узнать версию OpenSSL


Поверка PEM сертификата на завершение (Expiration Date).

Проверка завершения SSL сертификата (Expiration Date) по URL.

Проверить поддержку SSL версии V2/V3 по URL.

Проверка SSL версии V2:

Проверка SSL версии V3:

Проверка TLS 1.0:

Проверка TLS 1.1:

Проверка TLS 1.2:

Проверка поддержки cipher для сайта по URL.

Какой алгоритм используется в сертификате (проверка).

Или, используя URL:

Получить сертификат по URL

Команда что ниже, сохранит сертификат в файл прямо по URL сайта:

Если веб-сервер имеет несколько сертификатов на один IP-адрес, то вам нужно будет сообщить OpenSSL, какой сертификат будет использоваться, пример ниже:

Вот и все, много полезностей и все в одной статье «Примеры использования OpenSSL в Unix/Linux».

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Хардкорные возможности OpenSSL и OpenSSH, о которых ты не знал

Содержание статьи

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

OpenSSH

OpenSSH, пришедший на смену дырявому Telnet, до сих пор занимает первое место среди систем удаленного управления благодаря безопасности и простоте в использовании. Разобраться в нем способны все, даже самые хромированные чайники, однако подавляющее большинство пользователей задействует минимум его возможностей. Опустим рассказы о ключах, пробросах портов, проксировании и других полезных, но всем известных приемах и рассмотрим на самом деле интересные и не слишком распространенные способы использования этого инструмента.

Хакер #157. Деньги на багах в Chrome

С полным списком команд OpenSSL можно ознакомиться с помощью следующих параметров: list-standart-commands, list-message-digest-commands, list-cipher-commands.

Итак, трюк номер один — множественные подключения. OpenSSH способен обслуживать множество одновременных соединений с одной и той же машиной. Обычно пользователи просто запускают команду и ждут ее завершения, чтобы запустить следующую. К счастью, эту проблему легко обойти путем разделения одного соединения на множество сессий. Просто добавь в конфиг ssh (

Мастер Йода рекомендует:  Дизайн-центр «Сбертеха» открыл набор специалистов на двухмесячную стажировку

/.ssh/config) следующие строки:

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

Шифруем файлы с помощью OpenSSL

Трюк номер два — проксирование соединений. Допустим, ты не можешь создать соединение с SSH-сервером напрямую, но можешь использовать для этого другой хост, к которому ты тоже имеешь SSH-доступ. Добавь в свой конфиг следующие строки:

Команда ssh host создаст соединение с сервером host.com через сервер proxy-host.com.

Трюк номер три — выход за пределы HTTP-изоляции. Многие организации не просто режут неугодный им трафик, но и принуждают пользователей выходить в Сеть только с использованием HTTP-протокола. Такую несправедливость легко обойти с помощью сorkscrew (www.agroman.net/corkscrew/), который умеет туннелировать SSH-трафик через HTTP. Просто установи его на свою машину и добавь в конфиг следующие строки (где proxy.com и 80 — это адрес внешнего HTTP-прокси и его порт):

Теперь все соединения пойдут через указанный HTTP-прокси.

Трюк номер четыре — тест пропускной способности сети. Чтобы протестировать скорость соединения, необязательно устанавливать специализированное ПО, достаточно утилиты pv и старого доброго SSH:

Тестируем скорость соединения с помощью SSH и pv

Трюк номер пять — удаленный анализ сетевого трафика. Почти в любой UNIX-системе есть сетевой сниффер tcpdump, однако читать его логи довольно утомительно. Возможности OpenSSH помогут упростить анализ трафика:

Теперь весь трафик, проходящий через host.com, будет виден в графическом окне wireshark на твоей машине.

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

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

Делаем бенчмарк SSL-сервера Gmail

Трюк номер восемь — запуск команды на нескольких серверах одновременно. Комментарии излишни:

Трюк номер девять — удаленное сравнение файлов. Часто требуется сравнить локальную и удаленную версию какого-либо конфига, однако копировать файлы туда-сюда неудобно и долго. В этом случае можно воспользоваться следующей командой:

То же самое можно проделать для двух файлов, находящихся на разных серверах:

cpu0: RNG AES

Результаты бенчмарка криптографических средств, встроенных в CPU платформы VIA Eden (процессорные инструкции для работы с алгоритмом блочного симметричного шифрования AES):

Трюк номер 10 — одновременный просмотр логов с нескольких машин. С помощью multitail и SSH можно запросто просматривать логи с двух серверов одновременно:

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

Трюк номер 12 — копирование вывода удаленной команды в буфер обмена. Часто требуется скопировать вывод удаленной команды в буфер обмена, чтобы вставить его в письмо, сообщение форума и т. д. Проще всего это сделать с помощью утилиты xclip:

Трюк номер 13 — синхронизация времени средствами SSH. В случае, если машина не имеет доступа к NTP-серверу или на ней не установлен NTP-клиент, синхронизировать время между машинами можно так:

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

Трюк номер 15 — снимок удаленного экрана. Можно очень легко получить изображение X-сервера с удаленной машины, воспользовавшись стандартным графическим пакетом ImageMagick:

Чтобы сохранить его в файле, последнюю команду следует заменить на «> file.png»

Трюк номер 16 — ускорение передачи данных. Если машины, с которыми установлено соединение, находятся внутри заведомо безопасной сети (например, офис или дом), передачу данных средствами SSH можно несколько ускорить, если использовать менее стойкий алгоритм шифрования. Для этого добавь в конфигурационный файл следующие строки:

Трюк номер 17 — вывод звука с удаленной машины на локальную. Вместе с картинкой рабочего стола удаленной машины иногда хочется получить и звук. Это делается с помощью банального dd:

Трюк номер 18 — запуск локального скрипта на удаленной машине. Нередко требуется запустить скрипт на удаленной машине, однако копировать его туда совсем необязательно, достаточно выполнить следующую простую команду:

OpenSSL

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

  • создание ключей RSA и DSA и управление ими (команды rsa, dsa, dsaparam);
  • создание сертификатов формата x509, формирование запросов на сертификацию, восстановление (команды x509, req, verify, ca, crl, pks12, pks7);
  • симметричное и асимметричное шифрование данных (команды enc, rsautl);
  • расчет хешей (команда dgst);
  • работа с S/MIME (команда s/mime).

Также OpenSSL может быть использован для проверки SSL-серверов и клиентов с помощью специальных команд sclient/sserver и для тестирования скорости работы различных алгоритмов (команда speed).

Мы не раз писали о работе с пакетом OpenSSL, поэтому не будем рассматривать стандартные примеры его использования вроде создания хешей и сертификатов, а сразу перейдем к более серьезным трюкам.

Тестируем скорость алгоритмов с помощью команды speed

Время — деньги

Одна из интересных особенностей OpenSSL заключается в том, что он может провести бенчмарк используемых алгоритмов и скорости установления SSL-соединения. Для этого предназначена стандартная команда s_time. Чтобы оценить скорость установки SSL-соединения, нужно применить ее к команде openssl:

То же самое можно проделать с помощью наиболее стойких алгоритмов:

Эти две команды позволяют определить максимальную пропускную способность SSL-сервера. Но еще более интересный способ заключается в тестировании всех поддерживаемых алгоритмов. Для этого нам придется прибегнуть к скриптингу:

Такая команда позволяет измерить скорость установки SSL-соединения с помощью различных алгоритмов шифрования, что можно использовать, например, для тюнинга SSL-сервера. Если же SSL-сервера как такового еще нет, его легко эмулировать с помощью самого OpenSSL. На серверной машине запускаем OpenSSL-сервер:

На клиентской выполняем следующую команду:

Клиентская сторона

Еще одна интересная команда OpenSSL — это s_client, которая позволяет коннектиться к удаленным SSL-серверам для их тестирования. Чаще всего я использую эту команду, чтобы проверить дату выдачи сертификата. Для этого следует просто подключиться к удаленному SSL-серверу, дождаться, пока на экране появится информация о сертификате, а затем прогнать его через всё тот же openssl, чтобы вычленить даты. При использовании одной команды всё это выглядит так:


Вычленяем нужную информацию из сертификата x509

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

Сервер, не поддерживающий нестойкие алгоритмы шифрования, просто откажется устанавливать соединение, как это и произошло в случае с сервером Google. Команда s_client также довольно удобна для отладки различных протоколов (в этом случае она выступает в виде SSL’ного Telnet). Например:

Шифрование

О шифровании с помощью OpenSSL не писал только ленивый, поэтому мы остановимся не на самих принципах шифрования, а на том, как его можно использовать для вспомогательных задач. Утилита командной строки openssl удобна тем, что она, как и все остальные команды UNIX, может принимать данные на вход и имеет для них стандартный выход. В результате с помощью одной простой команды можно обеспечить, например, защищенную передачу файла по сети:

Можно также применять и различные скрипты, чтобы автоматизировать шифрование множества файлов (пароль шифрования в /tmp/passwd):

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

Для шифрования целого каталога проще, конечно, воспользоваться такой конструкцией:

OpenSSL удобно использовать для генерирования паролей:

А сгенерировать хеш для записи в /etc/passwd можно так:

Кстати, кодирование в base64 может пригодиться для отправки файлов, если двоичная передача данных не поддерживается:

Возможность генерирования случайных данных можно использовать для создания фиктивных MAC-адресов:

Выводы

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

Пример защищённого соединения socket OpenSSL

24.11.2020, 14:42

Разрыв соединения и socket
В проекте использую клиент VNC с открытым исходным кодом TightVNC, в нем для обмена по сети.

Ошибка при установлении защищённого соединения
Всем привет! Ситуация следующая: с относительно недавних пор (где-то около недели) некоторые сайты.

Не могу обработать запрос от защищённого соединения к незащищённому
Привет всем, не могу найти выход из положения. Есть два сайта, один защищённый второй нет. Два.

Некоторые сайты выдают :Ошибка при установлении защищённого соединения
Здравствуй, Несколько дней давно используемый сайт стал выдавать с любого браузера на.

Потеря соединения TClient Socket — TServer Socket
После коннекта клиента к серверу минут 20 соединение живёт и клиенты получают сообщения через.

25.11.2020, 00:12 2 25.11.2020, 14:17 3

Решение

1. Читай инструкцию к OpenSSL.
Генерировать сертификаты и ключи можно и программно, и через командную строку.
Например, я использовал следующие функции для программного создания
сертификата TLS/SSL и ключей для него:

RSA_generate_key, EVP_PKEY_new, EVP_PKEY_assign_RSA, X509_new, X509_set_version,
X509_set_notBefore, X509_set_notAfter, X509_set_pubkey, X509_set_subject_name,
X509_get_subject_name, X509V3_set_ctx, X509V3_EXT_conf, X509_add_ext,
X509_get_ext_by_NID, X509_get_ext и т.д.

Справка по этим функциям есть в OpenSSL.

2. Для начала лучше не заморачиваться с ключами и сертификатами, а попробовать
подключиться по TLS/SSL к какому-нибудь серверу в интернете, например Google (порт 443).

openssl

Инструмент командной строки для использования криптографической библиотеки OpenSSL

openssl команда [опции_команды] [аргументы_команды]

openssl no-cmd [произвольные_опции]

OpenSSL представляет собой криптографический инструментарий, реализующий сетевые протоколы Secure Sockets Layer (уровень защищенных сокетов) (SSL v2/v3) и Transport Layer Security (безопасность на транспортном уровне) (TLS v1) и соответствующие криптографические стандарты.

Программа openssl является инструментом командной строки для использования различных криптографических функций криптографической библиотеки OpenSSL из командного интерпретатора. Возможности применения:

создание и управление секретными ключами, открытыми ключами и параметрами;

криптографические операции с открытым ключом;

создание сертификатов X.509, CSR и CRL;

вычисление профилей сообщения;

шифрование и дешифрование при помощи алгоритмов шифрования;

проверки клиента и сервера SSL/TLS;

обработка подписанной и зашифрованной протоколом S/MIME электронной почты;

создание и проверка запросов меток времени.

Программа openssl предоставляет большое разнообразие команд (см. команда в обзоре выше), каждая из которых изобилует опциями и агрументами ( опции_команды и аргументы_команды ).

Псевдокоманды list-standard-commands , list-message-digest-commands и list-cipher-commands выводят список (одна запись на строку) имен всех стандартных команд, команд профилей сообщений или команд шифрования соответственно, которые предусмотрены в текущей версии утилиты openssl .

Псевдокоманды list-cipher-algorithms and list-message-digest-algorithms выводят список всех имен алгоритмов шифрования и профилей сообщений, по одной записи на строку. Списки псевдонимов выводятся следующим образом:

Псевдокоманда list-public-key-algorithms выводит списки всех поддерживаемых алгоритмов открытого ключа.

Псевдокоманда no- команда проверяет доступность команды с указанным именем. Если команда с именем команда не существует, то утилита openssl выводит 0 (успешно) и no- команда ; в противном случае она выводит 1 и команда . В обоих случаях, вывод направляется в стандартный поток вывода stdout , а вывод в стандартный поток ошибок stderr отсутствует. Дополнительные аргументы командной строки всегда игнорируются. Поскольку для каждого алгоритма предусмотрена команда с тем же именем, существует простой способ проверки сценариями командного интерпретатора доступности алгоритмов в программе openssl . (Псевдокоманда no- команда не может обнаружить псевдокоманды, например quit , list-. -commands и саму no- команда .)

Анализ последовательности ASN.1.

Управление центром сертификации (Certificate Authority; CA).

Определение описания набора алгоритмов шифрования.

Управление списком аннулированных сертификатов (Certificate Revocation List; CRL).

Преобразование CRL в PKCS#7.

Вычисление профиля сообщения.

Управление параметрами алгоритма Диффи-Хеллмана; считается устаревшей в связи с использованием dhparam .

Управление данными DSA.

Создание и управление параметрами DSA. Заменена на genpkey и pkeyparam .

Кодирование с помощью алгоритмов шифрования.

Преобразование номера ошибки в строку ошибки.

Создание и управление параметрами алгоритма Диффи-Хеллмана. Заменена на genpkey и pkeyparam .

Создание параметров алгоритма Диффи-Хеллмана; считается устаревшей в связи с использованием dhparam .

Создание секретного ключа DSA из параметров. Заменена на genpkey и pkey .

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

Создание секретного ключа RSA. Заменена на genpkey .

Протокол онлайн-проверки статуса сертификата.

Создание хешированных паролей.

Управление данными PKCS#12.

Управление данными PKCS#7.

Управление открытыми и секретными ключами.

Утилита криптографических алгоритмов открытого ключа.

Управление параметрами алгоритма открытого ключа.

Создание псевдослучайных байтов.

Управление запросом на подпись сертификата (Certificate Signing Request; CSR) PKCS#10 X.509.

Управление ключами RSA.

Утилита RSA для подписи, проверки, шифрования и дешифрования. Заменена на pkeyutl .

Таймер соединения SSL.

Управление данными сеанса SSL.

Обработка почты S/MIME.

Измерение скорости алгоритма.

Инструмент полномочий метки времени (клиент/сервер).

Проверка сертификата X.509.

Информация о версии OpenSSL.

Управление данными сертификата X.509.

Добавить комментарий