blob: 469823f145c739ab74bad4f230df10e52afa3ada [file] [log] [blame]
Alex Gaynoraf82d5e2013-10-29 17:07:24 -07001.. hazmat::
Alex Gaynor0f7f7812013-09-30 10:52:36 -07002
Alex Gaynor8f42fe42013-12-24 13:15:52 -08003OpenSSL Backend
4===============
Donald Stuffte51fb932013-10-27 17:26:17 -04005
Alex Stapletonc368ac22013-12-31 13:43:38 +00006The `OpenSSL`_ C library.
Alex Gaynor6d02e2d2013-09-30 10:37:22 -07007
Alex Gaynorf8796b12013-12-13 20:28:55 -08008.. data:: cryptography.hazmat.backends.openssl.backend
Alex Gaynor6d02e2d2013-09-30 10:37:22 -07009
Paul Kehrer3f17c7c2014-01-20 16:32:26 -060010 This is the exposed API for the OpenSSL backend.
Paul Kehrer2502ce52014-01-18 09:32:47 -060011
Paul Kehrercfa2d622014-01-19 14:01:25 -060012 .. attribute:: name
Paul Kehrer2502ce52014-01-18 09:32:47 -060013
Paul Kehrercfa2d622014-01-19 14:01:25 -060014 The string name of this backend: ``"openssl"``
Alex Gaynor6d02e2d2013-09-30 10:37:22 -070015
Paul Kehrer3f17c7c2014-01-20 16:32:26 -060016 .. method:: register_osrandom_engine()
17
18 Registers the OS random engine as default. This will effectively
19 disable OpenSSL's default CSPRNG.
20
21 .. method:: unregister_osrandom_engine()
22
23 Unregisters the OS random engine if it is default. This will restore
24 the default OpenSSL CSPRNG. If the OS random engine is not the default
25 engine (e.g. if another engine is set as default) nothing will be
26 changed.
27
28OS Random Engine
29----------------
30
31OpenSSL has a CSPRNG that it seeds when starting up. Unfortunately, its state
32is replicated when the process is forked and child processes can deliver
33similar or identical random values. OpenSSL has landed a patch to mitigate this
34issue, but this project can't rely on users having recent versions.
35
36To work around this cryptography uses a custom OpenSSL engine that replaces the
37standard random source with one that fetches entropy from ``/dev/urandom`` (or
38CryptGenRandom on Windows). This engine is **active** by default when importing
39the OpenSSL backend. It is added to the engine list but not activated if you
40only import the binding.
41
42
Alex Stapletone68d73e2013-12-31 14:00:38 +000043Using your own OpenSSL on Linux
44-------------------------------
45
46Python links to OpenSSL for its own purposes and this can sometimes cause
47problems when you wish to use a different version of OpenSSL with cryptography.
48If you want to use cryptography with your own build of OpenSSL you will need to
49make sure that the build is configured correctly so that your version of
50OpenSSL doesn't conflict with Python's.
51
52The options you need to add allow the linker to identify every symbol correctly
53even when multiple versions of the library are linked into the same program. If
54you are using your distribution's source packages these will probably be
55patched in for you already, otherwise you'll need to use options something like
56this when configuring OpenSSL::
57
58 ./config -Wl,--version-script=openssl.ld -Wl,-Bsymbolic-functions -fPIC shared
59
60You'll also need to generate your own ``openssl.ld`` file. For example::
61
62 OPENSSL_1.0.1F_CUSTOM {
63 global:
64 *;
65 };
66
67You should replace the version string on the first line as appropriate for your
68build.
69
Alex Gaynor6d02e2d2013-09-30 10:37:22 -070070.. _`OpenSSL`: https://www.openssl.org/