todo removed (already done)
[ach-master.git] / src / ssllibs.tex
index 3f86db0..bee8583 100644 (file)
@@ -1,29 +1,53 @@
 \section{SSL libraries}
 \label{section:ssllibs}
 
-\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}
-\todo{anyone? How about Java? What exists here?}
-\todo{Anyone? Windows crypto API?}
-\todo{Mac OSX /iOS crypto API? MacLemon?}
-
-
-\subsection{OpenSSL}
-
-\todo{adi?}
-
-\subsection{GnuTLS}
-
-\todo{adi?}
-
-\subsection{NaCL}
-
-\todo{adi?}
-
-\subsection{polarSSL}
-
-\todo{adi?}
-
-\subsection{matrixSSL}
-
-\todo{adi?}
-
+Most if not all of the cryptographic work is done by the SSL libraries installed on
+your system. Supported protocols, cipher suites and more depend on the version of
+the SSL library in use. Whenever you upgrade the SSL library, a recompile of all
+applications using that library is required to use the newly available features.
+Some features not only require a SSL library supporting it, but also the application
+using that feature. An example for that may be Apache supporting elliptic curve
+cryptography only from version 2.4 onwards, no matter if OpenSSL supported it or
+not.
+
+As you may see from the above, creating a secure setup isn't just a matter of
+configuration but also depends on several other factors with the most important
+being the SSL libraries and their support of protocols and cipher suites.
+Furthermore, applications actually need to make use of those.
+
+For most configuration snippets throughout this paper we used OpenSSL's cipher
+strings. Sadly they are different from the official IANA standard names. When you
+use a different library like for example GnuTLS (which is quite common on Debian
+systems) you might need to change the cipher string. The hex code for a cipher
+string however is common to all versions and and library implementations:
+\texttt{TLS\_RSA\_CAMELLIA\_256\_CBC\_SHA1} in GnuTLS is equivalent to
+\texttt{CAMELLIA256-SHA} in OpenSSL and \texttt{TLS\_RSA\_WITH\_CAMELLIA\_256\_CBC\_SHA}
+in the IANA standard with the hex code \texttt{0x00,0x84} as specified
+in RFC5932\cite{rfc5932}.
+
+In any way, as a sysadmin you are required to check what the SSL libraries on
+your systems support on how you may get the most security out of your systems.
+
+\subsection{priority strings}
+
+Choosing cipher strings requires the use of an intermediate language that allows selection
+and deselection of ciphers, key exchange mechanisms, MACs and combinations of those.
+Common combinators consist of \texttt{+}, \texttt{-} and \texttt{!}
+
+\begin{center}
+\begin{tabular}{rll}
+\toprule
+\textbf{combinator} & \textbf{effect}                   & \textbf{example}\\\cmidrule(lr){1-3}
+           \verb|+| & add at this position              & \verb|ALL:+SHA256|        \\
+           \verb|-| & remove at the current position    & \verb|ALL:-SSLv3|         \\
+           \verb|!| & permanently remove from selection & \verb|ALL:!3DES:!RC4|     \\
+ (OpenSSL) \verb|@| & special command                   & \verb|ALL:@STRENGTH|       \\
+  (GnuTLS) \verb|%| & special command                   & \verb|NORMAL:%NEW_PADDING| \\
+\bottomrule
+\end{tabular}
+\end{center}
+
+A list of special strings to use can be found in
+\url{http://www.gnutls.org/manual/html_node/Priority-Strings.html} for GnuTLS or
+\url{https://www.openssl.org/docs/apps/ciphers.html} for OpenSSL. There is, however, no
+common syntax for a cipher string throughout different SSL libraries.