3ee3b10cdafa52fca17343cd0cc7b47d77774954
[ach-master.git] / src / ssllibs.tex
1 \section{SSL libraries}
2 \label{section:ssllibs}
3
4 \todo{write down that everything here is very SSL lib dependent. You might have to recompile everythign if you need to change the ssl lib}
5
6 Most if not all of the cryptographic work is done by the SSL libraries installed on
7 your system. Supported protocols, cipher suites and more depend on the version of
8 the SSL library in use. Whenever you upgrade the SSL library, a recompile of all
9 applications using that library is required to use the newly available features.
10 Some features not only require a SSL library supporting it, but also the application
11 using that feature. An example for that may be Apache supporting elliptic curve
12 cryptography only from version 2.4 onwards, no matter if OpenSSL supported it or
13 not.
14
15 As you may see from the above, creating a secure setup isn't just a matter of
16 configuration but also depends on several other factors with the most important
17 being the SSL libraries and their support of protocols and cipher suites.
18 Furthermore, applications actually need to make use of those.
19
20 For most configuration snippets throughout this paper we used OpenSSL's cipher
21 strings. Sadly they are different from the official IANA standard names. When you
22 use a different library like for example GnuTLS (which is quite common on Debian
23 systems) you might need to change the cipher string. The hex code for a cipher
24 string however is common to all versions and and library implementations:
25 \texttt{TLS\_RSA\_CAMELLIA\_256\_CBC\_SHA1} in GnuTLS is equivalent to
26 \texttt{CAMELLIA256-SHA} in OpenSSL and \texttt{TLS\_RSA\_WITH\_CAMELLIA\_256\_CBC\_SHA}
27 in the IANA standard with the hex code \texttt{0x00,0x84} as specified
28 in RFC5932\cite{rfc5932}.
29
30 In any way, as a sysadmin you are required to check what the SSL libraries on
31 your systems support on how you may get the most security out of your systems.
32
33 \subsection{priority strings}
34
35 Choosing cipher strings requires the use of an intermediate language that allows selection
36 and deselection of ciphers, key exchange mechanisms, MACs and combinations of those.
37 Common combinators consist of \texttt{+}, \texttt{-} and \texttt{!}
38
39 \begin{center}
40 \begin{tabular}{rll}
41 \toprule
42 \textbf{combinator} & \textbf{effect}                   & \textbf{example}\\\cmidrule(lr){1-3}
43            \verb|+| & add at this position              & \verb|ALL:+SHA256|        \\
44            \verb|-| & remove at the current position    & \verb|ALL:-SSLv3|         \\
45            \verb|!| & permanently remove from selection & \verb|ALL:!3DES:!RC4|     \\
46  (OpenSSL) \verb|@| & special command                   & \verb|ALL:@STRENGTH|       \\
47   (GnuTLS) \verb|%| & special command                   & \verb|NORMAL:%NEW_PADDING| \\
48 \bottomrule
49 \end{tabular}
50 \end{center}
51
52 A list of special strings to use can be found in
53 \url{http://www.gnutls.org/manual/html_node/Priority-Strings.html} for GnuTLS or
54 \url{https://www.openssl.org/docs/apps/ciphers.html} for OpenSSL. There is, however, no
55 common syntax for a cipher string throughout different SSL libraries.