Меню Рубрики

Установка openssl visual studio

Использование библиотеки OpenSSL в проектах на C++

В своем первом топике я постараюсь подробно объяснить как начать использовать библиотеку OpenSSL. Сразу хочу отметить, что статья ориентирована на новичков, а так как я сам один из них, исходный код выполнен без проверок и не претендует на звание лучшего. Все действия выполнялись под Windows со средой разработки Visual Studio 2013.

Шаг 1. Установка необходимых компонентов и компиляция библиотеки

Для того, чтобы подружить библиотеку OpenSSL с Visual Studio нам потребуется:

  • Архив с исходниками для компиляции библиотеки версии 1.0.1 (Скачать с оф. сайта)
  • Perl для конфигурирования библиотеки (Скачать с оф. сайта)
  • Среда разработки Visual Studio, а именно ее утилита «Командная строка разработчика»

После загрузки файлов устанавливаем Perl, распаковываем архив openssl-1.0.1a.tar.gz и его содержимое копируем в папку C:\openssl. Затем открываем командную строку Perl (command line) от имени администратора и пишем следующие команды:

Обратите внимание, что после выполнения второй команды последней строчкой в консоле должно быть Configured for VC-WIN32. Конфигурирование завершено, теперь приступим к компиляции. Находим в пуске в каталоге Visual Studio «Командная строка разработчика», запускаем от имени администратора и вводим команды:

На этом компиляция закончена. В папке C:\Temp\openssl\bin появились две библиотеки ssleay32.dll и libeay32.dll, а в папке C:\Temp\openssl\lib появились ssleay32.lib и libeay32.lib.

Шаг 2. Подключение библиотек и исправление ошибок в среде разработки

Для использования функций библиотеки нам потребуется подключить к проекту заголовочные файлы, но сначала их надо поместить в папку, где установлена Visual Studio. Для этого переходим в каталог ..\Visual Studio\VC\include и копируем туда папку C:\Temp\openssl\include\openssl.

Теперь можно смело подключать заголовочные файлы (на примере rsa):

Также необходимо добавить в проект файлы с расширением .lib, которые мы получили ранее. Для этого откроем Обозреватель решений в Visual Studio, в дереве нашего проекта найдем папку Файлы ресурсов, щелкнем по ней правой клавишей -> Добавить -> Существующий элемент и выберем наши .lib файлы, находящиеся в C:\Temp\openssl\lib.

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

Это лечится путем разрешения загрузки символов с серверов Microsoft. Переходим во вкладку Сервис -> Параметры, слева в дереве выбираем Отладка -> Символы, ставим галку напротив «Серверы символов Microsoft» и нажимаем ОК. Теперь при следующей компиляции проекта недостающие файлы загрузятся автоматически.


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

Шаг 3. Описание некоторых функций библиотеки и пример кода

Все необходимые компоненты, включая скомпилированный пример можно скачать с Яндекс.Диска.

источник

Защищенное 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 и впишите туда путь к исходникам.
Читайте также:  Установка прав active directory

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

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

