2010-06-30 3 views
11

Vous pouvez considérer cela comme une question complémentaire à How do I install the OpenSSL C++ library on Ubuntu?Comment installer et construire avec OpenSSL 1.0.0 sous Ubuntu?

J'essaye de construire du code sur Ubuntu 10.04 LTS qui nécessite OpenSSL 1.0.0.

Ubuntu 10.04 LTS est livré avec 0.9.8k OpenSSL:

$ openssl version 
OpenSSL 0.9.8k 25 Mar 2009 

après avoir exécuté sudo apt-get install libssl-dev et la construction, en cours d'exécution ldd confirme que je suis lié 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) 
     ... 

Comment puis-je installez OpenSSL 1.0.0 et le paquet de développement 1.0.0?

Mise à jour: Je vous écris cette mise à jour après avoir lu la réponse de SB (mais avant de l'essayer), car il est clair que je dois expliquer que la solution la plus évidente du téléchargement et l'installation OpenSSL 1.0.0 ne fonctionne pas :

Après avoir fait avec succès les éléments suivants (recommandé dans le fichier INSTALL):

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

... Je comprends toujours:

OpenSSL 0.9.8k 25 Mar 2009 

... et:

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

... et (juste pour vous assurer) après la reconstruction de mon code, ldd retourne toujours la même chose.

Mise à jour # 2: J'ai ajouté le "-I/usr/local/ssl/include" et "-L/usr/local/lib/ssl" options (suggéré par SB) à mon makefile, mais je « m obtenir maintenant un tas de référence undefine des erreurs de compilation, par exemple:

/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/contient seulement un répertoire OpenSSL (qui contient de nombreux fichiers .h), donc j'ai aussi essayé" -I/usr/local/ssl/include/openssl "mais a eu les mêmes erreurs.

Mise à jour # 3: J'ai essayé de changer OpenSSL comprend de (par exemple):

#include <openssl/bio.h> 

... à:

#include "openssl/bio.h" 

... dans le fichier source .cpp mais obtenez toujours les mêmes erreurs de référence indéfinies.

Mise à jour # 4: Je réalise maintenant que ces erreurs de référence non définies sont des erreurs de liens. Si je supprime le "-L/usr/local/ssl/lib" de mon Makefile, je n'obtiens pas les erreurs (mais il est lié à OpenSSL 0.9.8). Le contenu de/usr/local/ssl/lib/sont:

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

I ajouté -lcrypto, et les erreurs sont partis.

+0

++ pour mise à jour n ° 4. Merci. –

Répondre

15

Obtenir la source 1.0.0a de here.

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

Cela met dans/usr/local/ssl par défaut

Lorsque vous construisez, vous devez dire à gcc de rechercher les en-têtes dans/usr/local/ssl/include et lien avec libs dans/usr/local/ssl/lib. Vous pouvez spécifier cela en faisant quelque chose comme:

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

EDIT NE PAS écraser toutes les bibliothèques du système. Il est préférable de conserver les nouvelles bibliothèques dans/usr/local. L'écrasement des valeurs par défaut d'Ubuntu peut être dangereux pour votre santé et casser votre système.

En outre, je me suis trompé sur les chemins que je viens d'essayer dans Ubuntu 10.04 VM. Fixé. Remarque: il n'est pas nécessaire de changer LD_LIBRARY_PATH car les librairies openssl par défaut sont des librairies statiques (au moins par défaut - il pourrait y avoir un moyen de les configurer comme des librairies dynamiques dans l'étape ./config)

Vous devrez peut-être effectuer un lien avec libcrypto car vous utilisez certains appels qui sont générés et définis dans le package libcrypto. Openssl 1.0.0 construit deux bibliothèques, libcrypto et libssl.

EDIT 2 Ajout de la ligne -lcrypto à la ligne gcc.

+0

Voir les nouvelles mises à jour (à ma question) ci-dessus. Pouvez-vous ajouter une explication de pourquoi j'ai besoin d'ajouter "-lcrypto"? –

+0

Je suppose que OpenSSL 0.9.8 a seulement une bibliothèque, libssl? –

+0

Re: "Notez qu'il n'est pas nécessaire de changer LD_LIBRARY_PATH car les bibliothèques openssl avec lesquelles vous liez par défaut sont des bibliothèques statiques ..." - cela explique pourquoi je ne vois pas libssl.so & libcrypto.so quand je lance ldd sur mon exécutable –

4

Au lieu de:

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

Do:

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

Cela vous aidera à mettre à jour OpenSSL 1.0.1g à patch pour CVE-2014-0160 (heartbleed).

OpenSSL consultatif sur la sécurité

[7 avril 2014]

TLS battement de coeur lu dépassement (CVE-2014-0160)

A bornes manquantes vérifier dans le traitement de l'extension du rythme cardiaque TLS peut être utilisé pour révéler up à 64k de mémoire à un client ou un serveur connecté.

Seules les versions 1.0.1 et 1.0.2-bêta d'OpenSSL sont affectées, y compris 1.0.1f et 1.0.2-beta1.

Merci à Neel Mehta de Google Security pour avoir découvert ce bug et à Adam Langley et Bodo Moeller pour en train de préparer le correctif.

Les utilisateurs concernés doivent passer à OpenSSL 1.0.1g. Les utilisateurs incapables de mettre à niveau immédiatement peuvent également recompiler OpenSSL avec -DOPENSSL_NO_HEARTBEATS.

1.0.2 sera corrigé dans 1.0.2-beta2.

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

+0

Assurez-vous que la bibliothèque par défaut est purgée avec apt-get purge avant d'installer la version compilée. – Schien

+0

Notez que vous n'avez pas besoin de créer et d'installer OpenSSL manuellement. Le patch a été rétroporté dans les paquets utilisés dans Ubuntu (voir [advisory] (http://www.ubuntu.com/usn/usn-2165-1/)). Construire une version différente de celle de votre distribution, avec éventuellement une option différente, pourrait en fait causer plus de problèmes (et ne sera pas supportée par Ubuntu). – Bruno

0

Voici ce que résolu le problème pour moi: Upgrade latest version OpenSSL on Ubuntu

Transcrire les informations principales:

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. 
Questions connexes