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