wip: OpenSSL docs on custom install
[exim.git] / doc / doc-txt / openssl.txt
CommitLineData
2eec84ca
PP
1OpenSSL
2=======
3
4The OpenSSL Project documents their supported releases at
5<https://www.openssl.org/policies/releasestrat.html>. The Exim
6Maintainers are unwilling to try to support Exim built with a
7version of a critical security library which is unmaintained.
8
9Thus as versions of OpenSSL become unsupported by OpenSSL, they become
10unsupported by Exim. Exim might build with older releases of OpenSSL,
11but that's risky behaviour.
12
13If your operating system vendor continues to ship an older version of
14OpenSSL and is diligently backporting security fixes, and they support
15Exim, then they will be backporting fixes to their packages of Exim too.
16If you wish to stick purely to packages of OpenSSL, then stick to
17packages of Exim too.
18
19If someone maintains "backports", that is worth exploring too.
20
21Note that a number of OSes use Exim with GnuTLS, not OpenSSL.
22
23Otherwise, assuming that your operating system has old OpenSSL, and you
24wish to use current Exim with OpenSSL, then you need to build and
25install your own, without interfering with the system libraries.
26Fortunately, this is easy.
27
28So this only applies if you build Exim yourself.
29
30
31Build
32-----
33
34Extract the current source of OpenSSL. Change into that directory.
35
36This assumes that `/opt/openssl` is not in use. If it is, pick
37something else. `/opt/exim/openssl` perhaps.
38
39 ./config --prefix=/opt/openssl --openssldir=/etc/ssl
40 enable-ssl-trace
41 make
42 make install
43
44You now have an installed OpenSSL under /opt/openssl which will not be
45used by any system programs.
46
47When you copy `src/EDITME` to `Local/Makefile` to make your build edits,
48choose the pkg-config approach in that file, but also tell Exim to add
49the relevant directory into the rpath stamped into the binary:
50
51 SUPPORT_TLS=yes
52 USE_OPENSSL_PC=openssl
53 EXTRALIBS_EXIM=-ldl -Wl,-rpath,/opt/openssl/lib
54
55The -ldl is needed by OpenSSL 1.1+ on Linux and is not needed on most
56other platforms.
57
58Then tell pkg-config how to find the configuration files for your new
59OpenSSL install, and build Exim:
60
61 export PKG_CONFIG_PATH=/opt/openssl/lib/pkgconfig
62 make
63 sudo make install
64
65
66Confirming
67----------
68
69Run:
70
71 exim -d-all+expand --version
72
73and look for the `Library version: OpenSSL:` lines.
74
75To look at the libraries _probably_ found by the linker, use:
76
77 ldd $(which exim) # most platforms
78 otool -L $(which exim) # MacOS
79
80although that does not correclty handle restrictions imposed upon
81executables which are setuid.
82
83If the `chrpath` package is installed, then:
84
85 chrpath -l $(which exim)
86
87will show the DT_RPATH stamped into the binary.
88
89
90Very Advanced
91-------------
92
93You can not use $ORIGIN for portably packing OpenSSL in with Exim with
94normal Exim builds, because Exim is installed setuid which causes the
95runtime linker to ignore $ORIGIN in DT_RPATH.
96
97_If_ following the steps for a non-setuid Exim, _then_ you can use:
98
99 EXTRALIBS_EXIM=-ldl '-Wl,-rpath,$$ORIGIN/../lib'
100
101The doubled `$$` is needed for the make(1) layer and the quotes needed
102for the shell invoked by make(1) for calling the linker.
103
104Note that this is sufficiently far outside normal that the build-system
105doesn't support it by default; you'll want to drop a symlink to the lib
106directory into the Exim release top-level directory, so that lib exists
107as a sibling to the build-$platform directory.
108