How do I install the OpenSSL libraries on Ubuntu?

C++UbuntuInstallationOpenssl

C++ Problem Overview


I'm trying to build some code on Ubuntu 10.04 LTS that uses OpenSSL 1.0.0. When I run make, it invokes g++ with the "-lssl" option. The source includes:

#include <openssl/bio.h>
#include <openssl/buffer.h>
#include <openssl/des.h>
#include <openssl/evp.h>
#include <openssl/pem.h>
#include <openssl/rsa.h>

I ran:

$ sudo apt-get install openssl
Reading package lists... Done
Building dependency tree       
Reading state information... Done
openssl is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.

But I guess the openssl package doesn't include the library. I get these errors on make:

foo.cpp:21:25: error: openssl/bio.h: No such file or directory
foo.cpp:22:28: error: openssl/buffer.h: No such file or directory
foo.cpp:23:25: error: openssl/des.h: No such file or directory
foo.cpp:24:25: error: openssl/evp.h: No such file or directory
foo.cpp:25:25: error: openssl/pem.h: No such file or directory
foo.cpp:26:25: error: openssl/rsa.h: No such file or directory

How do I install the OpenSSL C++ library on Ubuntu 10.04 LTS?

I did a man g++ and (under "Options for Linking") for the -l option it states: " The linker searches a standard list of directories for the library..." and "The directories searched include several standard system directories..." What are those standard system directories?

C++ Solutions


Solution 1 - C++

You want to install the development package, which is libssl-dev:

sudo apt-get install libssl-dev

Solution 2 - C++

Run:

apt-get install libssl-dev

Solution 3 - C++

> How could I have figured that out for > myself (other than asking this > question here)? Can I somehow tell > apt-get to list all packages, and grep > for ssl? Or do I need to know the > "lib*-dev" naming convention?

If you're linking with -lfoo then the library is likely libfoo.so. The library itself is probably part of the libfoo package, and the headers are in the libfoo-dev package as you've discovered.

Some people use the GUI "synaptic" app (sudo synaptic) to (locate and) install packages, but I prefer to use the command line. One thing that makes it easier to find the right package from the command line is the fact that apt-get supports bash completion.

Try typing sudo apt-get install libssl and then hit tab to see a list of matching package names (which can help when you need to select the correct version of a package that has multiple versions or other variations available).

Bash completion is actually very useful... for example, you can also get a list of commands that apt-get supports by typing sudo apt-get and then hitting tab.

Solution 4 - C++

I found a detailed solution here: Install OpenSSL Manually On Linux

From the blog post...:

> Steps to download, compile, and install are as follows (I'm installing version 1.0.1g below; please replace "1.0.1g" with your version number): > > Step – 1 : Downloading OpenSSL: > > Run the command as below : > > $ wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz > > Also, download the MD5 hash to verify the integrity of the downloaded file for just varifacation purpose. In the same folder where you have downloaded the OpenSSL file from the website : > > $ wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz.md5
> $ md5sum openssl-1.0.1g.tar.gz
> $ cat openssl-1.0.1g.tar.gz.md5 > > Step – 2 : Extract files from the downloaded package: > > $ tar -xvzf openssl-1.0.1g.tar.gz > > Now, enter the directory where the package is extracted like here is openssl-1.0.1g > > $ cd openssl-1.0.1g > > Step – 3 : Configuration OpenSSL > > Run below command with optional condition to set prefix and directory where you want to copy files and folder. > > $ ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl > > You can replace “/usr/local/openssl” with the directory path where you want to copy the files and folders. But make sure while doing this steps check for any error message on terminal. > > Step – 4 : Compiling OpenSSL > > To compile openssl you will need to run 2 command : make, make install as below : > > $ make > > Note: check for any error message for verification purpose. > > Step -5 : Installing OpenSSL: > > $ sudo make install > > Or without sudo, > > $ make install > > That’s it. OpenSSL has been successfully installed. You can run the version command to see if it worked or not as below : > > $ /usr/local/openssl/bin/openssl version > > OpenSSL 1.0.1g 7 Apr 2014

Solution 5 - C++

Another way to install openssl library from source code on Ubuntu, follows steps below, here WORKDIR is your working directory:

sudo apt-get install pkg-config
cd WORKDIR
git clone https://github.com/openssl/openssl.git
cd openssl
./config
make
sudo make install
# Open file /etc/ld.so.conf, add a new line: "/usr/local/lib" at EOF
sudo ldconfig

Solution 6 - C++

You want the openssl-devel package. At least I think it's -devel on Ubuntu. Might be -dev. It's one of the two.

Solution 7 - C++

All of these answers are very outdated and from when the package was still being developed. You can now just use the "normal" command listed below:

sudo apt install openssl

Solution 8 - C++

As a general rule, when on Debian or Ubuntu and you're missing a development file (or any other file for that matter), use apt-file to figure out which package provides that file:

~ apt-file search openssl/bio.h
android-libboringssl-dev: /usr/include/android/openssl/bio.h
libssl-dev: /usr/include/openssl/bio.h
libwolfssl-dev: /usr/include/cyassl/openssl/bio.h
libwolfssl-dev: /usr/include/wolfssl/openssl/bio.h

A quick glance at each of the packages that are returned by the command, using apt show will tell you which among the packages is the one you're looking for:

~ apt show libssl-dev
Package: libssl-dev
Version: 1.1.1d-2
Priority: optional
Section: libdevel
Source: openssl
Maintainer: Debian OpenSSL Team <[email protected]>
Installed-Size: 8,095 kB
Depends: libssl1.1 (= 1.1.1d-2)
Suggests: libssl-doc
Conflicts: libssl1.0-dev
Homepage: https://www.openssl.org/
Tag: devel::lang:c, devel::library, implemented-in::TODO, implemented-in::c,
 protocol::ssl, role::devel-lib, security::cryptography
Download-Size: 1,797 kB
APT-Sources: http://ftp.fr.debian.org/debian unstable/main amd64 Packages
Description: Secure Sockets Layer toolkit - development files
 This package is part of the OpenSSL project's implementation of the SSL
 and TLS cryptographic protocols for secure communication over the
 Internet.
 .
 It contains development libraries, header files, and manpages for libssl
 and libcrypto.

N: There is 1 additional record. Please use the '-a' switch to see it

Solution 9 - C++

  1. Go to the official website and download the source code for the version you need

  2. Then unzip the update package and execute the following command

    ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl  -Wl,-rpath,/usr/local/ssl/lib shared
    

Because the default is to generate only static libraries, if you want dynamic libraries, add the "shared" option

  1. make && make install

Solution 10 - C++

sudo apt-get install libcurl4-openssl-dev

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDaryl SpitzerView Question on Stackoverflow
Solution 1 - C++Niki YoshiuchiView Answer on Stackoverflow
Solution 2 - C++Yann RaminView Answer on Stackoverflow
Solution 3 - C++Steve LemkeView Answer on Stackoverflow
Solution 4 - C++MannView Answer on Stackoverflow
Solution 5 - C++B.H XieView Answer on Stackoverflow
Solution 6 - C++jonescbView Answer on Stackoverflow
Solution 7 - C++Jesse NicklesView Answer on Stackoverflow
Solution 8 - C++Vincent FourmondView Answer on Stackoverflow
Solution 9 - C++JK.TangView Answer on Stackoverflow
Solution 10 - C++NursnaazView Answer on Stackoverflow