Как мне установить и собрать против OpenSSL 1.0.0 в Ubuntu? - PullRequest
12 голосов
/ 01 июля 2010

Вы можете считать это дополнительным вопросом к Как установить библиотеку OpenSSL C ++ в Ubuntu?

Я пытаюсь создать код на Ubuntu 10.04 LTS, который требует OpenSSL 1.0.0.

Ubuntu 10.04 LTS поставляется с OpenSSL 0.9.8k:

$ openssl version
OpenSSL 0.9.8k 25 Mar 2009

Итак, после запуска sudo apt-get install libssl-dev и сборки, запуск ldd подтверждает, что я связался в 0.9.8:

$ ldd foo
        ...
        libssl.so.0.9.8 => /lib/i686/cmov/libssl.so.0.9.8 (0x00110000)
        ...
        libcrypto.so.0.9.8 => /lib/i686/cmov/libcrypto.so.0.9.8 (0x002b0000)
        ...

Как мне установить OpenSSL 1.0.0 и пакет разработки 1.0.0?

Обновление : я пишу это обновление после прочтения ответа SB (но перед тем, как его попробовать), потому что ясно, что мне нужно объяснить, что очевидное решение загрузки и установка OpenSSL 1.0.0 не работает:

После успешного выполнения следующего (рекомендуется в файле INSTALL):

  $ ./config
  $ make
  $ make test
  $ make install

... Я все еще получаю:

OpenSSL 0.9.8k 25 Mar 2009

... и:

$ sudo apt-get install libssl-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libssl-dev is already the newest version.
The following packages were automatically installed and are no longer required:
  linux-headers-2.6.32-21 linux-headers-2.6.32-21-generic
Use 'apt-get autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

... и (просто чтобы убедиться) после перестройки моего кода ldd все равно возвращает то же самое.

Обновление # 2 : я добавил опции "-I / usr / local / ssl / include" и "-L / usr / local / ssl / lib" (предложено SB ) в мой make-файл, но сейчас я получаю кучу неопределенных ошибок компиляции ссылок, например:

/home/dspitzer/foo/foo.cpp:86: undefined reference to `BIO_f_base64'
/home/dspitzer/foo/foo.cpp:86: undefined reference to `BIO_new'

/ usr / local / ssl / include / содержит только каталог openssl (который содержит множество файлов .h), поэтому я также попробовал "-I / usr / local / ssl / include / openssl", но получил те же ошибки.

Обновление # 3 : я пытался изменить OpenSSL включает (например):

#include <openssl/bio.h>

... чтобы:

#include "openssl/bio.h"

... в исходном файле .cpp, но все равно получают те же неопределенные ошибки ссылок.

Обновление № 4 : теперь я понимаю, что эти неопределенные ошибки ссылок являются ошибками компоновщика. Если я удаляю «-L / usr / local / ssl / lib» из моего Makefile, я не получаю ошибок (но он ссылается на OpenSSL 0.9.8). Содержимое / usr / local / ssl / lib /:

$ ls /usr/local/ssl/lib/
engines  libcrypto.a  libssl.a  pkgconfig

Я добавил -lcrypto, и ошибки исчезли.

Ответы [ 3 ]

18 голосов
/ 01 июля 2010

Получите источник 1.0.0a из здесь .

# tar -xf openssl-1.0.0a.tar.gz
# cd openssl-1.0.0a
# ./config
# sudo make install

Это помещает его в / usr / local / ssl по умолчанию

Когда вы собираете, вы должны указать gcc найти заголовки в / usr / local / ssl / include и связать их с libs в / usr / local / ssl / lib. Вы можете указать это, выполнив что-то вроде:

gcc test.c -o test -I/usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto

РЕДАКТИРОВАТЬ НЕ перезаписывать никакие системные библиотеки. Лучше всего хранить новые библиотеки в / usr / local. Перезапись настроек Ubuntu по умолчанию может быть опасна для вашего здоровья и сломать вашу систему.

Кроме того, я был не прав относительно путей, поскольку я только что попробовал это в Ubuntu 10.04 VM. Исправлено.

Обратите внимание, что изменять LD_LIBRARY_PATH не нужно, поскольку библиотеки openssl, с которыми вы связываете по умолчанию, являются статическими библиотеками (по крайней мере, по умолчанию - на шаге ./config можно настроить их как динамические библиотеки) *

Вам может потребоваться установить связь с libcrypto, потому что вы используете некоторые вызовы, которые встроены и определены в пакете libcrypto. Openssl 1.0.0 фактически собирает две библиотеки, libcrypto и libssl.

РЕДАКТИРОВАТЬ 2 Добавлено -lcrypto в строку gcc.

4 голосов
/ 09 апреля 2014

Вместо:

    $ ./config
    $ make
    $ make test
    $ make install

Do:

    $ sudo ./config --prefix=/usr
    $ sudo make
    $ sudo make test
    $ sudo make install

Это поможет вам обновиться до openssl 1.0.1g для обновления для CVE-2014-0160 (Heartbleed).

Советы по безопасности OpenSSL [07 апреля 2014 г.]

Превышение чтения тактового импульса TLS (CVE-2014-0160)

Может использоваться проверка отсутствующих границ при обработке расширения тактового импульса TLSвыявить до 64 КБ памяти для подключенного клиента или сервера.

Это касается только версий OpenSSL бета-версий 1.0.1 и 1.0.2, включая 1.0.1f и бета-версии 1.0.2.

Спасибо Нилу Мехте из Google Security за обнаружение этой ошибки и Адаму Лэнгли и Бодо Мёллеру за подготовку исправления.

Затронутым пользователям следует перейти на OpenSSL 1.0.1g.Пользователи, не имеющие возможности немедленного обновления, могут альтернативно перекомпилировать OpenSSL с -DOPENSSL_NO_HEARTBEATS.

1.0.2 будет исправлено в 1.0.2-бета2.

Источник: https://www.openssl.org/news/secadv_20140407.txt

0 голосов
/ 29 марта 2016

Вот что для меня решило: Обновите последнюю версию OpenSSL в Ubuntu

Расшифровка основных сведений:

Download the OpenSSL v1.0.0g source:

$ wget http://www.openssl.org/source/openssl-1.0.0g.tar.gz

Unpack the archive and install:

$ tar xzvf openssl-1.0.0g.tar.gz
$ cd openssl-1.0.0g
$ ./config
$ make
$ make test
$ sudo make install

All files, including binaries and man pages are install under the directory /usr/local/ssl. To ensure users use this version of OpenSSL instead of the previous version you must update the paths for man pages and binaries.

Edit the file /etc/manpath.config adding the following line before the first MANPATH_MAP:

MANPATH_MAP     /usr/local/ssl/bin      /usr/local/ssl/man

Update the man database (I honestly can't remember and don't know for sure if this command was necessary - maybe try without it and at the end when testing if the man pages are still the old versions come back and run mandb):

sudo mandb

Edit the file /etc/environment and insert the path for OpenSSL binaries (/usr/local/ssl/bin) before the path for Ubuntu's version of OpenSSL (/usr/bin). My environment file looks like this:

PATH="/usr/local/sbin:/usr/local/bin:/usr/local/ssl/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

Logout and login and test:

$ openssl version
OpenSSL 1.0.0g 18 Jan 2012

Also test the man pages by running man openssl and at the very bottom in the left hand corner it should report 1.0.0g.

Note that although the users will now automatically use the new version of OpenSSL, existing programs (e.g. Apache) may not as they are linked against the libraries from the Ubuntu version.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...