как узнать версию openssl
Как обновить OpenSSL на Linux CentOS
Данная инструкция протестирована на CentOS 6, 7 и 8.
Посмотреть текущую версию
Узнать текущую версию openssl в Linux можно следующей командой:
Мы увидим что-то на подобие:
OpenSSL 1.0.2k-fips 26 Jan 2017
* в данном примере используется версия openssl 1.0.2k от 26 января 2017 года.
Из пакетов
Самый простой способ — воспользоваться репозиторием. Однако, в нем может находиться далеко не последняя версия.
yum install openssl
* также можно ввести yum update openssl.
Если будет найдено обновление, система предложит обновить пакет — отвечаем Y.
Если обновлений нет или будет установлена не последняя версия, выполняем установку из исходника.
Из исходника
Устанавливаем пакеты, необходимые для сборки пакета:
yum install make gcc
Переходим по ссылке https://www.openssl.org/source/ и находим в описании LTS версию openssl:
* как видим, на момент написания обновления инструкции это была версия 1.1.1.
И копируем ссылку на ее скачивание:
На CentOS скачиваем исходник с использованием найденной ссылки:
И распаковываем его с последующим удалением:
Переходим в папку с распакованным исходником:
Резервируем предыдущую версию openssl:
mv /usr/bin/openssl /root/openssl.back
И делаем ссылку на новую:
Снова проверяем версию:
Система вернет либо ошибку, например:
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
. либо полные сведения об openssl, например:
Обратите внимание, что у нас установлена новая версия OpenSSL, но по прежнему, используется старая библиотека — Library: OpenSSL 1.0.2k-fips 26 Jan 2017.
Необходимо добавить в ldconfig новый путь. Для это создаем файл:
* если у нас используется система 32-бит, то путь будет /usr/local/lib.
Одним из самых популярных инструментов для создания и управления SSL-сертификатами является библиотека OpenSSL. В этой статье я расскажу о часто используемых командах OpenSSL.
Некоторые аббревиатуры, относящиеся к сертификатам:
1. Создание нового секретного ключа и запрос на получение сертификата
2. Создание самозаверяемого сертификата
Команда генерирует самозаверенный сертификат и файл 2048-битного RSA-ключа. Я также включил в команду хеш-функцию sha256, поскольку она считается наиболее безопасной.
Совет: По умолчанию команда генерирует самозаверенный сертификат, действительный только один месяц. Для увеличения этого срока переопределите параметра — days.
Пример: для получения сертификата, действительного два года.
3. Верификация CSR-файла
Верификация необходима, чтобы отправленный в регистрационный центр CSR-файл содержал всю необходимую информацию.
4. Создание секретного RSA-ключа
Если нужно создать секретный RSA-ключ, используйте приведенную выше команду.
5. Удаление пароля-фразы из ключа
Если вы используете составной пароль (фразу) в файле ключа и работаете на Apache, то при каждом запуске нужно вводить секретную фразу. Если вас это раздражает, то можно использовать приведенную выше команду, чтобы удалить пароль-фразу из существующего ключа.
6. Верификация секретного ключа
Если вы сомневаетесь в файле ключа, то можете использовать данную команду.
7. Верификация файла сертификата
Если хотите проверить данные сертификата, такие как CN, OU и т.д., используйте приведенную выше команду, которая предоставит данные сертификата.
8. Верификация центра сертификации
Для проверки центра сертификации можно использовать приведенную выше команду.
9. Проверка хеш-значения сертификата
10. Преобразование формата DER в PEM
11. Преобразование формата PEM в DER
12. Преобразование сертификата и секретного ключа в формат PKCS#12
Если необходимо использовать сертификат с Java-приложением, принимающим только формат PKCS#12, примените приведенную выше команду. Она генерирует один pfx файл, содержащий сертификат и ключ.
13. Создание CSR с использованием существующего секретного ключа
Если не хотите создавать новый секретный ключ вместо существующего, выполните приведенную выше команду.
14. Проверка содержимого сертификата в формате PKCS12
PKCS12 является двоичным форматом, поэтому вы не сможете просмотреть его содержимое в текстовом редакторе. Для просмотра файла в формате PKCS12 используйте приведенную выше команду.
15. Преобразование формата PKCS12 в PEM-сертификат
16. Проверка SSL-сертификата определенного URL-адреса
Я часто использую эту команду для проверки SSL-сертификата URL-адреса. Это удобно для проверки данных протокола, шифрования и сертификата.
17. Определение версии OpenSSL
18. Проверка даты истечения срока действия PEM-файла
Команда выведет дату в формате notBefore и notAfter. notAfter — это та дата, которая нужна, чтобы определить, истек ли срок действия сертификата или он еще действителен.
19. Проверка срока действия SSL-сертификата для URL-адреса
Команда позволяет контролировать дату истечения срока действия SSL- сертификата удаленно или для конкретного URL-адреса.
20. Проверка, принимается ли на URL-адресеSSL V2 или V
Чтобы проверить SSL V2:
Чтобы проверить SSL V3:
Чтобы проверить TLS 1.0:
Чтобы проверить TLS 1.1:
Чтобы проверить TLS 1.2:
Если необходимо проверить, включен ли SSL V2 / V3 или нет, используйте приведенную выше команду. Если он включен, то вы получите сообщение «CONNECTED», в противном случае –сообщение «handshake failure».
21. Проверка того, принимается ли конкретный шифр на URL-адресе
Если хотите знать, принимаются ли некоторые слабые шифры, то можете использовать приведенную выше команду.
Для этого необходимо задать шифр и URL-адрес. Если шифр будет принят, вы получите сообщение «CONNECTED», иначе – сообщение «handshake failure».
Надеюсь, что приведенные выше команды помогли вам узнать больше об использовании OpenSSL для управления SSL-сертификатами.
Дайте знать, что вы думаете по данной теме материала в комментариях. За комментарии, отклики, подписки, лайки, дизлайки огромное вам спасибо!
Heartbleed: как надежно и портативно проверить версию OpenSSL?
Я смотрел надежный и портативный способ проверить версию OpenSSL на GNU /Linux и других системах, поэтому пользователи могут легко обнаружить, должны ли они обновлять SSL из-за ошибки Heartbleed.
Я думал, что это будет легко, но я быстро столкнулся с проблемой на Ubuntu 12.04 LTS с последним OpenSSL 1.0.1g:
Я ожидал увидеть полную версию, но вместо этого получил следующее:
К моему неприятному удивлению, письмо версии не показано. Нет, нет, нет, просто «1.0.1», и все. Указанные даты также не помогают обнаружить (не) уязвимую версию.
Отличие между 1.0.1 (a-f) и 1.0.1g имеет решающее значение.
Другие также сообщают об этом. Несколько примеров:
Некоторые (специфические для дистрибутива) предложения, вкатывающиеся в:
Проверка наличия еще старой версии OpenSSL:
8 ответов
В зависимости от даты, отображаемой вашей версией OpenSSL, кажется, что вы видите полную версию, отображаемую там.
Ubuntu не является единственным основным дистрибутивом в привычке к обратному обновлению в OpenSSL (или других пакетах), чем полагаться на обновленные обновления и нумерацию версий, которые все распознают. В случае OpenSSL, где номера версий букв представляют собой только исправления ошибок и обновления безопасности, это кажется почти непонятным, но мне сообщили, что это может быть из-за FIPS-валидированный плагин для крупных дистрибутивов Linux, упакованных в OpenSSL. Из-за требований, связанных с повторной проверкой, которые вызывают из-за каких-либо изменений, даже изменения, которые подключают дыры в безопасности, заблокированы версией.
Если вы хотите что-то по-настоящему кросс-платформенное, проверить на наличие самой уязвимости, а не полагаться на номера версий.
Многие поставщики, которые объединяют продукты с открытым исходным кодом, такие как OpenSSL и OpenSSH, будут выборочно модифицировать срочные исправления для более старой версии кода, чтобы поддерживать стабильность и предсказуемость API. Это особенно справедливо для «долгосрочных выпусков» и платформ устройств.
Но поставщики, которые делают это молча (без добавления собственного суффикса строки версии), запускают риск запуска ложных срабатываний в сканерах уязвимостей (и запутывают пользователей). Чтобы сделать это прозрачным и поддающимся проверке, некоторые поставщики присоединяют свои собственные строки к основной версии пакета. И Debian (OpenSSL), и FreeBSD (в OpenSSH, через директиву VersionAddendum sshd_config) иногда делают это.
Поставщики, которые этого не делают, вероятно, делают это, чтобы свести к минимуму вероятность поломки из-за множества прямых и косвенных способов, которые другие программы проверяют номерами версий.
Таким образом, это может выглядеть так:
С такими вещами в игре вам лучше, если вы не доверяете номер версии.
Только для Ubuntu 12.04 вы можете узнать, были ли вы обновлены, если все из приведенных ниже истинны:
Спасибо @danny за дополнительную информацию.
например. на Gentoo до появления
приведенная выше команда приводит к
%20%D0%A1%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D1%83%D0%B5%D1%82%20 metasploit скрипт, доступный для использования.
После подключения типа B и вы увидите на уязвимом узле, и вы не будете отключены:
Вы получите ответ сердечного ритма, похожий на этот.
На исправленном хосте вы увидите ответ, подобный ниже, и вы будете отключены:
OpenSSL
Материал из Xgu.ru
OpenSSL — универсальный криптографический инструмент, построенный вокруг протоколов SSL/TLS и сертификатов X.509.
Помимо того, что этот инструмент позволяет работать с соединениями SSL/TLS, сертификатами X.509, он может делать множество других полезных вещей: шифровать и расшифровывать файлы, создавать и проверять цифровые подписи, проверять числа на простоту, тестировать производительность компьютера и другое.
Содержание
Вопросы и ответы
Введение
Как определить какую версию OpenSSL я использую?
Использовать опцию version:
Расширенная информация с опцией -a:
Как получить список доступных команд?
Вызвать с неправильным ключом (например, help или -h).
Аналогично с подкомандами:
Как посмотреть список доступных шифров?
Использовать команду ciphers:
Измерение производительности
Как измерить производительность системы с помощью openssl?
Пример для 2.16GHz Intel Core 2.
Каждый тест можно вызывать отдельно:
Как измерить производительность сетевого соединения?
Помимо этого простейшего измерения у подкоманды s_time есть множество других возможностей:
Сэмулировать web-сервер с помощью openssl s_server:
Сертификаты
Как сгенерировать самоподписной сертификат?
Создать файл mycert.pem, в котором будет и секретный ключ и открытый сертификат, основанный на нём. Сертификат будет действителен в течение 365 дней; ключ (благодаря опции -nodes) будет нешифрованным.
После вызова команды надо будет ответить на несколько вопросов: Country Name, State, City и так далее. На вопрос “Common Name” нужно отвечать именем сервера, по которому будут обращаться люди.
Можно автоматизировать ввод ответов с помощью опции -subj.
Как сгенерировать запрос сертификата у VeriSign?
Секретный ключ в файле mykey.pem и запрос на сертификат myreq.pem:
Если ключ уже есть, и его надо использовать только для генерации сертификата, используется команда попроще:
Или, с информацией для сертификата прямо в командной строке:
Не допускайте ошибок в названиях! Каждый символ важен.
Файл с ключом нужно сохранить в надёжном месте.
Как проверить новый сертификат?
Подкоманда s_server предоставляет простой, но эффективный метод тестирования. В примерах ниже предполагается, что ключ и сертификат хранятся в файле mycert.pem.
Запустите тестовый сервер на машине, на которой будет использоваться сертификат. По умолчанию, открывается порт 4433; другой порт можно задать опцией -accept.
Если команда запустилась без ошибок, открывайте в браузере страницу: https://127.0.0.1:4433/
Как получить удалённый сертификат?
С помощью openssl и sed:
Можно вернуть данные openssl, например, для того чтобы выяснить, для каких дат он действителен:
Как извлечь какую-либо информацию из сертификата?
В SSL-сертификате есть много информации, в частности:
Опция текст даёт весь объём информации:
Другие опции дают другую информацию:
Извлечение открытого ключа, который требуется для проверки цифровой подписи (дайджеста):
Как экспортировать или импортировать сертификат PKCS#12?
Превратить pfx в pem:
Проверка сертификата
Приложения, слинкованные с библиотеками OpenSSL, могут проверять подлинность сертификатов, выданных сервером сертификатов (certificate authority, CA).
Как проверить сертификат?
Использовать подкоманду verify:
Если в сертификате всё в норме, то будет выдано сообщение OK:
Если чего-то не хватает, появятся соответствующие сообщения об ошибках, например:
Какие центры сертификации распознаёт OpenSSL?
По умолчанию, этот каталог находится в /usr/local/ssl, но большинство сборщиков размещает его в других местах, таких как /etc/pki/tls (Red Hat/Fedora), /etc/ssl (Gentoo), /usr/lib/ssl (Debian) или /System/Library/OpenSSL (Macintosh OS X).
Посмотреть, какой именно каталог используется в конкретной инсталляции, можно с помощью опции version(параметр OPENSSLDIR):
Внутри данного каталога есть подкаталог certs/, в котором находятся файлы трёх разных типов:
Например, ссылка f73e89fd.0 указывает на файл vsignss.pem. Значит, сертификат соответствует хэшу, который равен имени ссылки:
Когда приложение получает удалённый сертификат, оно сначала проверяет, есть ли этот сертификат в cert.pem и, если нет, смотрит в файле, соответствующем хэшу сертификата. Если такой файл найден, сертификат считается верным.
Нужно иметь в виду, что некоторые приложения, такие как Sendmail, например, позволяют во время исполнения указывать местоположение сертификатов, а некоторые, например Pine, нет.
Как мне заставить OpenSSL признавать сертификат?
Сертификат, которому нужно доверять, должен быть размещён в каталоге certs/. После этого необходимо создать хэшированную символическую ссылку на него. Вот небольшой скрипт, который делает это:
Клиенты и серверы для командной строки
Подкоманды s_client и s_server предоставляют возможность для запуска SSL-клиентов для командной строки.
Как подключиться к безопасному SMTP-серверу?
С помощью подкоманды s_client можно проверить или даже использовать SMTP-сервер с поддержкой SSL.
Безопасные SMTP-серверы могут предлагать безопасные соединения на портах: 25 (TLS), 465 (SSL) и 587 (TLS). Где-то в районе релиза 0.9.7 у openssl появилась возможность использовать STARTTLS в ходе общения с SMTP-серверами.
Чтобы использовать для обозначения конца строки именно CRLF, а не CR или LF, используется опция -crlf. Это важно особенно для Qmail.
Как подключиться к [какому-либо] безопасному серверу?
На момент написания openssl поддерживал TLS из командной строки только с SMTP, поэтому для других протоколов нужно использовать прямые SSL-соединения.
Как запустить SSL-сервер из командной строки?
Подкоманда s_server позволяет запустить сервер с поддержкой SSL прямо из командной строки; сервер предназначен только для проверки и отладки. Для полноценной работы рекомендуется использовать stunnel.
Подкоманда s_server работает намного лучше, если есть сертификат; когда его нет, её возможности сильно сокращаются.
Дайджесты
Создание дайджестов (криптографических контрольных сумм) с помощью подкоманды dgst — одна из наиболее распространённых задач, выполняемых с помощью openssl.
Как создавать дайджесты MD5 или SHA1?
Дайджесты создаются с помощью подкоманды dgst:
Дайджест MD5 эквивалентен дайджесту, создаваемому известной утилитой md5sum, хотя выводится в другом формате:
То же верно и для дайджестов SHA1 и программы sha1sum:
Как подписать дайджест?
Для того, чтобы быть уверенным, что дайджест никто не изменял, его можно подписать с помощью своего закрытого ключа.
Подписать дайджест SHA1 для файла foo-1.23.tar.gz:
Как проверить подписанный дайджест?
Для того чтобы проверить правильность дайджеста, нужен файл, на основе которого был получен дайджест, сам подписанный дайджест и открытый ключ того, кто подписывал дайджест:
Как создать запись типа digest для файла паролей Apache?
У web-сервера Apache есть специальный формат файла с паролями, использующийся для выполнения digest-аутентификации. В комплект с web-сервером входит утилита htdigest, но она умеет записывать данные только в файл, а не на стандартный поток вывода. При работе с удалёнными пользователями может быть целесообразным им сначала сгенерировать хэш, а потом переправить его по почте или другому каналу информации для включения в базу.
Формат базы паролей прост: список нескольких полей, разделённых двоеточиями. Поля:
Скрипт, представленный ниже, повторяет действие htdigest с той разницей, что выводит данные на стандартный поток вывода. Кроме того, он умеет считывать данные со стандартного потока ввода.
Какие ещё есть дайджесты?
Подкоманда list-message-digest-commands даёт список типов дайджестов, доступных в данной инсталляции.
Шифрование/расшифровка
Как закодировать что-то по методу base64?
Использовать опцию -base64.
Закодировать одну строку:
Без перевода строки (важно для паролей):
Опция -d выполняет обратный процесс (то есть, раскодирование):
Как зашифровать файл?
Простое шифрование файлов, вероятно, лучше делать инструментами типа GPG. Тем не менее, иногда может возникнуть необходимость зашифровать файл без развёртывания инфраструктуры ключей и сертификатов, а пользуясь одним только паролем. Второе, что нужно будет запомнить — это шифр, с помощью которого выполнялось шифрование.
Список поддерживаемых шифров есть на странице enc(1). Более просто (и более точно) узнать этот список у самой программы openssl.
Кроме выбора шифра нужно также решить, будут ли данные закодированы в base64. Если будут, то их можно будет, грубо говоря, вставить в почтовое сообщение, прямо в текст. В противном случае это будет простой бинарный файл.
Расшифровка файла на стороне получателя:
Можно не вводить парольную фразу постоянно при шифровании и расшифровке, а передавать её автоматически (подробнее: openssl(1); раздел «PASS PHRASE ARGUMENTS»). Формат аргумента прост:
Ошибки
Как интерпретировать сообщения об ошибках SSL?
В системных журналах обнаружились строки, которые, похоже, имеют отношение к OpenSSL или crypto:
В первом приближении определить, что не так, можно с помощью подкоманды errstr, которая умеет интерпретировать код ошибки. Код ошибки находится между «error:» и «:lib». В данном случае это 0407006A.
Дальше информацию надо искать в документации. В данном случае в man-странице RSA_padding_add_PKCS1_type_1(3) будет написано, что PKCS #1 использует для подписей блочные методы.
Ключи
Как сгенерировать ключ RSA?
Использовать подкоманду genrsa:
Как сгенерировать открытый ключ RSA?
С помощью подкоманды rsa можно создать открытую версию для закрытого ключа RSA:
Как сгенерировать ключ DSA?
Для построения ключей DSA нужен специальный файл параметров (parameter file), кроме того, операции с DSA медленнее чем аналогичные операции с RSA, в связи с этим, DSA используется не так часто, как RSA.
Если нужно сгенерировать только один ключ DSA, то это можно сделать одной командой, с помощью подкоманды dsaparam:
Если же нужно создавать несколько ключей DSA, перед тем как их генерировать, можно сделать общий файл параметров. Файл параметров генерируется сравнительно медленно, а файлы ключей очень быстро.
Как создать ключ, основанный на эллиптических кривых (elliptic curve key)?
Процедуры для работы с эллиптическими кривыми были добавлены в openssl, начиная с версии 0.9.8. Работа с этими процедурами выполняется через подкоманду ecparam.
Как создать открытый EC ключ?
С помощью подкоманды ec можно создать открытую версию для закрытого ключа EC (elliptic curve):
Как удалить парольную фразу у ключа?
Каждый раз, когда запускается демон, использующий ключ, надо будет набирать парольную фразу. Её можно убрать.
Допустим, ключ, зашифрованный парольной фразой, находится в файле key.pem; после выполнения команды расшифрованный ключ будет в newkey.pem:
Если закрытый ключ (private key) и открытый сертификат хранятся в одном файле, нужно будет выполнить две команды:
Хэши для паролей
С помощью подкоманды passwd можно генерировать хэши паролей, которые совместимы со стандартными хэшами из /etc/passwd, /etc/shadow или файла паролей Apache.
Как сгенерировать хэш в стиле crypt?
Сгенерировать хэш очень просто:
Если salt для пароля известен, можно воссоздать хэш.
Как сгенерировать хэш пароля в стиле shadow?
Простые числа
Поскольку openssl активно использует механизмы для работы с простыми числами, не удивительно, что в нём есть соответствующие процедуры. Начиная с версии 0.9.7e (или где-то так), в openssl появилась подкоманда binary.
Как проверить, является ли число простым?
Передать число как аргумент к подкоманде prime. Результат будет не в десятичном, а в шестнадцатеричном виде.
Можно проверять и шестнадцатеричные числа:
Как сгенерировать набор простых чисел?
Сгенерировать множество чисел и оставить только простые среди них. Для генерирования последовательностей удобно использовать seq.
Случайные данные
Как генерировать случайные данные?
Используйте подкоманду rand.
На UNIX/Linux-системах, в которых есть файл /dev/urandom, похожего эффекта можно добиться иначе, и иногда с лучшим результатом даже:
Между устройствами random и urandom есть разница. Дополнительная информация в random(4) для Linux и BSD или random(7D) для Solaris.
S/MIME
S/MIME — стандарт для получения и отправки безопасных MIME-данных, в особенности, почтовых сообщений. Большинство почтовых клиентов умеет работать с такими сообщениями сами, но для этого же можно использовать и openssl smime.
Много хороших примеров есть в smime(1).
Как проверить подписанное сообщение S/MIME?
Проверить, сохранённое в файле msg.txt подписанное сообщение:
Если сертификат отправителя подписан сервером сертификатов, которому доверяет инсталляция OpenSSL, будут показаны заголовки сообщения, копия сообщения и заключительная строка «Verification successful».
Если сообщение было изменено, в выводе будет содержаться сообщение о том, что подпись или дайджест (контрольная сумма) не соответствуют действительности:
Если сертификат не опознан, возникнет похожая ошибка:
Если нужно вытащить сертификат автора письма, для того, чтобы использовать его в дальнейшем, то нужна только первая часть команды:
Дальше этот сертификат можно или интегрировать в инфраструктуру OpenSSL, или сохранить его для будущего использования, например, такого:
Как зашифровать сообщение S/MIME?
Допустим, кто-то прислал вам свой сертификат, которым попросил шифровать сообщения ему. Сертификат сохранён в her-cert.pem. Ответ сохранен в файле my-message.txt.
Для того чтобы получить шифрование по умолчанию RC2-40 (оно, правда, слабое), нужно только сказать ‘openssl, где находится сертификат:
Если есть уверенность, что на удалённой стороне есть современная поддержка SSL, можно использовать алгоритм шифрования посильнее чем DES:
По умолчанию, зашифрованные сообщения, включая почтовые заголовки, отправляются на стандартный поток вывода. С помощью опции -out их можно отправить в файл. Если постараться, то передать сообщение можно и сразу программе sendmail.
Как подписать сообщение S/MIME?
Подписать (но не шифровать) сообщение своим собственным сертификатом, так чтобы получатель имел возможность убедиться, кто является истинным автором.