Из командной строки 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-параметры, которые нужны для Протокола Диффи — Хеллмана, нужно их сгенерировать. Генерация займет некоторое время:

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

    источник

    How to include OpenSSL in Visual Studio

    I am having a hard time trying to add openssl to my project. I have downloaded the precompiled installer for windows, and I have the libraries installed, but I can’t find a way to include openssl in my project.

    Читайте также:  Установка круиза контроля на фордах мондео

    Note: I am using Visual Studio Expres 2012 on Windows 7 x64, but it’s not restricted to that environment.

    2 Answers 2

    Let’s assume you have installed OpenSSL in a folder like: «C:\Program Files\Openssl-Win32-1.0.1p. « (or whatever other name); I am going to refer to that as OPENSSL_INSTALL_DIR (as it was an env var). So %OPENSSL_INSTALL_DIR% should contain a bunch of dirs (folders) and files, out of which matter for us:

    • libeay32.dll
    • ssleay32.dll (might be also copied (or symlinked) to libssl32.dll)

    In order to make use of it, in your VStudio project you have to:

    Where to search for include (header (.h)) files. Go to your «Project Properties -> C/C++ -> General -> Additional Include Directories» and adding %OPENSSL_INSTALL_DIR%\include (if you need to add other paths, separate them by a semicolon (;)). Now you can include in your source code openssl header files.
    Note that because «%OPENSSL_INSTALL_DIR%\include» dir contains an openssl subdir and under that subdir are the actual header files, your #include clauses would have to look like this:

    Of course you could add «%OPENSSL_INSTALL_DIR%\include\openssl» dir to your project and then the above include statement would be:

    but the first form is the preferred one

    Configure the linker ([MS.Docs]: Linker Options)
    Instruct it:

    Where to search for libraries. You can do that by going to your «Project Properties -> Linker -> General -> Additional Library Directories» and adding %OPENSSL_INSTALL_DIR%\lib (again, if there are multiple paths, separate them by ;)

    What libraries to use. «%OPENSSL_INSTALL_DIR%\lib» dir contains a bunch of .lib files. Out of those, you will (most likely) only need libeay32.lib and / or ssleay32.lib. Go to your «Project Properties -> Linker -> Input -> Additional Dependencies» and add those 2 libraries next to the existing ones

    Now, if all your settings and source code are correct, you should have a buildable project. When you’ll want to run your project output (either an .exe or a .dll needed by another executable, I am not discussing here the possibility of you are using the static libs), the executable will need to find the 2 .dlls that I mentioned at the beginning. For that, you should either:

    • Copy them in the folder where your executable is located ([MS.Docs]: Dynamic-Link Library Search Order)
    • Copy them in one of the folders from your %PATH% env var
    • Add %OPENSSL_INSTALL_DIR% to your %PATH% variable; although if I remember correctly the installer also copies them in your «%SystemRoot%\System32» dir and in that case you won’t have to do this step, but that’s just a heads up

    Important note: Must be careful when targeting your project for 32 or 64 bit (setting Platform to Win32 or x64 in VStudio IDE); that has to match your OpenSSL installation architecture.

    источник

    Это видео недоступно.

    Очередь просмотра

    Очередь

    YouTube Premium

    How to Build OpenSSL on Windows with Visual Studio, Visual C++, ActiveState PERL

    Хотите сохраните это видео?

    Пожаловаться на видео?

    Выполните вход, чтобы сообщить о неприемлемом контенте.

    Понравилось видео?

    Не понравилось?

    Текст видео

    How to build #OpenSSL on Windows Using Visual Studio

    Download Precompiled Binary: OpenSSL 1.1.1 for Visual Studio 2015 (dll, static, x82, x64): https://goo.gl/H8sNKj OpenSSL 1.1.1 for Visual Studio 2017 (dll, static, x82, x64):
    https://goo.gl/ynRJST OpenSSL 1.1.1 Source fixed for Visual Studio:
    https://goo.gl/YqSoGF

    Visual Studio 2017 (Visual C++ compiler)
    on Windows 7, 8, 8.1, 10

    1. Command Prompt — with Administrator Privilege

    1. Download OpenSSL master package

    2. Either Visual Studio 2015 or 2017 should be installed on your machine.

    cpan -i Text::Template
    cpan -i Test::More

    VC-WIN64A for Visual C++ for AMD64 or x86-x64 (or Intel — x64 — Desktop CPU)

    VC-WIN64I for Visual C++ for Intel — x64 — Intel Itanium Architecture CPU

    // key store folder
    —openssldir=C:\DevSoft\OpenSSL\SSL

    // default is shared library or DLL on Windows
    Configuration for Visual C++, x64-bit, x86-64, AMD64
    shared library (or DLL), release

    perl Configure
    VC-WIN64A
    —release
    —prefix=C:\DevSoft\OpenSSL\DLL\x64\Release
    —openssldir=C:\DevSoft\OpenSSL\SSL

    Configuration for Visual C++, x64-bit, x86-64, AMD64
    shared library (or DLL), debug

    perl Configure
    VC-WIN64A
    —debug
    —prefix=C:\DevSoft\OpenSSL\DLL\x64\Debug
    —openssldir=C:\DevSoft\OpenSSL\SSL

    Configuration for Visual C++, x64-bit, x86-64, AMD64
    static library, release

    perl Configure VC-WIN64A
    —prefix=C:\DevSoft\OpenSSL\Lib\x64\Release
    —openssldir=C:\DevSoft\OpenSSL\SSL
    no-shared

    Configuration for Visual C++, x64-bit, x86-64, AMD64
    static library, debug

    perl Configure VC-WIN64A
    —debug
    —prefix=C:\DevSoft\OpenSSL\Lib\x64\Debug
    —openssldir=C:\DevSoft\OpenSSL\SSL
    no-shared

    To install all component including documentation
    nmake install

    To install software component only
    nmake install_sw

    источник

    Компилируем библиотеку OpenSSL 1.1.0 для платформ Win32 и Win64

    Автор: Alex. Опубликовано в Программирование 29 Апрель 2017 . просмотров: 9169

    OpenSSL – это криптографическая библиотека, предназначенная для использования в приложениях, которым нужно безопасное взаимодействие в компьютерных сетях, например, с целью защиты передаваемой информации от прослушивания или для установления личности участника на другом конце. Найти скомпилированную библиотеку конечно можно, но не нужно. Разработчики OpenSSL советуют компилировать библиотеку самостоятельно, чтобы учесть все необходимые для вашего случая детали, такие как особенности архитектуры и платформы. В этой статье мы рассмотрим, как скомпилировать библиотеку OpenSSL версии 1.1.0 и выше для платформ Win32 и Win64.

    Читайте также:  Установка гбц мазда 626

    Готовим всё необходимое для компиляции OpenSSL

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

      1. Perl. Рекомендуется использовать ActiveState Perl, который вы можете найти на официальном сайте здесь.
      2. Netwide Assembler (NASM). Этот ассемблер является обязательным, если вы планируете использовать модули на ассемблере. Скачать дистрибутив этого ассемблера вы можете с официального сайта здесь. После установки обязательно пропишите путь к файлу nasm.exe в переменную среды PATH.
      3. Компилятор C. OpenSSL тестируется только с компилятором Visual C++, поэтому лучше использовать именно его. Этот компилятор у вас уже установлен, если у вас установлена какая либо версия Microsoft Visual Studio. Если студия у вас не установлена, и вы не собираетесь её устанавливать, вы можете установить Visual C++ 2015 Build Tools (если при установке вы уберёте все галочки, то будет установлен только компилятор).

    После этого скачайте исходники библиотеки OpenSSL с официального сайта отсюда. Если вы хотите иметь сразу две версии OpenSSL для отладки, то вам нужно будет скомпилировать OpenSSL два раза в разные папки. В этом случае создайте две папки: одну для платформы Win32, вторую для платформы Win64, например, C:\openssl-src-32 и C:\openssl-src-64, и распакуйте исходники два раза в обе эти папки.

    Всё дальнейшее нужно будет делать из командной строки Visual Studio. Командную строку запускайте сразу для нужной целевой архитектуры процессора x86 или x64. Как в вашей операционной системе найти ярлык/пункт меню для запуска командной строки можете почитать здесь. Например, если у вас Windows 7 и установлена студия 2012, то для запуска командной строки для целевой архитектуры процессора x86 нужный пункт меню будет находиться по пути «Пуск -> Все программы -> Microsoft Visual Studio 2018 -> Visual Studio Tools -> Командная строка VS2012 x86 Native Tools». А если вы установили только инструменты Visual C++ 2015 Build Tools, то для Windows 7 и целевой архитектуры x86 пункт меню будет «Пуск -> Все программы -> Visual C++ Build Tools -> Windows Desktop Commands Prompt -> Visual C++ 2015 x86 Native Build Tools Command Prompt».

    Компиляция библиотеки по умолчанию происходит в папку приложений «C:\Program Files\OpenSSL» или «C:\Program Files (86)\OpenSSL» (в зависимости от текущей архитектуры Windows), поэтому командную строку Visual Studio нужно запускать с правами администратора. Для этого по ярлыку/пункту меню нужно щёлкнуть правой кнопкой мышки и выбрать «Запуск от имени администратора».

    Компилируем OpenSSL

      1. Откройте командную строку Visual Studio (как это сделать, см. выше).
      2. Перейдите в папку с нужными исходниками. Для этого выполните команду «cd ПУТЬ». Например, для перехода в папку C:\openssl-src-32 команда будет выглядеть так:

    А для перехода в папку C:\openssl-src-64 так:

      1. Сконфигурируйте make-файл для конкретной целевой платформы и целевой папки. Для платформы Win32 и целевой папки «C:\Program Files\OpenSSL» или «C:\Program Files (x86)» выполните команду:

    Для компиляции для Win32 в вашу конкретную папку, например, «C:\Build-OpenSSL-VC-32»:

    Для компиляции для Win32 с символьной отладочной информацией в вашу папку, например, «C:\Build-OpenSSL-VC-32-dbg»:

    Для компиляции для Win64 в вашу конкретную папку, например, «C:\Build-OpenSSL-VC-64»:

    Для компиляции для Win64 с символьной отладочной информацией в вашу папку, например, «C:\Build-OpenSSL-VC-64-dbg»:

    Если вы решили не использовать модули на ассемблере, то допишите ещё параметр «no-asm». Например:

    Узнать назначение ещё большего количества параметров, можно почитав текстовый файл INSTALL, который находится в папке с исходниками.

      1. Чтобы получить библиотеку OpenSSL с полной отладочной информацией, после шага 3, откройте файл makefile в любом текстовом редакторе, найдите в тексте флажки «/Zi» и замените их на «/Z7». Таких замен у вас должно получиться три. Подробности об этих флажках см. здесь.

    На самом деле я не обнаружил разницы между компиляцией с добавлением отладочных символов и без неё. У меня всё время получается вариант для отладки: создаются OBJ и PDB-файлы. Видимо при создании файла makefile где-то закралась ошибка, которую в будущих версиях исправят.

      1. Скомпилируйте OpenSSL. Для этого последовательно выполните следующие три команды:

    Здесь команда «nmake» компилирует весь проект, команда «nmake test» проводит тестирование, при успешном проведении которого должны появится сообщения «All tests successful» и «Result: PASS», а команда «nmake install» копирует необходимые файлы в папки назначения.

    После выполнения последней команды в целевой папке (это папка «C:\Program Files\OpenSSL», «C:\Program Files (x86)\OpenSSL» или папка, которую вы задали параметром —prefix) появятся готовые файлы библиотеки OpenSSL. Можно их использовать.

    Как видите, ничего особенно сложного в компиляции OpenSSL нет. Однако особо ленивые могут скачать уже готовые дистрибутивы, содержащие скомпилированные файлы библиотеки, с сайта Shining Light Productions, или более старые версии библиотеки отсюда.

    источник

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