Меню Рубрики

Установка openssl ubuntu из исходников

Information Security Squad

✗ Как установить OpenSSL из исходников в CentOS и Ubuntu ✗

OpenSSL описание

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

Это универсальная библиотека криптографии и поддерживает ряд различных криптографических алгоритмов, включая AES, Blowfish; MD5, MD4, SHA-1, SHA-2 криптографические хэш-функции; RSA, DSA, обмен ключами Диффи-Хеллмана, эллиптическая кривая и многие другие.

В этой статье мы расскажем, как установить последнюю стабильную версию OpenSSL из исходников на основе CentOS и Ubuntu.

Шаг 1: Установите средства разработки

1. Чтобы скомпилировать OpenSSL вручную из исходников, вам нужно сначала установить несколько зависимостей, таких как «Средства разработки» в RHEL / CentOS / Fedora или «build-essential» в Debian / Ubuntu, как показано ниже:

Шаг 2: Соберите OpenSSL из исходников

2. Затем загрузите последнюю стабильную версию OpenSSL (v1.0.2 на момент написания, которой является версией Long Term Support (LTS), поддерживаемой до 31 декабря 2019 года), со страницы загрузки, используя следующую команду wget и распакуйте ее используя команду tar.

3. Теперь перейдите в извлеченный каталог протестируйте библиотеки и установите OpenSSL в папке по умолчанию, которая является /usr/local/ssl, выполнив следующие команды:

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

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

  • bin — содержит бинарники openssl и некоторые служебные скрипты.
  • include/openssl — содержит файлы заголовков, необходимые для создания собственных программ, которые используют libcrypto или libssl.
  • lib — содержит файлы библиотеки OpenSSL.
  • lib/engines — содержит динамически загружаемые движки OpenSSL.
  • man — содержит man-страницы OpenSSL.
  • share /doc/openssl/html — содержит HTML-версии man-страниц.
  • certs — путь по умолчанию для файлов сертификатов.
  • private — путь по умолчанию для файлов секретных ключей.

5. Чтобы проверить версию OpenSSL, которую вы только что установили, выполните следующую команду:

6. Чтобы использовать недавно установленную версию OpenSSL в вашей системе, вам необходимо добавить каталог /usr/local/ssl/bin/ в ваш PATH в файле

/ .bashrc (или эквивалент для вашей оболочки).

Добавьте эту строку в конец файла.

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

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

источник

Nginx + OpenSSL 1.0.2h = ALPN. Включаем поддержку ALPN на Ubuntu 14.04

Итак, вкратце опишу суть проблемы: если вы используете HTTP/2 на базе Nginx и Ubuntu 14.x-, то с 31 мая HTTP/2 в Chrome работать перестанет. Но решить проблему достаточно просто.

Для использования HTTP/2 протокола требуется поддержка способа переключения с обычного TLS на него. Поддержка эта реализуется со стороны браузера и сервера. Сейчас таких способов 2: NPN (Next Protocol Negotiation) и ALPN (Application-Layer Protocol Negotiation). Первый устарел и заменён вторым. Но для использования ALPN нужен OpenSSL довольно свежей версии (1.0.2+), более старые поддерживают только NPN.
Теперь вернёмся к нашей Ubuntu 14.x: версия OpenSSL сейчас такая:

Обновления до 1.0.2 ждать не приходится, только при обновлении дистрибутива (например, до 16.04).
Но это версия в системе, нас же интересует только Nginx, вот что говорит свежий mainline пакет для Ubuntu:

Невооружённым взглядом можно заметить ту же версию OpenSSL 1.0.1f. Значит, ALPN у нас работать не будет.
В это время, команда Google уже объявила дату окончательного выпиливания поддержки NPN из кода Chromium: 31 мая. Кстати, SPDY также перестанет работать.

Решение

Чтобы не потерять поддержку HTTP/2, стоит уже сейчас позаботиться о поддержке ALPN. Конечно, можно резко перейти на Ubuntu 16.04, но думаю, что это не всем подходит.
Рецепт решения довольно прямой и понятный: нужно собрать Nginx на базе свежего OpenSSL.
Переходим к делу:

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

