rust-openssl depends on both the OpenSSL runtime libraries and headers.
On Linux, you can install OpenSSL via your package manager. The headers are
sometimes provided in a separate package than the runtime libraries - look for
something like openssl-devel
or libssl-dev
.
# On Ubuntu
sudo apt-get install libssl-dev
# On Arch Linux
sudo pacman -S openssl
OpenSSL 0.9.8 is preinstalled on OSX. Some features are only available when linking against OpenSSL 1.0.0 or greater; see below on how to point rust-openssl to a separate installation.
On Windows, consider building with mingw-w64.
Build script will try to find mingw in PATH
environment variable to provide
Cargo with location where openssl libs from mingw-w64 package may be found.
If you followed guide Building on Windows
from rust repo, then you should have MSYS2 with
mingw-w64-openssl
installed as part of mingw-w64-x86_64-toolchain
(or mingw-w64-i686-toolchain
) package.
Alternatively, install OpenSSL from here. Cargo will not be able to find OpenSSL if it's
installed to the default location. You can either copy the include/openssl
directory, libssl32.dll
, and libeay32.dll
to locations that Cargo can find
or pass the location to Cargo via environment variables:
env OPENSSL_LIB_DIR=C:/OpenSSL-Win64 OPENSSL_INCLUDE_DIR=C:/OpenSSL-Win64/include cargo build
rust-openssl's build script will by default attempt to locate OpenSSL via pkg-config. This will not work in some situations, for example, on systems that don't have pkg-config, when cross compiling, or when using a copy of OpenSSL other than the normal system install.
The build script can be configured via environment variables:
OPENSSL_LIB_DIR
- If specified, a directory that will be used to find OpenSSL runtime libraries.OPENSSL_INCLUDE_DIR
- If specified, a directory that will be used to find OpenSSL headers.OPENSSL_STATIC
- If specified, OpenSSL libraries will be statically rather than dynamically linked.
If either OPENSSL_LIB_DIR
or OPENSSL_INCLUDE_DIR
are specified, then the
build script will skip the pkg-config step.
Several tests expect a local test server to be running to bounce requests off
of. It's easy to do this. Open a separate terminal window and cd
to the
rust-openssl directory. Then run one of the following command:
./openssl/test/test.sh
This will boot a bunch of openssl s_server
processes that the tests connect
to. Then in the original terminal, run cargo test
. If everything is set up
correctly, all tests should pass. You can stop the servers with killall openssl
.