2010-06-30 5 views
11

Sie können dies eine Follow-up-Frage zu How do I install the OpenSSL C++ library on Ubuntu?Wie installiere und baue ich gegen OpenSSL 1.0.0 unter Ubuntu?

Ich versuche, etwas Code auf Ubuntu 10.04 LTS, die OpenSSL 1.0.0 erfordert.

Ubuntu 10.04 LTS kommt mit OpenSSL 0.9.8k:

$ openssl version 
OpenSSL 0.9.8k 25 Mar 2009 

So nach sudo apt-get install libssl-dev und Gebäude läuft, ldd bestätigt ich in 0.9.8 verknüpft haben:

$ 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) 
     ... 

Wie kann ich Installieren Sie OpenSSL 1.0.0 und das 1.0.0-Entwicklungspaket?

aktualisieren: Ich schreibe dieses Update nach SB ‚s Antwort zu lesen (aber es, bevor Sie versuchen), denn es ist klar, ich brauche, dass die offensichtliche Lösung für das Herunterladen und die Installation von OpenSSL 1.0.0 funktioniert nicht erklären :

Nach einer erfolgreich verlaufenen folgenden (empfohlen in der Datei INSTALL) tun:

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

... ich bekomme immer noch:

OpenSSL 0.9.8k 25 Mar 2009 

... und:

$ 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. 

... und (nur um sicher zu machen) nach meinem Code Wiederaufbau, LDD noch die gleiche Sache zurückgibt.

Update # 2: Ich habe die "-I/usr/local/ssl/include" und "-L/usr/local/ssl/lib" Optionen (von SB vorgeschlagen) zu meiner Make-Datei, aber ich sind jetzt ein Bündel von undefine Referenz-Fehlern kompilieren, zum Beispiel:

/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/enthält nur ein openSSL-Verzeichnis (die zahlreichen H-Dateien enthält), so auch "ich habe versucht, -I/usr/local/ssl/include/openssl "aber die gleichen Fehler.

Update # 3: Ich habe versucht, die OpenSSL enthält ändert (zum Beispiel):

#include <openssl/bio.h> 

... bis:

#include "openssl/bio.h" 

... in der CPP-Quelldatei aber immer noch die gleichen undefinierten Referenzfehler.

Update # 4: Ich merke jetzt diese undefinierten Referenzfehler sind Linker-Fehler. Wenn ich die "-L/usr/local/ssl/lib" aus meinem Makefile entferne, bekomme ich die Fehler nicht (aber es verbindet sich mit OpenSSL 0.9.8). Der Inhalt von/usr/local/ssl/lib/sind:

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

Ich habe -lcrypto, und die Fehler ging weg.

+0

++ für Update # 4. Vielen Dank. –

Antwort

15

Holen Sie sich die 1.0.0a-Quelle von here.

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

Damit liegt es in/usr/local/ssl standardmäßig

Wenn Sie bauen, müssen Sie gcc sagen, für die Header in schauen/usr/local/ssl/umfassen und einen Link mit Libs in/usr/lokal/ssl/lib. Sie können dies festlegen, indem Sie so etwas wie tun:

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

EDIT überschreiben keine Systembibliotheken. Es empfiehlt sich, neue Bibliotheken in/usr/local zu speichern. Das Überschreiben von Ubuntu-Standardeinstellungen kann Ihre Gesundheit gefährden und Ihr System beschädigen.

Außerdem lag ich falsch mit den Pfaden, wie ich gerade in Ubuntu 10.04 VM versucht habe. Fest.

Hinweis, gibt es keine Notwendigkeit LD_LIBRARY_PATH da die OpenSSL-Libs Sie verknüpfen gegen standardmäßig sind statische Bibliotheken zu ändern (zumindest in der Standardeinstellung - es könnte eine Möglichkeit sein, sich als dynamischen Libs im ./config Schritt konfigurieren)

Möglicherweise müssen Sie eine Verbindung mit libcrypto herstellen, da Sie einige Aufrufe verwenden, die im libcrypto-Paket erstellt und definiert wurden. Openssl 1.0.0 erstellt zwei Bibliotheken, libcrypto und libssl.

EDIT 2-lcrypto zur gcc-Zeile hinzugefügt.

+0

Siehe die Updates (zu meiner Frage) oben. Kannst du eine Erklärung hinzufügen, warum ich "-lcrypto" hinzufügen musste? –

+0

Ich denke OpenSSL 0.9.8 hat nur die eine Bibliothek, libssl? –

+0

Re: "Beachten Sie, dass LD_LIBRARY_PATH nicht geändert werden muss, da die openssl libs, mit denen Sie standardmäßig verlinkt sind, statische libs sind ..." - das erklärt, warum ich libssl.so & libcrypto.so nicht sehe, wenn ich ldd auf meiner ausführbaren Datei starte –

4

Statt:

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

Do:

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

Dadurch werden Sie auf OpenSSL 1.0.1g helfen aktualisieren für CVE-2014-0160 (Heartbleed) zu patchen.

OpenSSL Security Advisory [7. April 2014]

TLS Herzschlag überrannt (CVE-2014-0160) lesen

Eine fehlende Überprüfung von Grenzen im Umgang mit der TLS Herzerweiterung kann offenbaren verbraucht werden 64 KB Speicher für einen verbundenen Client oder Server.

Nur OpenSSL-Versionen 1.0.1 und 1.0.2-beta sind betroffen, einschließlich 1.0.1f und 1.0.2-beta1.

Vielen Dank für Neel Mehta von Google Security für die Entdeckung dieses Fehlers und Adam Langley und Bodo Moeller für die Vorbereitung vorbereitet.

Betroffene Benutzer sollten ein Upgrade auf OpenSSL 1.0.1g durchführen. Benutzer, die nicht sofort aktualisieren können, können OpenSSL alternativ mit -DOPENSSL_NO_HEARTBEATS neu kompilieren.

1.0.2 wird in 1.0.2-beta2 behoben werden.

Quelle: https://www.openssl.org/news/secadv_20140407.txt

+0

Stellen Sie sicher, dass die Standardbibliothek mit apt-get purge gelöscht wird, bevor Sie die kompilierte Version installieren. – Schien

+0

Beachten Sie, dass Sie OpenSSL nicht manuell erstellen und installieren müssen. Der Patch wurde auf die in Ubuntu verwendeten Pakete zurückportiert (siehe [advisory] (http://www.ubuntu.com/usn/usn-2165-1/)). Eine andere Version als die in Ihrer Distribution zu erstellen, möglicherweise mit anderer Option, könnte tatsächlich weitere Probleme verursachen (und wird von Ubuntu nicht unterstützt). – Bruno

0

Hier ist, was es für mich gelöst: Upgrade latest version OpenSSL on Ubuntu

die wichtigsten Informationen Transkribieren:

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.