1. Качаем исходники Nginx и OpenSSL (версии указаны на момент написания статьи):

3. Устанавливаем пакеты для успешной сборки Nginx:

4. Конфигурируем Nginx. Для этого копируем часть вывода команды nginx -V c добавлением папки с исходниками OpenSSL (—with-openssl=/home/db/openssl-1.0.2h). У меня получилось следующее (я убрал GeoIP модуль):

Читайте также:  Установка распредвалов audi alt

Если в процессе конфига возникают ошибки, скорее всего не найдены какие-либо зависимости. Обычно это лечится установкой пакетов вида: libXYZ-dev.

5. Собираем Nginx (в папке исходников):

6. Далее можно сделать просто make install, но мы соберём модуль. Это будет более удобно и аккуратно (можно обновлять, удалять и т.д.) Для этого:

В процессе сборки модуля нужно будет внести описание модуля, можно оставить что-то вроде Nginx + OpenSSL 1.0.2. После этого пакет должен установиться. Также его можно переносить между похожими системами и устанавливать уже как обычно:

7. Проверить поддержку APLN можно здесь или в командной строке (на системе должна быть версия 1.0.2+)

источник

linux-notes.org

При работе с 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.

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

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

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

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

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

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

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

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

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

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

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

источник

Защищенное TLS-соединение с использованием Boost.Asio и OpenSSL под Windows

Введение

Однажды мне потребовалось создать защищенный канал связи между своим сервером и своим приложением. Я помнил, что в документации к Boost Asio упоминалось, что он может работать с защищенными соединениями, используя OpenSSL. Я начал искать информацию по этой теме, но, увы, мало что нашел, тем более под Windows. Так что теперь, разобравшись с этим вопросом, я решил написать эту инструкцию, чтобы другим людям было проще разобраться.

Задача — нужно собрать под Windows сервер и клиент, используя Boost Asio и OpenSSL, чтобы клиент и сервер обменивались информацией по защищенному TLS-каналу. Для пример, я решил взять вот этот клиент и сервер с официального сайта Boost.

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

Установка OpenSSL под Windows

Я взял OpenSSL из официального репозитория: github.com/openssl/openssl

Для установки OpenSSL нам понадобятся:

  • NASM, чтобы компилировать исходники на ассемблере, я взял отсюда: www.nasm.us Также нужно добавить путь к nasm.exe в переменную среды PATH.
  • Active Perl, чтобы запускать скрипты конфигурирования, я взял отсюда: www.activestate.com/activeperl И путь к perl.exe также нужно добавить в переменную среды PATH.

Для сборки OpenSSL я использовал MS Visual Studio 2013, и я собирал статическую библиотеку.

Последовательность сборки следующая:
Сначала нужно сконфигурировать OpenSSL с помощью скрипта на Perl, под Win32. Ниже по тексту я буду считать, что OpenSSL у вас находится в C:\Work\OpenSSL. Вам следует зайти в этот каталог и вызвать скрипт конфигурации:

Обратите внимание вот на что:

  • Здесь явно задан параметр —prefix и указан путь, где будет лежать результат сборки. OpenSSL будет лежать в отдельном подкаталоге \output и не будет смешиваться с исходными файлами.
  • Здесь же задан параметр enable-deprecated — это означает, что в сборку будут включен deprecated-код. Я пробовал собрать без этого параметра, и Boost Asio жаловался на отсутствие функций CRYPTO_set_id_callback из openssl\crypto.h и DH_free из openssl\dh.h и поэтому я решил собрать с параметром enable-deprecated.
  • По непонятным мне причинам, конфигуратор не добавляет исходную директорию C:\Work\OpenSSL в список директорий для поиска *.h файлов, поэтому я добавил -I$(SRC_D), чтобы заставить компилятор искать там заголовочные файлы. Вместо этого вы можете добавить -IC:\Work\OpenSSL. Другой вариант — после того, как вы вызовете ms\do_nasm, просто отредактируйте вручную файл ms\nt.mak и впишите туда путь к исходникам.

Дальше нужно подготовить ассемблерные исходники для сборки. Нужно из той же директории вызвать скрипт сборки:

На этом нужно закрыть обычную командную строку, и запустить командную строку MS Visual Studio, в которой определены дополнительные пути к файлам и дополнительные переменные окружения. Вы можете найти командную строку MS Visual Studio в каталоге C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts.

Читайте также:  Установка pygame для python

Из командной строки MS Visual Studio нужно перейти в каталог C:\Work\OpenSSL и запустить сборку с помощью nmake:

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

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

  • Убедитесь, что вы добавили путь к nasm.exe в переменную среды PATH
  • Убедитесь, что вы запускаете сборку из каталога C:\Work\OpenSSL
  • Убедитесь, что вы запускаете сборку не из обычной командной строки, а из командной строки MS Visual Studio.

В процессе сборки возможна еще одна проблема. Компилятор будет жаловаться на то, что ему не удалось найти файл tmp32/x86cpuid.obj или другие файлы, которые должны быть собраны из исходников *.asm. В моем случае проблема решилась после того, как я добавил путь к nasm в переменную окружения PATH. Другой вариант решения — можно просто вручную скомпилировать nasm-ом все ассемблерные файлы, их там всего 22.

После того, как сборка завершилась, нужно скопировать библиотеки и исходные файлы в новый каталог:

На этом сборка OpenSSL под Windows завершена.

Сборка клиента и сервера

Как я и сказал раньше, для примера я решил взять вот эти клиент и сервер из документации по Boost Asio. Однако при попытке сборки я столкнулся с некоторыми проблемами, и в результате мне пришлось модифицировать исходники.

Итак:

  • 27 января 2015 года в OpenSSL внесли очень большой и важный коммит, который вынес много разных структур, объявлений и функций из главного заголовка ssl.h в внутренний заголовок ssl_locl.h. Эти все структуры используются в Boost Asio, поэтому нужно подключить этот файл ssl_locl.h.
  • Заголовок ssl_locl.h также ссылается на заголовок packet_locl.h, а в нем на 411 строчке происходит неявное преобразование из void* в unsigned char*:

Хотя это место и объявлено как extern «C», и с точки зрения С тут нет никаких ошибок, но Visual Studio не дает нам никакой возможности отключить эту ошибку. Мне пришлось вносить изменения и преобразовывать тип явно:

Изначально в ssl.h была объявлена константа SSL_R_SHORT_READ, но потом ее зачем-то убрали. Эта константа используется в Boost Asio, и ее можно просто объявить перед подключением заголовка.

  • Нужно не забыть добавить директивы препроцессора _WIN32_WINNT=0x0501 — для Boost, OPENSSL_NO_SSL2 — чтобы отключить устаревшую версию SSL и OPENSSL_USE_DEPRECATED, поскольку мы конфигурировали OpenSSL с ключом enable-deprecated.
  • И, наконец, нужно добавить в пути поиска заголовочных файлов каталоги D:\Work\OpenSSL и D:\Work\OpenSSL\output\include
  • После всех вышеупомянутых манипуляций, мне удалось собрать и запустить проект с Boost Asio и OpenSSL под Windows с использованием Visual Studio 2013.

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

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

    После сборки в каталоге C:\Work\OpenSSL\output\bin будет лежать openssl.exe, нужно воспользоваться им, чтобы сгенерировать ключи и сертификаты.

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

    Потом на основе этого ключа создаем корневой сертификат, действующий 20000 дней:

    В интерактивном меню вас попросят ввести двухбуквенный код страны, провинцию, город, организацию, подразделение, Common Name и e-mail адрес. Нужно заполнить все поля на свое усмотрение.

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

    Создаем запрос на подпись:

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

    Теперь подписываем этот запрос корневым сертификатом:

    На всякий случай можно проверить, что подписано все правильно:

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

    Вторая команда должна вернуть ОК, потому что user.crt подписан корневым сертификатом.

    Последняя команда должна вернуть ошибку, потому что user.crt не является самоподписанным. Если последняя команда возвращает OK, значит что-то пошло не так. В моем случае для исправления нужно было всего лишь сделать Common Name у обоих сертификатов различающимся.

    И напоследок, нам еще понадобится DH-параметры, которые нужны для Протокола Диффи — Хеллмана, нужно их сгенерировать. Генерация займет некоторое время:

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

    источник

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