LaTeX-Code cleanup, syntax uniformed and correct typography, new
authorsebix <szebi@gmx.at>
Sat, 11 Jan 2014 16:57:13 +0000 (17:57 +0100)
committersebix <szebi@gmx.at>
Sat, 11 Jan 2014 16:57:13 +0000 (17:57 +0100)
command: \paragraphDiamond{heading}
it makes a paragraph and afterwards displays a \diamond, should be
used when you need something below \subsubsection. It is more
space-saving than \paragraph{heading}\mbox{}\\

21 files changed:
src/acknowledgements.tex
src/common/commands.tex
src/disclaimer.tex
src/further_research.tex
src/links.tex
src/practical_settings/DBs.tex
src/practical_settings/GPG.tex
src/practical_settings/im.tex
src/practical_settings/mailserver.tex
src/practical_settings/proxy_solutions.tex
src/practical_settings/ssh.tex
src/practical_settings/vpn.tex
src/practical_settings/webserver.tex
src/scope.tex
src/template.tex
src/theory/RNGs.tex
src/theory/cipher_suites/architecture.tex
src/theory/cipher_suites/choosing.tex
src/theory/cipher_suites/recommended.tex
src/theory/keylengths.tex
src/tools.tex

index f245e9d..181565b 100644 (file)
@@ -1,4 +1,4 @@
-\newpage
+\clearpage
 \section*{Acknowledgements}
 \label{section:Reviewers}
 
index 95ef7d3..5456ba2 100644 (file)
@@ -17,6 +17,8 @@
   \rule{\linewidth}{1pt}%
 }
 
+\newcommand*{\paragraphDiamond}[1]{\paragraph{#1} \hspace{-6pt} \ensuremath{\diamond} }
+
 %%% CIPHERSTRING
 \usepackage{seqsplit} % Use Sequence split. Basically it inserts between every character pair a box with zero width to allow linebreaks everywhere. Better solution wanted, but is there any better?
 \CatchFileDef{\cipherStringB}{common/cipherStringB.tex}{\endlinechar=-1 }%
index 577945c..8b8857a 100644 (file)
@@ -71,19 +71,19 @@ secure.  We the authors, need this document as much as the reader needs it.
 
 In this guide, we restricted ourselves to:
 \begin{itemize}
-\item Internet-facing services
-\item Commonly used services
-\item Devices which are used in business environments (this specifically excludes XBoxes, Playstations and similar consumer devices)
-\item OpenSSL 
+  \item Internet-facing services
+  \item Commonly used services
+  \item Devices which are used in business environments (this specifically excludes XBoxes, Playstations and similar consumer devices)
+  \item OpenSSL 
 \end{itemize}
 
 We explicitly excluded:
 \begin{itemize}
-\item Specialized systems (such as medical devices, most embedded systems, etc.)
-\item Wireless Access Points
-\item Smart-cards/chip cards
-%\item Advice on running a PKI or a CA
-%\item Services which should be run only in an internal network and never face the Internet.
+  \item Specialized systems (such as medical devices, most embedded systems, etc.)
+  \item Wireless Access Points
+  \item Smart-cards/chip cards
+%  \item Advice on running a PKI or a CA
+%  \item Services which should be run only in an internal network and never face the Internet.
 \end{itemize}
 
 
index ba07165..83153ea 100644 (file)
@@ -4,46 +4,46 @@ The following is a list of services, software packages, hardware devices or prot
 
 \begin{multicols}{3}
 \begin{itemize}
-\item whatsapp (might be problematic\\ since a user/admin can't change anything)
-\item Lync
-\item Skype (might be problematic since a user/admin can't change anything)
-\item Wi-Fi APs, 802.1X
-\item Tomcat
-\item SIP 
-\item SRTP 
-\item DNSSec (mention BCPs) 
-\item DANE
-\item TOR 
-\item S/Mime (check are there any BCPs? )
-\item TrueCrypt, LUKS, FileVault
-\item AFS 
-\item Kerberos 
-\item NNTP 
-\item NTPs tlsdate 
-\item BGP / OSPF 
-\item SILC
-\item LDAP
-\item seclayer-tcp
-\item Commerical network equipment vendors
-\item RADIUS 
-\item Moxa , APC, und co... ICS . Ethernet to serial 
-\item telnet (only sensible recommendation: \emph{DON't!!})
-\item rsyslog 
-\item v6 spoofing (look at work by Ferndo Gont, Marc Heuse, et. al.)
-\item tinc
-\item racoon
-\item l2tp
-\item rsync 
-\item telnets 
-\item ftps 
-\item webmin (probably the same recommendations as with Apache apply, but where does that need to be configured?)
-\item plesk (same as webmin)
-\item phpmyadmin (same as webmin)
-\item DSL modems (where to start?)
-\item UPnP, natPmp 
-\item SAML federated auth providers \footnote{e.g., all the REFEDS folks (\url{https://refeds.org/})), including InCommon (\url{http://www.incommon.org/federation/metadata.html}
+  \item whatsapp (might be problematic since a user/admin can't change anything)
+  \item Lync
+  \item Skype (might be problematic since a user/admin can't change anything)
+  \item Wi-Fi APs, 802.1X
+  \item Tomcat
+  \item SIP
+  \item SRTP
+  \item DNSSec (mention BCPs)
+  \item DANE
+  \item TOR
+  \item S/Mime (check are there any BCPs? )
+  \item TrueCrypt, LUKS, FileVault
+  \item AFS
+  \item Kerberos
+  \item NNTP
+  \item NTPs tlsdate
+  \item BGP / OSPF
+  \item SILC
+  \item LDAP
+  \item seclayer-tcp
+  \item Commerical network equipment vendors
+  \item RADIUS
+  \item Moxa , APC, und co... ICS . Ethernet to serial
+  \item telnet (only sensible recommendation: \emph{DON't!!})
+  \item rsyslog
+  \item v6 spoofing (look at work by Ferndo Gont, Marc Heuse, et. al.)
+  \item tinc
+  \item racoon
+  \item l2tp
+  \item rsync
+  \item telnets
+  \item ftps
+  \item webmin (probably the same recommendations as with Apache apply, but where does that need to be configured?)
+  \item plesk (same as webmin)
+  \item phpmyadmin (same as webmin)
+  \item DSL modems (where to start?)
+  \item UPnP, natPmp
+  \item SAML federated auth providers \footnote{e.g., all the REFEDS folks (\url{https://refeds.org/})), including InCommon (\url{http://www.incommon.org/federation/metadata.html}
   \url{https://wiki.shibboleth.net/confluence/display/SHIB2/TrustManagement} }
-\item Microsoft SQL Server
+  \item Microsoft SQL Server
 \end{itemize}
 \end{multicols}
 
index ef59353..7951237 100644 (file)
@@ -3,26 +3,26 @@
 %% NOTE: this should re restructured...
 
 \begin{itemize}
-\item IANA official list of Transport Layer Security (TLS) Parameters: \url{https://www.iana.org/assignments/tls-parameters/tls-parameters.txt}
-\item SSL cipher settings: \url{http://www.skytale.net/blog/archives/22-SSL-cipher-setting.html}
-\item Elliptic curves and their implementation (04 Dec 2010): \url{https://www.imperialviolet.org/2010/12/04/ecc.html}
-\item A (relatively easy to understand) primer on elliptic curve cryptography: \url{http://arstechnica.com/security/2013/10/a-relatively-easy-to-understand-primer-on-elliptic-curve-cryptography}
-\item Duraconf, A collection of hardened configuration files for SSL/TLS services (Jacob Appelbaum's github): \url{https://github.com/ioerror/duraconf}
-\item Attacks on SSL a comprehensive study of BEAST, CRIME, TIME, BREACH, LUCKY 13 \& RC4 Biases: \url{https://www.isecpartners.com/media/106031/ssl_attacks_survey.pdf}
-\item EFF How to deploy HTTPS correctly: \url{https://www.eff.org/https-everywhere/deploying-https}
-\item Bruce Almighty: Schneier preaches security to Linux faithful (on not recommending to use Blowfish anymore in favor of Twofish): \url{https://www.computerworld.com.au/article/46254/bruce_almighty_schneier_preaches_security_linux_faithful/?pp=3}
-\item Implement FIPS 183-3 for DSA keys (1024bit constraint): \url{https://bugzilla.mindrot.org/show_bug.cgi?id=1647}
-\item Elliptic Curve Cryptography in Practice: \url{http://eprint.iacr.org/2013/734.pdf}
-\item Factoring as a Service: \url{http://crypto.2013.rump.cr.yp.to/981774ce07e51813fd4466612a78601b.pdf}
-\item Black Ops of TCP/IP 2012: \url{http://dankaminsky.com/2012/08/06/bo2012/}
-\item SSL and the Future of Authenticity, Moxie Marlinspike - Black Hat USA 2011: \url{http://www.youtube.com/watch?v=Z7Wl2FW2TcA}
-\item ENISA - Algorithms, Key Sizes and Parameters Report (Oct.'13) \url{http://www.enisa.europa.eu/activities/identity-and-trust/library/deliverables/algorithms-key-sizes-and-parameters-report}
-\item Diffie-Hellman Groups \url{http://ibm.co/18lslZf}
-\item Diffie-Hellman Groups standardized in RFC3526~\cite{rfc3526} \url{http://datatracker.ietf.org/doc/rfc3526/}
-\item ECC-enabled GnuPG per RFC6637~\cite{rfc6637} \url{https://code.google.com/p/gnupg-ecc}
-\item TLS Security (Survey + Lucky13 + RC4 Attack) by Kenny Paterson \url{https://www.cosic.esat.kuleuven.be/ecc2013/files/kenny.pdf}
-\item Ensuring High-Quality Randomness in Cryptographic Key Generation \url{http://arxiv.org/abs/1309.7366v1}
-\item Wikipedia: Ciphertext Stealing \url{http://en.wikipedia.org/wiki/Ciphertext_stealing}
-\item Wikipedia: Malleability (Cryptography) \url{http://en.wikipedia.org/wiki/Malleability_(cryptography)}
-\item Ritter's Crypto Glossary and Dictionary of Technical Cryptography \url{http://www.ciphersbyritter.com/GLOSSARY.HTM}
+  \item IANA official list of Transport Layer Security (TLS) Parameters: \url{https://www.iana.org/assignments/tls-parameters/tls-parameters.txt}
+  \item SSL cipher settings: \url{http://www.skytale.net/blog/archives/22-SSL-cipher-setting.html}
+  \item Elliptic curves and their implementation (04 Dec 2010): \url{https://www.imperialviolet.org/2010/12/04/ecc.html}
+  \item A (relatively easy to understand) primer on elliptic curve cryptography: \url{http://arstechnica.com/security/2013/10/a-relatively-easy-to-understand-primer-on-elliptic-curve-cryptography}
+  \item Duraconf, A collection of hardened configuration files for SSL/TLS services (Jacob Appelbaum's github): \url{https://github.com/ioerror/duraconf}
+  \item Attacks on SSL a comprehensive study of BEAST, CRIME, TIME, BREACH, LUCKY 13 \& RC4 Biases: \url{https://www.isecpartners.com/media/106031/ssl_attacks_survey.pdf}
+  \item EFF How to deploy HTTPS correctly: \url{https://www.eff.org/https-everywhere/deploying-https}
+  \item Bruce Almighty: Schneier preaches security to Linux faithful (on not recommending to use Blowfish anymore in favor of Twofish): \url{https://www.computerworld.com.au/article/46254/bruce_almighty_schneier_preaches_security_linux_faithful/?pp=3}
+  \item Implement FIPS 183-3 for DSA keys (1024bit constraint): \url{https://bugzilla.mindrot.org/show_bug.cgi?id=1647}
+  \item Elliptic Curve Cryptography in Practice: \url{http://eprint.iacr.org/2013/734.pdf}
+  \item Factoring as a Service: \url{http://crypto.2013.rump.cr.yp.to/981774ce07e51813fd4466612a78601b.pdf}
+  \item Black Ops of TCP/IP 2012: \url{http://dankaminsky.com/2012/08/06/bo2012/}
+  \item SSL and the Future of Authenticity, Moxie Marlinspike - Black Hat USA 2011: \url{http://www.youtube.com/watch?v=Z7Wl2FW2TcA}
+  \item ENISA - Algorithms, Key Sizes and Parameters Report (Oct.'13) \url{http://www.enisa.europa.eu/activities/identity-and-trust/library/deliverables/algorithms-key-sizes-and-parameters-report}
+  \item Diffie-Hellman Groups \url{http://ibm.co/18lslZf}
+  \item Diffie-Hellman Groups standardized in RFC3526~\cite{rfc3526} \url{http://datatracker.ietf.org/doc/rfc3526/}
+  \item ECC-enabled GnuPG per RFC6637~\cite{rfc6637} \url{https://code.google.com/p/gnupg-ecc}
+  \item TLS Security (Survey + Lucky13 + RC4 Attack) by Kenny Paterson \url{https://www.cosic.esat.kuleuven.be/ecc2013/files/kenny.pdf}
+  \item Ensuring High-Quality Randomness in Cryptographic Key Generation \url{http://arxiv.org/abs/1309.7366v1}
+  \item Wikipedia: Ciphertext Stealing \url{http://en.wikipedia.org/wiki/Ciphertext_stealing}
+  \item Wikipedia: Malleability (Cryptography) \url{http://en.wikipedia.org/wiki/Malleability_(cryptography)}
+  \item Ritter's Crypto Glossary and Dictionary of Technical Cryptography \url{http://www.ciphersbyritter.com/GLOSSARY.HTM}
 \end{itemize}
index 3d7580f..6637008 100644 (file)
@@ -3,15 +3,17 @@
 
 %% ---------------------------------------------------------------------- 
 \subsection{Oracle}
-%\subsubsection{Tested with Version}
+\subsubsection{Tested with Versions}
 \todo{not tested yet}
 
+
 \subsubsection{References}
 \begin{itemize}
   \item Technical safety requirements by \emph{Deutsche Telekom AG} (German). Please read section 17.12 or pages 129 and following (Req 396 and Req 397) about SSL and ciphersuites \url{http://www.telekom.com/static/-/155996/7/technische-sicherheitsanforderungen-si}
 \end{itemize}
 
 
+
 %% ---------------------------------------------------------------------- 
 %%\subsection{SQL Server}
 %%\todo{write this}
@@ -20,7 +22,9 @@
 
 %% ---------------------------------------------------------------------- 
 \subsection{MySQL}
-\subsubsection{Tested with Version}
+
+
+\subsubsection{Tested with Versions}
 \begin{itemize}
   \item Debian Wheezy and MySQL 5.5
 \end{itemize}
@@ -34,9 +38,10 @@ ssl
 ssl-ca=/etc/mysql/ssl/ca-cert.pem
 ssl-cert=/etc/mysql/ssl/server-cert.pem
 ssl-key=/etc/mysql/ssl/server-key.pem
-ssl-cipher=@@@CIPHERSTRINGB@@@
+ssl-cipher=%*\cipherStringB*)
 \end{lstlisting}
 
+
 %\subsubsection{Additional settings}
 
 
@@ -71,7 +76,7 @@ show variables like '%ssl%';
 
 \subsubsection{Settings}
 \paragraph*{ssl\_cipherspecs}
-In the link above the whole SSL-configuration is described in-depth. The following command shows only how to set the recommended ciphersuites:
+In the link above the whole SSL-configuration is described in-depth. The following command shows only how to set the recommended ciphersuites.
 \begin{lstlisting}
 # recommended and supported ciphersuites 
 
@@ -98,17 +103,18 @@ TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
 
 
 %% ---------------------------------------------------------------------- 
+
 \subsection{PostgreSQL}
 \subsubsection{Tested with Versions}
 \begin{itemize}
-  \item Debian 7.0 and PostgreSQL 9.1
+  \item Debian Wheezy and PostgreSQL 9.1
   \item Linux Mint 14 nadia / Ubuntu 12.10 quantal with PostgreSQL 9.1+136 and OpenSSL 1.0.1c
 \end{itemize}
 
 
 \subsubsection{References}
 \begin{itemize}
-  \item It's recommended to read {\small \url{http://www.postgresql.org/docs/9.1/interactive/runtime-config-connection.html\#RUNTIME-CONFIG-CONNECTION-SECURITY}} (please edit the version with your preferred one).
+  \item It's recommended to read \url{http://www.postgresql.org/docs/9.1/interactive/runtime-config-connection.html\#RUNTIME-CONFIG-CONNECTION-SECURITY} (please edit the version with your preferred one).
   \item PostgreSQL Documentation on \emph{Secure TCP/IP Connections with SSL}: \url{http://www.postgresql.org/docs/9.1/static/ssl-tcp.html}
   \item PostgreSQL Documentation on \emph{host-based authentication}: \url{http://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html}
 \end{itemize}
@@ -125,12 +131,11 @@ ssl_cert_file = '/your/path/server.crt'
 ssl_ca_file = '/your/path/root.crt'
 \end{lstlisting}
 
-
-\paragraph*{postgresql.conf}\mbox{}\\
+\paragraphDiamond{postgresql.conf}
 \begin{lstlisting}
 #>=8.3
 ssl = on 
-ssl_ciphers = '@@@CIPHERSTRINGB@@@'
+ssl_ciphers = '%*\cipherStringB*)'
 \end{lstlisting}
 
 
index a3427ad..93d19b9 100644 (file)
@@ -6,10 +6,10 @@ Research on SHA-1 conducted back in 2005\footnote{\url{https://www.schneier.com/
 
 When using PGP, there are a couple of things to take care of:
 \begin{itemize}
-\item keylengths (see section \ref{section:keylengths})
-\item randomness (see section \ref{section:RNGs})
-\item preference of symmetric encryption algorithm (see section \ref{section:CipherSuites})
-\item preference of hash function (see section \ref{section:CipherSuites})
+  \item keylengths (see section \ref{section:keylengths})
+  \item randomness (see section \ref{section:RNGs})
+  \item preference of symmetric encryption algorithm (see section \ref{section:CipherSuites})
+  \item preference of hash function (see section \ref{section:CipherSuites})
 \end{itemize}
 
 Properly dealing with key material, passphrases and the web-of-trust is outside of the scope of this document. The GnuPG website\footnote{\url{http://www.gnupg.org/}} has a good tutorial on PGP.
index 0c38f58..3b0add8 100644 (file)
@@ -1,7 +1,4 @@
-%%\subsection{Instant Messaging Systems}
-%\subsubsection{XMPP / Jabber}
-
-
+%%---------------------------------------------------------------------- 
 \subsection{General server configuration recommendations}
 
 For servers, we mostly recommend to apply what's proposed by the \emph{Peter's manifesto}\footnote{\url{https://github.com/stpeter/manifesto}}.
@@ -15,15 +12,13 @@ In short:
 
 The last point being out-of-scope for this section, we will only cover the first two points.
 
-
-%%---------------------------------------------------------------------- 
 \subsection{ejabberd}
-\subsubsection{Tested with Version}
+
+\subsubsection{Tested with Versions}
 \begin{itemize}
   \item Debian Wheezy 2.1.10-4+deb7u1
 \end{itemize}
 
-
 \subsubsection{Settings}
 ejabberd is one of the popular Jabber server. In order to be compliant
 with the manifesto, you should adapt your configuration\footnote{\url{http://www.process-one.net/docs/ejabberd/guide_en.html}}:
@@ -49,7 +44,6 @@ with the manifesto, you should adapt your configuration\footnote{\url{http://www
 {s2s_certfile, "/etc/ejabberd/ejabberd.pem"}.
 \end{lstlisting}
 
-
 \subsubsection{Additional settings}
 Older Versions of ejabberd ($ < $ 2.0.0) need to be patched\footnote{\url{http://hyperstruct.net/2007/06/20/installing-the-startcom-ssl-certificate-in-ejabberd/}} to be able to parse all of the certificates in the CA chain.
 
@@ -60,7 +54,9 @@ Newer versions of ejabberd now support specifying the cipher string in the confi
 
 
 \subsubsection{How to test}
-\url{https://xmpp.net} is a practical website to test Jabber Server configurations.
+\begin{itemize}
+  \item \url{https://xmpp.net} is a practical website to test Jabber server configurations.
+\end{itemize}
 
 
 %%---------------------------------------------------------------------- 
@@ -69,21 +65,20 @@ Newer versions of ejabberd now support specifying the cipher string in the confi
 The OTR protocol works on top of the Jabber protocol\footnote{\url{https://otr.cypherpunks.ca/Protocol-v3-4.0.0.html}}.  
 It adds to popular chat clients (Adium, Pidgin...) the following properties for encrypted chats:
 \begin{itemize}
-    \item Authentication
-    \item Integrity
-    \item Confidentiality
-    \item Forward secrecy
+  \item Authentication
+  \item Integrity
+  \item Confidentiality
+  \item Forward secrecy
 \end{itemize}
 
 It basically uses Diffie-Hellman, AES and SHA1. Communicating over an insecure instant messaging network, OTR can be used for end to end encryption.
 
-There are no specific configurations required but the protocol itself is worth being mentioned.
+There are no specific configurations required but the protocol itself is worth to be mentioned.
 
 
 %%---------------------------------------------------------------------- 
 \subsection{Charybdis}
-
-There are numerous implementations of IRC servers.  In this section, we choose \emph{Charybdis} which serves as basis for \emph{ircd-seven}\footnote{\url{https://dev.freenode.net/redmine/projects/ircd-seven}}, developed and used by freenode. Freenode is actually the biggest IRC network\footnote{\url{http://irc.netsplit.de/networks/top10.php}}.  \emph{Charybdis} is part of the \emph{Debian} \& \emph{Ubuntu} distributions.
+There are numerous implementations of IRC servers.  In this section, we choose \emph{Charybdis} which serves as basis for \emph{ircd-seven}\footnote{\url{https://dev.freenode.net/redmine/projects/ircd-seven}}, developed and used by freenode. Freenode is actually the biggest IRC network\footnote{\url{http://irc.netsplit.de/networks/top10.php}}. \emph{Charybdis} is part of the \emph{Debian} \& \emph{Ubuntu} distributions.
 
 \begin{lstlisting}
 /* Extensions */
@@ -122,6 +117,3 @@ the server meaning that if compromised, communication could be compromised.
 
 The protocol is not really popular anymore.
 
-
-
-
index 5efbf47..1fc742f 100644 (file)
-%%\subsection{Mail Servers}
-
 This section documents the most common mail (SMTP) and IMAPs/POPs servers. Another option to secure IMAPs/POPs servers is to place them behind an stunnel server. 
 
 
-%% ---------------------------------------------------------------------- 
-
+%% ----------------------------------------------------------------------
 \subsection{SMTP in general}
 \label{subsection:smtp_general}
-
-SMTP usually makes use of opportunistic TLS. This means that an MTA will accept TLS connections when asked for it during handshake but will not require it. One should always support incoming opportunistic TLS and always try TLS handshake outgoing.\\
+SMTP usually makes use of opportunistic TLS. This means that an MTA will accept TLS connections when asked for it during handshake but will not require it. One should always support incoming opportunistic TLS and always try TLS handshake outgoing.
 
 Furthermore a mailserver can operate in three modes:
 \begin{itemize}
-\item As MSA (Mail Submission Agent) your mailserver receives mail from your clients MUAs (Mail User Agent).
-\item As receiving MTA (Mail Transmission Agent, MX)
-\item As sending MTA (SMTP client)
+  \item As MSA (Mail Submission Agent) your mailserver receives mail from your clients MUAs (Mail User Agent).
+  \item As receiving MTA (Mail Transmission Agent, MX)
+  \item As sending MTA (SMTP client)
 \end{itemize}
-\mbox{}\\
 We recommend the following basic setup for all modes:
 \begin{itemize}
-\item correctly setup MX, A and PTR RRs without using CNAMEs at all.
-\item enable encryption (opportunistic TLS)
-\item do not use self signed certificates
+  \item correctly setup MX, A and PTR RRs without using CNAMEs at all.
+  \item enable encryption (opportunistic TLS)
+  \item do not use self signed certificates
 \end{itemize}
 
 For SMTP client mode we additionally recommend:
 \begin{itemize}
-\item the hostname used as HELO must match the PTR RR
-\item setup a client certificate (most server certificates are client certificates as well)
-\item either the common name or at least an alternate subject name of your certificate must match the PTR RR
-\item do not modify the cipher suite for client mode
+  \item the hostname used as HELO must match the PTR RR
+  \item setup a client certificate (most server certificates are client certificates as well)
+  \item either the common name or at least an alternate subject name of your certificate must match the PTR RR
+  \item do not modify the cipher suite for client mode
 \end{itemize}
 
 For MSA operation we recommend:
 \begin{itemize}
-\item listen on submission port 587
-\item enforce SMTP AUTH even for local networks
-\item do not allow SMTP AUTH on unencrypted connections
-\item optionally use the recommended cipher suites if (and only if) all your connecting MUAs support them
+  \item listen on submission port 587
+  \item enforce SMTP AUTH even for local networks
+  \item do not allow SMTP AUTH on unencrypted connections
+  \item optionally use the recommended cipher suites if (and only if) all your connecting MUAs support them
 \end{itemize}
 
 
-
 % Note that (with the exception of MSA mode), it might be better to allow any cipher suite -- since any encryption is better than no encryption when it comes to opportunistic TLS.
 
 We strongly recommend to allow all cipher suites for anything but MSA
 mode, because the alternative is plain text transmission.
 
-%% ---------------------------------------------------------------------- 
-
+%% ----------------------------------------------------------------------
 \subsection{Dovecot}
 
 
 \subsubsection{Tested with Version} 
 \begin{itemize}
-\item Dovecot 2.1.17, Debian Wheezy (without ``ssl\_prefer\_server\_ciphers'' setting)
-\item Dovecot 2.2
-\item 2.0.19apple1 on OS X Server 10.8.5 (without ``ssl\_prefer\_server\_ciphers'' setting)
+  \item Dovecot 2.1.17, Debian Wheezy (without ``ssl\_prefer\_server\_ciphers'' setting)
+  \item Dovecot 2.2
+  \item 2.0.19apple1 on OS X Server 10.8.5 (without ``ssl\_prefer\_server\_ciphers'' setting)
 \end{itemize}
 
 \subsubsection{Settings}
 % Example: http://dovecot.org/list/dovecot/2013-October/092999.html
 
 \begin{lstlisting}
-  ssl_cipher_list = '%*\cipherStringB*)'
-  ssl_prefer_server_ciphers = yes
+ssl_cipher_list = '%*\cipherStringB*)'
+ssl_prefer_server_ciphers = yes
 \end{lstlisting}
 
 \subsubsection{Additional info}
-
 Dovecot 2.0, 2.1: Almost as good as dovecot 2.2. Dovecot does not ignore unknown configuration parameters. Does not support
 ssl\_prefer\_server\_ciphers
 
 \subsubsection{Limitations}
-
 Dovecot currently does not support disabling TLS compression. Furthermore, DH
 parameters greater than 1024bit are not supported. The most recent version
 2.2.7 of Dovecot implements configurable DH parameter length
 \footnote{\url{http://hg.dovecot.org/dovecot-2.2/rev/43ab5abeb8f0}}.
 
-%\item[Justification for special settings (if needed):] \mbox{}
+%\subsubsection{Justification for special settings (if needed)}
 
 % in case you have the need for further justifications why you chose this and that setting or if the settings do not fit into the standard Variant A or Variant B schema, please document this here
 
-\subsubsection{References} \url{http://wiki2.dovecot.org/SSL}
+\subsubsection{References}
+\begin{itemize}
+  \item \url{http://wiki2.dovecot.org/SSL}
+\end{itemize}
 
 % add any further references or best practice documents here
 
 \subsubsection{How to test}
 % describe here or point the admin to tools (can be a simple footnote or \ref{} to  the tools section) which help the admin to test his settings.
 \begin{lstlisting}
- openssl s_client -crlf -connect SERVER.TLD:993
+openssl s_client -crlf -connect SERVER.TLD:993
 \end{lstlisting}
 
 
-%% ---------------------------------------------------------------------- 
-
+%% ----------------------------------------------------------------------
 \subsection{cyrus-imapd}
-
-\subsubsection{Tested with Version}
-2.4.17
+\subsubsection{Tested with Versions}
+\begin{itemize}
+  \item 2.4.17
+\end{itemize}
 
 \subsubsection{Settings}
-\paragraph*{imapd.conf}\mbox{}\\
-
+\paragraphDiamond{imapd.conf}
 To activate SSL/TLS configure your certificate with
 \begin{lstlisting}
-  tls_cert_file: .../cert.pem
-  tls_key_file: .../cert.key
+tls_cert_file: .../cert.pem
+tls_key_file: .../cert.key
 \end{lstlisting}
 
-Do not forget to add necessary intermediate certificates to the .pem file.\\
+Do not forget to add necessary intermediate certificates to the .pem file.
 
-Limiting the ciphers provided may force (especially older) clients to connect without encryption at all! Sticking to the defaults is recommended.\\
+Limiting the ciphers provided may force (especially older) clients to connect without encryption at all! Sticking to the defaults is recommended.
 
 If you still want to force strong encryption use
 \begin{lstlisting}
-  tls_cipher_list: %*\cipherStringB*)
+tls_cipher_list: %*\cipherStringB*)
 \end{lstlisting}
 
-cyrus-imapd loads hardcoded 1024 bit DH parameters using get\_rfc2409\_prime\_1024() by default. If you want to load your own DH parameters add them PEM encoded to the certificate file given in tls\_cert\_file. Do not forget to re-add them after updating your certificate.\\
+cyrus-imapd loads hardcoded 1024 bit DH parameters using get\_rfc2409\_prime\_1024() by default. If you want to load your own DH parameters add them PEM encoded to the certificate file given in tls\_cert\_file. Do not forget to re-add them after updating your certificate.
 
 To prevent unencrypted connections on the STARTTLS ports you can set
 \begin{lstlisting}
-  allowplaintext: 0
+allowplaintext: 0
 \end{lstlisting}
-This way MUAs can only authenticate after STARTTLS if you only provide plaintext and SASL PLAIN login methods. Therefore providing CRAM-MD5 or DIGEST-MD5 methods is not recommended.\\
+This way MUAs can only authenticate after STARTTLS if you only provide plaintext and SASL PLAIN login methods. Therefore providing CRAM-MD5 or DIGEST-MD5 methods is not recommended.
 
-\paragraph*{cyrus.conf}\mbox{}\\
+\paragraphDiamond{cyrus.conf}
 
 To support POP3/IMAP on ports 110/143 with STARTTLS add
 \begin{lstlisting}
-  imap         cmd="imapd" listen="imap" prefork=3
-  pop3         cmd="pop3d" listen="pop3" prefork=1
+imap         cmd="imapd" listen="imap" prefork=3
+pop3         cmd="pop3d" listen="pop3" prefork=1
 \end{lstlisting}
-to the SERVICES section.\\
+to the SERVICES section.
 
 To support POP3S/IMAPS on ports 995/993 add
 \begin{lstlisting}
-  imaps        cmd="imapd -s" listen="imaps" prefork=3
-  pop3s        cmd="pop3d -s" listen="pop3s" prefork=1
+imaps        cmd="imapd -s" listen="imaps" prefork=3
+pop3s        cmd="pop3d -s" listen="pop3s" prefork=1
 \end{lstlisting}
 
 
 \subsubsection{Limitations}
 
-cyrus-imapd currently (2.4.17, trunk) does not support elliptic curve cryptography. Hence, ECDHE will not work even if defined in your cipher list.\\
+cyrus-imapd currently (2.4.17, trunk) does not support elliptic curve cryptography. Hence, ECDHE will not work even if defined in your cipher list.
 
-Currently there is no way to prefer server ciphers or to disable compression.\\
+Currently there is no way to prefer server ciphers or to disable compression.
 
 There is a working patch for all three features:
-\url{https://bugzilla.cyrusimap.org/show_bug.cgi?id=3823}\\
+\url{https://bugzilla.cyrusimap.org/show_bug.cgi?id=3823}
 
 \subsubsection{How to test}
 \begin{lstlisting}
-  openssl s_client -crlf -connect SERVER.TLD:993
+openssl s_client -crlf -connect SERVER.TLD:993
 \end{lstlisting}
 
-
-
 % XXX config von Adi?
 % sslVersion = TLSv1
 % ciphers = EDH+CAMELLIA256:EDH+aRSA:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:-AES128:!CAMELLIA128:!ECDSA:AES256-SHA:EDH+AES128;
 % options = CIPHER_SERVER_PREFERENCE
 % TIMEOUTclose = 1
 
+
+%% ----------------------------------------------------------------------
 \subsection{Postfix}
 
-\subsubsection{Tested with Version}
+\subsubsection{Tested with Versions}
 \begin{itemize}
-\item Postfix 2.9.6, Debian Wheezy
+  \item Postfix 2.9.6, Debian Wheezy
 \end{itemize}
 
+
 \subsubsection{Settings}
 
 %% I (cm) consider the generation of own DH parameters to be voodoo until
@@ -204,35 +198,33 @@ There is a working patch for all three features:
 %%   smtpd_tls_dh1024_param_file = /etc/postfix/dh_param_1024.pem
 %% \end{lstlisting}
 
-\paragraph*{MX and SMTP client configuration}\mbox{}\\
-
+\paragraphDiamond{MX and SMTP client configuration}
 As discussed in section \ref{subsection:smtp_general}, because of opportunistic encryption we do not
 restrict the list of ciphers. There are still some steps needed to
 enable TLS, all in \verb|main.cf|:
 
 \begin{lstlisting}
-  smtpd_tls_cert_file = /etc/postfix/server.pem
-  smtpd_tls_key_file = /etc/postfix/server.key
-  # use 0 for Postfix >= 2.9, and 1 for earlier versions
-  smtpd_tls_loglevel = 0
-  # enable opportunistic TLS support in the SMTP server and client
-  smtpd_tls_security_level = may
-  smtp_tls_security_level = may
-  # if you have authentication enabled, only offer it after STARTTLS
-  smtpd_tls_auth_only = yes
-  tls_ssl_options = NO_COMPRESSION
+smtpd_tls_cert_file = /etc/postfix/server.pem
+smtpd_tls_key_file = /etc/postfix/server.key
+# use 0 for Postfix >= 2.9, and 1 for earlier versions
+smtpd_tls_loglevel = 0
+# enable opportunistic TLS support in the SMTP server and client
+smtpd_tls_security_level = may
+smtp_tls_security_level = may
+# if you have authentication enabled, only offer it after STARTTLS
+smtpd_tls_auth_only = yes
+tls_ssl_options = NO_COMPRESSION
 \end{lstlisting}
 
-\paragraph*{MSA}\mbox{}\\
-
+\paragraphDiamond{MSA}
 For the MSA \verb|smtpd| process, we first define the ciphers that are
 acceptable for the ``mandatory'' security level, again in
 \verb|main.cf|:
 
 \begin{lstlisting}
-  smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
-  smtpd_tls_mandatory_ciphers=high
-  tls_high_cipherlist=%*\cipherStringB*)
+smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
+smtpd_tls_mandatory_ciphers=high
+tls_high_cipherlist=%*\cipherStringB*)
 \end{lstlisting}
 
 Then, we configure the MSA smtpd in \verb|master.cf| with two
@@ -245,11 +237,10 @@ additional options that are only used for this instance of smtpd:
 
 For those users who want to use ECC key exchange, it is possible to specify this via:
 \begin{lstlisting}
-  smtpd_tls_eecdh_grade = ultra
+smtpd_tls_eecdh_grade = ultra
 \end{lstlisting}
 
 \subsubsection{Limitations}
-
 tls\_ssl\_options is supported from Postfix 2.11 onwards. You can
 leave the statement in the configuration for older versions, it will
 be ignored.
@@ -258,12 +249,10 @@ tls\_preempt\_cipherlist is supported from Postfix 2.8 onwards. Again,
 you can leave the statement in for older versions.
 
 \subsubsection{References}
-
 Refer to \url{http://www.postfix.org/TLS_README.html} for an in-depth
 discussion.
 
 \subsubsection{Additional settings}
-
 Postfix has two sets of built-in DH parameters that can be overridden
 with the \verb|smtpd_tls_dh512_param_file|
 and \verb|smtpd_tls_dh1024_param_file| options. The ``dh512''
@@ -275,12 +264,11 @@ could use stronger parameter sets; it should be possible to e.g. use the
 IKE Group14 parameters (see section \ref{section:DH}) without much
 interoperability risk, but we have not tested this yet.
 
-% \item[Justification for special settings (if needed):]
+% \subsubsection{Justification for special settings (if needed)}
 % no special settings
 
 
 \subsubsection{How to test}
-
 You can check the effect of the settings with the following command:
 \begin{lstlisting}
 $ zegrep "TLS connection established from.*with cipher" /var/log/mail.log | awk '{printf("%s %s %s %s\n", $12, $13, $14, $15)}' | sort | uniq -c | sort -n
@@ -292,52 +280,50 @@ $ zegrep "TLS connection established from.*with cipher" /var/log/mail.log | awk
 \end{lstlisting}
 
 \begin{lstlisting}
- openssl s_client -starttls smtp -crlf -connect SERVER.TLD:25
+openssl s_client -starttls smtp -crlf -connect SERVER.TLD:25
 \end{lstlisting}
 
-%% ---------------------------------------------------------------------- 
+%% ----------------------------------------------------------------------
 
 \subsection{Exim (based on 4.82)}
-
 It is highly recommended to read
 \url{http://exim.org/exim-html-current/doc/html/spec_html/ch-encrypted_smtp_connections_using_tlsssl.html}
 first.
 
-\paragraph*{MSA mode (submission)}\mbox{}\\
-
+\paragraphDiamond{MSA mode (submission)}
 In the main config section of Exim add:
 
 \begin{lstlisting}
-  tls_certificate = ..../cert.pem
-  tls_privatekey = ..../cert.key
+tls_certificate = ..../cert.pem
+tls_privatekey = ..../cert.key
 \end{lstlisting}
-don't forget to add intermediate certificates to the .pem file if needed.\\
-\\
+don't forget to add intermediate certificates to the .pem file if needed.
+
 Tell Exim to advertise STARTTLS in the EHLO answer to everyone:
 \begin{lstlisting}
-  tls_advertise_hosts = *
+tls_advertise_hosts = *
 \end{lstlisting}
 
 If you want to support legacy SMTPS on port 465, and STARTTLS on smtp(25)/submission(587) ports set
 \begin{lstlisting}
-  daemon_smtp_ports = smtp : smtps : submission
-  tls_on_connect_ports = 465
+daemon_smtp_ports = smtp : smtps : submission
+tls_on_connect_ports = 465
 \end{lstlisting}
-\mbox{}\\
+
 It is highly recommended to limit SMTP AUTH to SSL connections only. To do so add
 \begin{lstlisting}
-  server_advertise_condition = ${if eq{$tls_cipher}{}{no}{yes}}
+server_advertise_condition = ${if eq{$tls_cipher}{}{no}{yes}}
 \end{lstlisting}
-to every authenticator defined.\\
+to every authenticator defined.
 
 Add the following rules on top of your acl\_smtp\_mail:
 \begin{lstlisting}
-  warn    hosts           = *
-          control         = submission/sender_retain
+warn    hosts           = *
+        control         = submission/sender_retain
 \end{lstlisting}
-This switches Exim to submission mode and allows addition of missing ``Message-ID'' and ``Date'' headers.\\
+This switches Exim to submission mode and allows addition of missing ``Message-ID'' and ``Date'' headers.
 
-It is not advisable to restrict the default cipher list for MSA mode if you don't know all connecting MUAs. If you still want to define one please consult the Exim documentation or ask on the exim-users mailinglist.\\
+It is not advisable to restrict the default cipher list for MSA mode if you don't know all connecting MUAs. If you still want to define one please consult the Exim documentation or ask on the exim-users mailinglist.
 % Exim maintainers do not recommend to change default ciphers
 % I think we shouldn't, too
 %use:
@@ -347,33 +333,32 @@ It is not advisable to restrict the default cipher list for MSA mode if you don'
 
 The cipher used is written to the logfiles by default. You may want to add
 \begin{lstlisting}
-  log_selector = <whatever your log_selector already contains> \
-   +tls_certificate_verified +tls_peerdn +tls_sni
+log_selector = <whatever your log_selector already contains> +tls_certificate_verified +tls_peerdn +tls_sni
 \end{lstlisting}
 to get even more TLS information logged.
 
 
-\paragraph*{server mode (incoming)}\mbox{}\\
+\paragraphDiamond{server mode (incoming)}
 
 In the main config section of Exim add:
 
 \begin{lstlisting}
-  tls_certificate = ..../cert.pem
-  tls_privatekey = ..../cert.key
+tls_certificate = ..../cert.pem
+tls_privatekey = ..../cert.key
 \end{lstlisting}
-don't forget to add intermediate certificates to the .pem file if needed.\\
-\\
+don't forget to add intermediate certificates to the .pem file if needed.
+
 Tell Exim to advertise STARTTLS in the EHLO answer to everyone:
 \begin{lstlisting}
-  tls_advertise_hosts = *
+tls_advertise_hosts = *
 \end{lstlisting}
 
 Listen on smtp(25) port only
 \begin{lstlisting}
-  daemon_smtp_ports = smtp
+daemon_smtp_ports = smtp
 \end{lstlisting}
 
-It is not advisable to restrict the default cipher list for opportunistic encryption as used by SMTP. Do not use cipher lists recommended for HTTPS! If you still want to define one please consult the Exim documentation or ask on the exim-users mailinglist.\\
+It is not advisable to restrict the default cipher list for opportunistic encryption as used by SMTP. Do not use cipher lists recommended for HTTPS! If you still want to define one please consult the Exim documentation or ask on the exim-users mailinglist.
 % Exim maintainers do not recommend to change default ciphers
 % We shouldn't, too
 %use:
@@ -383,34 +368,32 @@ It is not advisable to restrict the default cipher list for opportunistic encryp
 
 If you want to request and verify client certificates from sending hosts set
 \begin{lstlisting}
-  tls_verify_certificates = /etc/pki/tls/certs/ca-bundle.crt
-  tls_try_verify_hosts = *
+tls_verify_certificates = /etc/pki/tls/certs/ca-bundle.crt
+tls_try_verify_hosts = *
 \end{lstlisting}
 
 tls\_try\_verify\_hosts only reports the result to your logfile. If you want to disconnect such clients you have to use
 \begin{lstlisting}
-  tls_verify_hosts = *
+tls_verify_hosts = *
 \end{lstlisting}
 
 The cipher used is written to the logfiles by default. You may want to add
 \begin{lstlisting}
-  log_selector = <whatever your log_selector already contains> \
-   +tls_certificate_verified +tls_peerdn +tls_sni
+log_selector = <whatever your log_selector already contains> +tls_certificate_verified +tls_peerdn +tls_sni
 \end{lstlisting}
 to get even more TLS information logged.
 
-\paragraph*{client mode (outgoing)}\mbox{}\\
-
+\paragraphDiamond{client mode (outgoing)}
 Exim uses opportunistic encryption in the SMTP transport by default.
 
 Client mode settings have to be done in the configuration section of the smtp transport (driver = smtp).
 
 If you want to use a client certificate (most server certificates can be used as client certificate, too) set
 \begin{lstlisting}
-  tls_certificate   = .../cert.pem
-  tls_privatekey    = .../cert.key
+tls_certificate   = .../cert.pem
+tls_privatekey    = .../cert.key
 \end{lstlisting}
-This is recommended for MTA-MTA traffic.\\
+This is recommended for MTA-MTA traffic.
 
 %If you want to limit used ciphers set
 %\begin{lstlisting}
@@ -419,40 +402,37 @@ This is recommended for MTA-MTA traffic.\\
 % Exim Maintainers do not recommend ciphers. We shouldn't do so, too.
 Do not limit ciphers without a very good reason. In the worst case you end up without encryption at all instead of some weak encryption. Please consult the Exim documentation if you really need to define ciphers.
 
-\paragraph*{OpenSSL}\mbox{}\\
+\paragraphDiamond{OpenSSL}
 Exim already disables SSLv2 by default. We recommend to add
 \begin{lstlisting}
-  openssl_options = +all +no_sslv2 +no_compression +cipher_server_preference
+openssl_options = +all +no_sslv2 +no_compression +cipher_server_preference
 \end{lstlisting}
-to the main configuration.\\
-Note: +all is misleading here since OpenSSL only activates the most common workarounds. But that's how SSL\_OP\_ALL is defined.\\
-
-You do not need to set dh\_parameters. Exim with OpenSSL by default uses parameter initialization with the "2048-bit MODP Group with 224-bit Prime Order Subgroup" defined in section 2.2 of RFC 5114~\cite{rfc5114} (ike23).
-If you want to set your own DH parameters please read the TLS documentation of exim.\\
+to the main configuration.
 
+Note: +all is misleading here since OpenSSL only activates the most common workarounds. But that's how SSL\_OP\_ALL is defined.
 
+You do not need to set dh\_parameters. Exim with OpenSSL by default uses parameter initialization with the "2048-bit MODP Group with 224-bit Prime Order Subgroup" defined in section 2.2 of RFC 5114~\cite{rfc5114} (ike23).
+If you want to set your own DH parameters please read the TLS documentation of exim.
 
-\paragraph*{GnuTLS}\mbox{}\\
 
+\paragraphDiamond{GnuTLS}
 GnuTLS is different in only some respects to OpenSSL:
 \begin{itemize}
-\item tls\_require\_ciphers needs a GnuTLS priority string instead of a cipher list. It is recommended to use the defaults by not defining this option. It highly depends on the version of GnuTLS used. Therefore it is not advisable to change the defaults.
-\item There is no option like openssl\_options
+  \item tls\_require\_ciphers needs a GnuTLS priority string instead of a cipher list. It is recommended to use the defaults by not defining this option. It highly depends on the version of GnuTLS used. Therefore it is not advisable to change the defaults.
+  \item There is no option like openssl\_options
 \end{itemize}
 
-\paragraph*{Exim string expansion}\mbox{}\\
-
+\paragraphDiamond{Exim string expansion}
 Note that most of the options accept expansion strings. This way you can e.g. set cipher lists or STARTTLS advertisement conditionally. Please follow the link to the official Exim documentation to get more information.
 
-\paragraph*{Limitations}\mbox{}\\
-
+\paragraphDiamond{Limitations}
 Exim currently (4.82) does not support elliptic curves with OpenSSL. This means that ECDHE is not used even if defined in your cipher list.
-There already is a working patch to provide support:\\
+There already is a working patch to provide support:
 \url{http://bugs.exim.org/show_bug.cgi?id=1397}
 
-\paragraph*{How to test}\mbox{}\\
+\paragraphDiamond{How to test}
 \begin{lstlisting}
- openssl s_client -starttls smtp -crlf -connect SERVER.TLD:25
+openssl s_client -starttls smtp -crlf -connect SERVER.TLD:25
 \end{lstlisting}
 
 
@@ -461,5 +441,3 @@ There already is a working patch to provide support:\\
 
 %\todo{FIXME: write this section}
 
-
-
index 4b82efb..e00e176 100644 (file)
@@ -2,27 +2,27 @@
 
 Within enterprise networks and corporations with increased levels of paranoia or at least some defined security requirements it is common \textbf{not} to allow direct connections to the public internet.
 
-For this reason proxy solutions are deployed on corporate networks to intercept and scan the traffic for potential threats within sessions.\\
+For this reason proxy solutions are deployed on corporate networks to intercept and scan the traffic for potential threats within sessions.
 
 For encrypted traffic there are four options:
 
 \begin{itemize}
-\item Block the connection because it cannot be scanned for threats.
-\item Bypass the threat-mitigation and pass the encrypted session to the client, which results in a situation where malicious content is transferred directly to the client without visibility to the security system.
-\item Intercept (i.e. terminate) the session at the proxy, scan there and re-encrypt the session towards the client (effectively MITM).
-\item Deploy special Certificate Authorities to enable Deep Packet Inspection on the wire.
+  \item Block the connection because it cannot be scanned for threats.
+  \item Bypass the threat-mitigation and pass the encrypted session to the client, which results in a situation where malicious content is transferred directly to the client without visibility to the security system.
+  \item Intercept (i.e. terminate) the session at the proxy, scan there and re-encrypt the session towards the client (effectively MITM).
+  \item Deploy special Certificate Authorities to enable Deep Packet Inspection on the wire.
 \end{itemize}
 
 While the latest solution might be the most "up to date", it arises a new front in the context of this paper, because the most secure part of a client's connection could only be within the corporate network, if the proxy-server handles the connection to the destination server in an insecure manner.
 
 Conclusion: Don't forget to check your proxy solutions SSL-capabilities. Also do so for your reverse proxies!
 
-\subsubsection{squid}
-
-
+%% ---------------------------------------------------------------------- 
+\subsection{squid}
 As of squid-3.2.7 (01 Feb 2013) there is support for the OpenSSL NO\_Compression option within squid config (CRIME attack) and if you combine that in the config file, with an enforcement of the server cipher preferences (BEAST Attack) you are safe.
 
-\paragraph*{squid.conf}\mbox{}\\
+
+\paragraphDiamond{squid.conf}
 
 \todo{UNTESTED!}
 \begin{lstlisting}
@@ -30,9 +30,7 @@ options=NO_SSLv2,NO_TLSv1,NO_Compression,CIPHER_SERVER_PREFERENCE
 cipher=%*\cipherStringB*)
 \end{lstlisting}
 
-
-
-\paragraph*{squid.conf}\mbox{}\\
+\paragraphDiamond{squid.conf}
 
 %% http://forum.pfsense.org/index.php?topic=63262.0
 
@@ -69,15 +67,17 @@ For squid Versions before 3.2.7 use this patch against a vanilla source-tree:
 \end{lstlisting}
 
 
-
+%% ---------------------------------------------------------------------- 
 \subsubsection{Bluecoat}
 %% https://kb.bluecoat.com/index?page=content&id=KB5549
-\begin{description}
-\item[Tested with Version:] SGOS 6.5.x
+\subsubsection{Tested with Versions}
+\begin{itemize}
+  \item SGOS 6.5.x
+\end{itemize}
 
 BlueCoat Proxy SG Appliances can be used as forward and reverse proxies. The reverse proxy feature is rather under-developed, and while it is possible and supported, there only seems to be limited use of this feature "in the wild" - nonetheless there are a few cipher suites to choose from, when enabling SSL features.
 
-\item[Only allow TLS 1.0,1.1 and 1.2 protocols:] \mbox{}
+\paragraph{Only allow TLS 1.0,1.1 and 1.2 protocols:} \mbox{}
 
 \begin{lstlisting}
 $conf t
@@ -87,7 +87,7 @@ $(config device-profile default)protocol tlsv1 tlsv1.1 tlsv1.2
   ok
 \end{lstlisting}
 
-\item[Select your accepted cipher-suites:] \mbox{}
+\paragraph*{Select your accepted cipher-suites:} \mbox{}
 
 \begin{lstlisting}
 $conf t
@@ -119,17 +119,17 @@ In your local policy file add the following section:
 
 Disabling protocols and ciphers in a forward proxy environment could lead to unexpected results on certain (misconfigured?) webservers (i.e. ones accepting only SSLv2/3 protocol connections)
 
-\end{description} 
 
-
-
-
-\subsubsection{Pound}
+%% ---------------------------------------------------------------------- 
+\subsection{Pound}
 % See http://www.apsis.ch/pound
 % See https://help.ubuntu.com/community/Pound
 
-Pound 2.6
-       
+\subsubsection{Tested with Versions}
+\begin{itemize}
+  \item Pound 2.6
+\end{itemize}
+
 \begin{lstlisting}
 # HTTP Listener, redirects to HTTPS
 ListenHTTP
@@ -155,3 +155,4 @@ ListenHTTPS
     End
 End
 \end{lstlisting}
+
index 19193a6..7eb7209 100644 (file)
@@ -1,34 +1,34 @@
 %%---------------------------------------------------------------------- 
 \subsection{OpenSSH}
-\subsubsection{Tested with Version} OpenSSH 6.4 (Debian jessie)
+\subsubsection{Tested with Version} OpenSSH 6.4 (Debian Jessie)
 \subsubsection{Settings}
 \paragraph*{sshd\_config}
-\begin{lstlisting}
-       # ...
-
-       Protocol 2
-       PermitEmptyPasswords no
-       PermitRootLogin no # or 'without-password' to allow SSH key based login
-       StrictModes yes
-       HostKey /etc/ssh/ssh_host_rsa_key
-       Ciphers aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes128-ctr
-       MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160
-       KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1
+\begin{lstlisting}[breaklines]
+# ...
+
+Protocol 2
+PermitEmptyPasswords no
+PermitRootLogin no # or 'without-password' to allow SSH key based login
+StrictModes yes
+HostKey /etc/ssh/ssh_host_rsa_key
+Ciphers aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes128-ctr
+MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160
+KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1
 \end{lstlisting}
 \subsubsection{Tested with Version} OpenSSH 6.0p1 (Debian wheezy)
 \subsubsection{Settings}
 \paragraph*{sshd\_config}
 \begin{lstlisting}[breaklines]
-       # ...
-
-       Protocol 2
-       PermitEmptyPasswords no
-       PermitRootLogin no # or 'without-password' to allow SSH key based login
-       StrictModes yes
-       HostKey /etc/ssh/ssh_host_rsa_key
-       Ciphers aes256-ctr,aes128-ctr
-       MACs hmac-sha2-512,hmac-sha2-256,hmac-ripemd160
-       KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1
+# ...
+
+Protocol 2
+PermitEmptyPasswords no
+PermitRootLogin no # or 'without-password' to allow SSH key based login
+StrictModes yes
+HostKey /etc/ssh/ssh_host_rsa_key
+Ciphers aes256-ctr,aes128-ctr
+MACs hmac-sha2-512,hmac-sha2-256,hmac-ripemd160
+KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1
 \end{lstlisting}
 
 \textbf{Note:} Older Linux systems won't support SHA2. PuTTY (Windows) does not support
@@ -39,11 +39,13 @@ support for DSA keys stronger than 1024bit
 below current standards (see section \ref{section:keylengths}). Legacy systems
 can use this configuration and simply omit unsupported ciphers, key exchange
 algorithms and MACs.  
+
 %\subsubsection{Justification for special settings (if needed)}
 \subsubsection{References}
 The openssh sshd\_config  man page is the best reference: \url{http://www.openssh.org/cgi-bin/man.cgi?query=sshd_config}
+
 \subsubsection{How to test}
-Connect a client with verbose logging enabled to the SSH server \\
+Connect a client with verbose logging enabled to the SSH server
 \begin{lstlisting}
 $ ssh -vvv myserver.com
 \end{lstlisting}and observe the key exchange in the output.
@@ -51,7 +53,12 @@ $ ssh -vvv myserver.com
 
 %%---------------------------------------------------------------------- 
 \subsection{Cisco ASA}
-\subsubsection{Tested with Version} 9.1(3)
+\subsubsection{Tested with Versions}
+\begin{itemize}
+  \item 9.1(3)
+\end{itemize}
+
+
 \subsubsection{Settings}
 \begin{lstlisting}
 crypto key generate rsa modulus 2048
@@ -59,10 +66,14 @@ ssh version 2
 ssh key-exchange group dh-group14-sha1
 \end{lstlisting}
 Note: When the ASA is configured for SSH, by default both SSH versions 1 and 2 are allowed. In addition to that, only a group1 DH-key-exchange is used. This should be changed to allow only SSH version 2 and to use a key-exchange with group14. The generated RSA key should be 2048 bit (the actual supported maximum). A non-cryptographic best practice is to reconfigure the lines to only allow SSH-logins.
+
 \subsubsection{References}
-\url{http://www.cisco.com/en/US/docs/security/asa/asa91/configuration/general/admin\_management.html }
+\begin{itemize}
+  \item \url{http://www.cisco.com/en/US/docs/security/asa/asa91/configuration/general/admin\_management.html }
+\end{itemize}
+
 \subsubsection{How to test}
-Connect a client with verbose logging enabled to the SSH server \\
+Connect a client with verbose logging enabled to the SSH server
 \begin{lstlisting}
 $ ssh -vvv myserver.com
 \end{lstlisting}and observe the key exchange in the output.
@@ -70,27 +81,35 @@ $ ssh -vvv myserver.com
 
 %---------------------------------------------------------------------- 
 \subsection{Cisco IOS}
-\subsubsection{Tested with Version} 15.0, 15.1, 15.2
+\subsubsection{Tested with Versions}
+\begin{itemize}
+  \item 15.0, 15.1, 15.2
+\end{itemize}
+
+
 \subsubsection{Settings}
 \begin{lstlisting}
 crypto key generate rsa modulus 4096 label SSH-KEYS
-\begin{lstlisting}[breaklines]
 ip ssh rsa keypair-name SSH-KEYS
 ip ssh version 2
 ip ssh dh min size 2048
 
 line vty 0 15
 transport input ssh
-
 \end{lstlisting}
 Note: Same as with the ASA, also on IOS by default both SSH versions 1 and 2 are allowed and the DH-key-exchange only use a DH-group of 768 Bit.
 In IOS, a dedicated Key-pair can be bound to SSH to reduce the usage of individual keys-pairs.
 From IOS Version 15.0 onwards, 4096 Bit rsa keys are supported and should be used according to the paradigm "use longest supported key". Also, do not forget to disable telnet vty access.
+
+
 \subsubsection{References}
-\url{http://www.cisco.com/en/US/docs/ios/sec\_user\_services/configuration/guide/sec\_cfg\_secure\_shell.html }
+\begin{itemize}
+  \item \url{http://www.cisco.com/en/US/docs/ios/sec\_user\_services/configuration/guide/sec\_cfg\_secure\_shell.html}
+\end{itemize}
 % add any further references or best practice documents here
+
 \subsubsection{How to test}
-Connect a client with verbose logging enabled to the SSH server \\
+Connect a client with verbose logging enabled to the SSH server
 \begin{lstlisting}
 $ ssh -vvv myserver.com
 \end{lstlisting}and observe the key exchange in the output.
index 5041f99..87da3b2 100644 (file)
@@ -1,18 +1,15 @@
-%%\subsection{VPNs}
-
 % ---------------------------------------------------------------------- 
 \subsection{IPSec}
 \label{section:IPSECgeneral}
 
 % ciphersuites current 2013-12-09
-%\begin{description}
 
 \subsubsection{Settings}
 
-\paragraph*{Assumptions}\mbox{}\\
+\paragraphDiamond{Assumptions}
 We assume the use of IKE (v1 or v2) and ESP for this document.
 
-\paragraph*{Authentication}\mbox{}\\
+\paragraphDiamond{Authentication}
 IPSEC authentication should optimally be performed via RSA signatures,
 with a key size of 2048 bits or more. Configuring only the trusted CA
 that issued the peer certificate provides for additional protection
@@ -21,9 +18,9 @@ against fake certificates.
 If you need to use Pre-Shared Key authentication:
 
 \begin{enumerate}
-\item Choose a \textbf{random}, \textbf{long enough} PSK (see below)
-\item Use a \textbf{separate} PSK for any IPSEC connection
-\item Change the PSKs regularly
+  \item Choose a \textbf{random}, \textbf{long enough} PSK (see below)
+  \item Use a \textbf{separate} PSK for any IPSEC connection
+  \item Change the PSKs regularly
 \end{enumerate}
 
 The size of the PSK should not be shorter than the output size of
@@ -51,7 +48,7 @@ table~\ref{tab:IPSEC_psk_len} gives the minimum lengths in characters.
   \label{tab:IPSEC_psk_len}
 \end{table}
 
-\paragraph*{Cryptographic Suites}\mbox{}\\
+\paragraphDiamond{Cryptographic Suites}
 IPSEC Cryptographic Suites are pre-defined settings for all the items
 of a configuration; they try to provide a balanced security level and
 make setting up VPNs easier.
@@ -80,7 +77,7 @@ table~\ref{tab:IPSEC_suites}.
   \label{tab:IPSEC_suites}
 \end{table}
 
-\paragraph*{IKE or Phase 1}\mbox{}\\
+\paragraphDiamond{IKE or Phase 1}
 
 Alternatively to the pre-defined cipher suites, you can define your
 own, as described in this and the next section.
@@ -110,8 +107,7 @@ vulnerabilities \footnote{\url{http://ikecrack.sourceforge.net/}}.
   \label{tab:IPSEC_ph1_params}
 \end{table}
 
-\paragraph*{ESP or Phase 2}\mbox{}\\
-
+\paragraphDiamond{ESP or Phase 2}
 ESP or Phase 2 is where the actual data are protected; recommended
 parameters are shown in table \ref{tab:IPSEC_ph2_params}.
 
@@ -139,22 +135,20 @@ parameters are shown in table \ref{tab:IPSEC_ph2_params}.
 \end{table}
 
 \subsubsection{References}
-
-
-``A Cryptographic Evaluation of IPsec'', Niels Ferguson and Bruce
-  Schneier: \url{https://www.schneier.com/paper-ipsec.pdf}
+\begin{itemize}
+  \item ``A Cryptographic Evaluation of IPsec'', Niels Ferguson and Bruce
+    Schneier: \url{https://www.schneier.com/paper-ipsec.pdf}
+\end{itemize}
 
 
 %---------------------------------------------------------------------- 
 \subsection{Check Point FireWall-1}
 
-
-\subsubsection{Tested with Version}
+\subsubsection{Tested with Versions}
 \begin{itemize}
   \item R77 (should work with any currently supported version)
 \end{itemize}
 
-
 \subsubsection{Settings}
 Please see section \ref{section:IPSECgeneral} for guidance on
 parameter choice. In this section, we will configure a strong setup
@@ -218,19 +212,16 @@ Please note that these settings restrict the available algorithms for
 
 \subsubsection{References}
 \begin{itemize}
-\item Check Point
-  \href{https://sc1.checkpoint.com/documents/R77/CP_R77_VPN_AdminGuide/html_frameset.htm}{VPN R77 Administration Guide} (may require a UserCenter account to access)
+  \item Check Point \href{https://sc1.checkpoint.com/documents/R77/CP_R77_VPN_AdminGuide/html_frameset.htm}{VPN R77 Administration Guide} (may require a UserCenter account to access)
 \end{itemize}
 
-% \subsubsection{How to test}
-
+%\subsubsection{How to test}
 
 %% cipherstrings current 2013-12-09
 % ---------------------------------------------------------------------- 
 \subsection{OpenVPN}
 
-
-\subsubsection{Tested with Version}
+\subsubsection{Tested with Versions}
 \begin{itemize}
   \item OpenVPN 2.3.2 from Debian ``wheezy-backports'' linked against openssl (libssl.so.1.0.0) 
   \item OpenVPN 2.2.1 from Debian Wheezy linked against openssl
@@ -238,9 +229,9 @@ Please note that these settings restrict the available algorithms for
   \item OpenVPN 2.3.2 for Windows
 \end{itemize}
 
-
 \subsubsection{Settings}
-\paragraph{General}\mbox{}\\
+
+\paragraphDiamond{General}
 We describe a configuration with certificate-based authentication; see
 below for details on the \verb|easyrsa| tool to help you with that.
 
@@ -253,8 +244,7 @@ that is then negotiated as usual with TLS, the \verb|cipher|
 and \verb|auth| options both take a single argument that must match on
 client and server.
 
-\paragraph{Server Configuration}\mbox{}\\
-
+\paragraphDiamond{Server Configuration}
 % the cipherlist here is config B without the ECDHE strings, because
 % it must fit in 256 bytes...
 % DO NOT CHANGE TO THE CIPHERSTRING MACRO!
@@ -264,7 +254,8 @@ cipher AES-256-CBC
 auth SHA384
 \end{lstlisting}
 
-\paragraph{Client Configuration}\mbox{}\\
+\paragraph{Client Configuration}\mbox{}
+
 Client and server have to use compatible configurations, otherwise they can't communicate.
 The \verb|cipher| and \verb|auth| directives have to be identical.
 
@@ -307,14 +298,16 @@ The configuration shown above is compatible with all tested versions.
 
 \subsubsection{Additional settings}
 
-\paragraph{Key renegotiation interval}\mbox{}\\
+\paragraph{Key renegotiation interval}\mbox{}
+
 The default for renegotiation of encryption keys is one hour
 (\verb|reneg-sec 3600|). If you
 transfer huge amounts of data over your tunnel, you might consider
 configuring a shorter interval, or switch to a byte- or packet-based
 interval (\verb|reneg-bytes| or \verb|reneg-pkts|).
 
-\paragraph{Fixing ``easy-rsa''}\mbox{}\\
+\paragraph{Fixing ``easy-rsa''}\mbox{}
+
 When installing an OpenVPN server instance, you are probably using
 \emph{easy-rsa} to generate keys and certificates.
 The file \verb|vars| in the easyrsa installation directory has a
@@ -334,10 +327,8 @@ In addition, edit the \verb|pkitool| script and replace all occurences
 of \verb|sha1| with \verb|sha256|, to sign the certificates with
 SHA256.
 
-
-Note that the ciphersuites shown by \verb|openvpn --show-tls| are
-\emph{known}, but not necessarily \emph{supported}
-\footnote{\url{https://community.openvpn.net/openvpn/ticket/304}}.
+\subsubsection{Limitations}
+Note that the ciphersuites shown by \verb|openvpn --show-tls| are \emph{known}, but not necessarily \emph{supported} \footnote{\url{https://community.openvpn.net/openvpn/ticket/304}}.
 
 Which cipher suite is actually used can be seen in the logs:
 
@@ -358,10 +349,14 @@ be decrypted.
 % ---------------------------------------------------------------------- 
 \subsection{Cisco ASA}
 The following settings reflect our recommendations as best as possible on the Cisco ASA platform. These are - of course - just settings regarding SSL/TLS (i.e. Cisco AnyConnect) and IPSec. For further security settings regarding this platform the appropriate Cisco guides should be followed.
-\begin{description}
-\item[Tested with Version:] 
-9.1(3) - X-series model
-\item[Settings:] \mbox{}
+
+
+\subsubsection{Tested with Versions}
+\begin{itemize}
+  \item 9.1(3) - X-series model
+\end{itemize}
+
+\subsubsection{Settings}
 \begin{lstlisting}
 crypto ipsec ikev2 ipsec-proposal AES-Fallback
  protocol esp encryption aes-256 aes-192 aes
@@ -427,7 +422,7 @@ ssl encryption dhe-aes256-sha1 dhe-aes128-sha1 aes256-sha1 aes128-sha1
 ssl trust-point ASDM_TrustPoint0 Outside-DMZ
 \end{lstlisting}
 
-\item[Justification for special settings (if needed):] \mbox{}
+\subsubsection{Justification for special settings}
 New IPsec policies have been defined which do not make use of ciphers that may be cause for concern. Policies have a "Fallback" option to support legacy devices.
 
 3DES has been completely disabled as such Windows XP AnyConnect Clients will no longer be able to connect.
@@ -436,21 +431,17 @@ The Cisco ASA platform does not currently support RSA Keys above 2048bits.
 
 Legacy ASA models (e.g. 5505, 5510, 5520, 5540, 5550) do not offer the possibility to configure for SHA256/SHA384/SHA512 nor AES-GCM for IKEv2 proposals.
 
-\item[References:] 
-\url{http://www.cisco.com/en/US/docs/security/asa/roadmap/asaroadmap.html}\\
-\url{http://www.cisco.com/web/about/security/intelligence/nextgen_crypto.html}
+\subsubsection{References}
+\begin{itemize}
+  \item \url{http://www.cisco.com/en/US/docs/security/asa/roadmap/asaroadmap.html}\\
+  \item \url{http://www.cisco.com/web/about/security/intelligence/nextgen_crypto.html}
+\end{itemize}
 
 % add any further references or best practice documents here
 
-%%\item[How to test:] 
+%%\subsubsection{How to test}
 % describe here or point the admin to tools (can be a simple footnote or \ref{} to  the tools section) which help the admin to test his settings.
 
-\end{description}
-
-
-
-
-
 
 
 % ---------------------------------------------------------------------- 
index f0b828e..8e6db7f 100644 (file)
@@ -1,35 +1,32 @@
 %%---------------------------------------------------------------------- 
+\subsection{Apache}
+
 Note that any cipher suite starting with EECDH can be omitted, if in doubt.
 (Compared to the theory section, EECDH in Apache and ECDHE in OpenSSL are
 synonyms~\footnote{https://www.mail-archive.com/openssl-dev@openssl.org/msg33405.html})
 
-\subsection{Apache}
-
-\subsubsection{Tested with Versions} 
+\subsubsection{Tested with Versions}
 \begin{itemize}
   \item Apache 2.2.22 linked against OpenSSL 1.0.1e, Debian Wheezy
   \item Apache 2.4.6 linked against OpenSSL 1.0.1e, Debian Jessie
 \end{itemize}
 
-
 \subsubsection{Settings}
 Enabled modules \emph{SSL} and \emph{Headers} are required.
 
 \begin{lstlisting}
-  SSLCertificateFile server.crt
-  SSLCertificateKeyFile server.key
-  SSLProtocol All -SSLv2 -SSLv3 
-  SSLHonorCipherOrder On
-  SSLCompression off
-  SSLSessionCache shmcb:${APACHE_RUN_DIR}/ssl_scache(512000)
-  SSLSessionCacheTimeout 300
-  # Add six earth month HSTS header for all users...
-  Header always set Strict-Transport-Security "max-age=15768000"
-  # If you want to protect all subdomains, use the following header
-  # ALL subdomains HAVE TO support https if you use this!
-  # Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"
-
-  SSLCipherSuite '%*\cipherStringB*)'
+SSLCertificateFile server.crt
+SSLCertificateKeyFile server.key
+SSLProtocol All -SSLv2 -SSLv3 
+SSLHonorCipherOrder On
+SSLCompression off
+# Add six earth month HSTS header for all users...
+Header add Strict-Transport-Security "max-age=15768000"
+# If you want to protect all subdomains, use the following header
+# ALL subdomains HAVE TO support https if you use this!
+# Strict-Transport-Security: max-age=15768000 ; includeSubDomains
+
+SSLCipherSuite '%*\cipherStringB*)'
 \end{lstlisting}
 
 \subsubsection{Additional settings}
@@ -37,27 +34,30 @@ You might want to redirect everything to \emph{https://} if possible. In Apache
 you can do this with the following setting inside of a VirtualHost environment:
 
 \begin{lstlisting}
-  <VirtualHost *:80>
-    RewriteEngine On
-    RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=permanent]
-  </VirtualHost>
+<VirtualHost *:80>
+  RewriteEngine On
+  RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=permanent]
+</VirtualHost>
 \end{lstlisting}
 
+%\subsubsection{Justification for special settings (if needed)}
+
 \subsubsection{References}
 \begin{itemize}
   \item Apache2 Docs on SSL and TLS: \url{https://httpd.apache.org/docs/2.4/ssl/}
 \end{itemize}
 
-\subsubsection{How to test}
 
+\subsubsection{How to test}
 See appendix \ref{cha:tools}
 
+
 %%---------------------------------------------------------------------- 
 \subsection{lighttpd}
 
+\todo{sebix: add/test ssl.ec-curve and ssl.dh-file; see \url{http://redmine.lighttpd.net/projects/1/wiki/Docsr\_SSL\#Diffie-Hellman-and-Elliptic-Curve-Diffie-Hellman-parameters}}
 
 \subsubsection{Tested with Versions}
-\todo{sebix: add/test ssl.ec-curve and ssl.dh-file; see \url{http://redmine.lighttpd.net/projects/1/wiki/Docsr\_SSL\#Diffie-Hellman-and-Elliptic-Curve-Diffie-Hellman-parameters}}
 \begin{itemize}
   \item lighttpd/1.4.31-4 with OpenSSL 1.0.1e on Debian Wheezy
   \item lighttpd/1.4.33 with OpenSSL 0.9.8o on Debian Squeeze (note that TLSv1.2 does not work in openssl 0.9.8 thus not all ciphers actually work)
@@ -67,43 +67,41 @@ See appendix \ref{cha:tools}
 
 \subsubsection{Settings}
 \begin{lstlisting}
-  $SERVER["socket"] == "0.0.0.0:443" {
-    ssl.engine  = "enable"
-    ssl.use-sslv2 = "disable"
-    ssl.use-sslv3 = "disable"
-    ssl.pemfile = "/etc/lighttpd/server.pem"
-    ssl.cipher-list = "%*\cipherStringB*)"
-    ssl.honor-cipher-order = "enable"
-    setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=15768000") # six months
-    # use this only if all subdomains support HTTPS!
-    # setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=15768000; includeSubDomains")
-  }
+$SERVER["socket"] == "0.0.0.0:443" {
+  ssl.engine  = "enable"
+  ssl.use-sslv2 = "disable"
+  ssl.use-sslv3 = "disable"
+  ssl.pemfile = "/etc/lighttpd/server.pem"
+  ssl.cipher-list = "%*\cipherStringB*)"
+  ssl.honor-cipher-order = "enable"
+  setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=15768000") # six months
+  # use this only if all subdomains support HTTPS!
+  # setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=15768000; includeSubDomains")
+}
 \end{lstlisting}
 
 
 \subsubsection{Additional settings}
 As for any other webserver, you might want to automatically redirect \emph{http://}
-traffic towards \emph{https://}. It is also recommended to set the environment
-variable \emph{HTTPS}, PHP applications run by the webserver can then detect,
+traffic toward \emph{https://}. It is also recommended to set the environment variable
+\emph{HTTPS}, so the PHP applications run by the webserver can easily detect,
 that HTTPS is in use.
 
 \begin{lstlisting}
-  $HTTP["scheme"] == "http" {
-    # capture vhost name with regex conditiona -> %0 in redirect pattern
-    # must be the most inner block to the redirect rule
-    $HTTP["host"] =~ ".*" {
-        url.redirect = (".*" => "https://%0$0")
-    }
-  }
-  server.modules += ( "mod_setenv" ) # if not already activated before
-  $HTTP["scheme"] == "https" {
-    # Set the environment variable properly
-    setenv.add-environment = (
-      "HTTPS" => "on"
-    )
+$HTTP["scheme"] == "http" {
+  # capture vhost name with regex conditiona -> %0 in redirect pattern
+  # must be the most inner block to the redirect rule
+  $HTTP["host"] =~ ".*" {
+    url.redirect = (".*" => "https://%0$0")
   }
+  # Set the environment variable properly
+  setenv.add-environment = (
+    "HTTPS" => "on"
+  )
+}
 \end{lstlisting}
 
+
 \subsubsection{Additional information} 
 The config option \emph{honor-cipher-order} is available since 1.4.30, the
 supported ciphers depend on the used OpenSSL-version (at runtime). ECDHE has to
@@ -114,6 +112,7 @@ active).
 Support for other SSL-libraries like GnuTLS will be available in the upcoming
 2.x branch, which is currently under development.
 
+
 \subsubsection{References} 
 \begin{itemize}
   \item HTTPS redirection: \url{http://redmine.lighttpd.net/projects/1/wiki/HowToRedirectHttpToHttps}
@@ -122,6 +121,7 @@ Support for other SSL-libraries like GnuTLS will be available in the upcoming
   \item SSL Compression disabled by default: \url{http://redmine.lighttpd.net/issues/2445}
 \end{itemize}
 
+
 \subsubsection{How to test} 
 See appendix \ref{cha:tools}
 
@@ -129,7 +129,6 @@ See appendix \ref{cha:tools}
 %%---------------------------------------------------------------------- 
 \subsection{nginx}
 
-
 \subsubsection{Tested with Version} 
 \begin{itemize}
   \item 1.4.4 with OpenSSL 1.0.1e on OS X Server 10.8.5
@@ -141,31 +140,33 @@ See appendix \ref{cha:tools}
 
 \subsubsection{Settings}
 \begin{lstlisting}
-  ssl_prefer_server_ciphers on;
-  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # not possible to do exclusive
-  ssl_ciphers '%*\cipherStringB*)';
-  add_header Strict-Transport-Security "max-age=15768000; includeSubDomains"
+ssl_prefer_server_ciphers on;
+ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # not possible to do exclusive
+ssl_ciphers '%*\cipherStringB*)';
+add_header Strict-Transport-Security max-age=15768000; # six months
+# use this only if all subdomains support HTTPS!
+# add_header Strict-Transport-Security "max-age=15768000; includeSubDomains"
 \end{lstlisting}
 
 If you absolutely want to specify your own DH parameters, you can specify them via
+
 \begin{lstlisting}
-  ssl_dhparam file;
+ssl_dhparam file;
 \end{lstlisting}
 
-However, we advise you to read section \ref{section:DH} and stay with the standard IKE/IETF parameters (as long as they are \textgreater 1024 bits).
-
+However, we advise you to read section \ref{section:DH} and stay with the standard IKE/IETF parameters (as long as they are \textgreater bits).
 
 \subsubsection{Additional settings}
 If you decide to trust NIST's ECC curve recommendation, you can add the following line to nginx's configuration file to select special curves:
 
 \begin{lstlisting}
-  ssl_ecdh_curve          secp384r1;
+ssl_ecdh_curve          secp384r1;
 \end{lstlisting}
 
 You might want to redirect everything to \emph{https://} if possible. In Nginx you can do this with the following setting:
 
 \begin{lstlisting}
-  return 301 https://$host$request_uri;
+return 301 https://$host$request_uri;
 \end{lstlisting}
 
 
@@ -178,17 +179,17 @@ You might want to redirect everything to \emph{https://} if possible. In Nginx y
 \subsubsection{How to test}
 See appendix \ref{cha:tools}
 
+
 %%---------------------------------------------------------------------- 
 \subsection{MS IIS}
 \label{sec:ms-iis}
-
 \todo{Daniel: add screenshots and registry keys}
 
+
 \subsubsection{Tested with Version} \todo{Daniel: add tested version}
 
 
 \subsubsection{Settings}
-
 When trying to avoid RC4 and CBC (BEAST-Attack) and requiring perfect
 forward secrecy, Microsoft Internet Information Server (IIS) supports
 ECDSA, but does not support RSA for key exchange (consider ECC suite
@@ -205,6 +206,7 @@ of the following ways:
   \item IIS Crypto~\footnote{\url{https://www.nartac.com/Products/IISCrypto/}}
 \end{enumerate}
 
+
 Table~\ref{tab:MS_IIS_Client_Support} shows the process of turning on
 one algorithm after another and the effect on the supported clients
 tested using https://www.ssllabs.com.
@@ -265,11 +267,10 @@ Clients not supported:
 
 % add any further references or best practice documents here
 
+
 \subsubsection{How to test}
 See appendix \ref{cha:tools}
 
-%\end{description}
-
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "../applied-crypto-hardening"
index 9f719b7..fb50dd0 100644 (file)
@@ -2,18 +2,18 @@
 \label{section:Scope}
 \newline In this guide, we restricted ourselves to:
 \begin{itemize}
-\item Internet-facing services
-\item Commonly used services
-\item Devices which are used in business environments (this specifically excludes XBoxes, Playstations and similar consumer devices)
-\item OpenSSL 
+  \item Internet-facing services
+  \item Commonly used services
+  \item Devices which are used in business environments (this specifically excludes XBoxes, Playstations and similar consumer devices)
+  \item OpenSSL 
 \end{itemize}
 
 We explicitly excluded:
 \begin{itemize}
-\item Specialized systems (such as medical devices, most embedded systems, etc.)
-\item Wireless Access Points
-\item Smart-cards/chip cards
-%\item Services which should be run only in an internal network and never face the Internet.
+  \item Specialized systems (such as medical devices, most embedded systems, etc.)
+  \item Wireless Access Points
+  \item Smart-cards/chip cards
+%  \item Services which should be run only in an internal network and never face the Internet.
 \end{itemize}
 
 %% * whatsapp --> man kann nichts machen, out of scope
index 5d30a4c..31c9732 100644 (file)
@@ -1,16 +1,19 @@
 \subsection{myservice}
 
 
-\begin{description}
-\item[Tested with Version:] \todo{version?}
+\subsubsection{Tested with Versions}
+\todo{testing}
+\begin{itemize}
+  \item Version 0.1, Distro Version
+\end{itemize}
 
-\item[Settings:] \mbox{}
+\subsubsection{Settings}
 
 \begin{lstlisting}
     %Here goes your setting string
 \end{lstlisting}
 
-\item[Additional settings:] \mbox{}
+\subsubsection{Additional settings}
 
 %Here you can add additional settings
 
     %copy \& paste additional settings
 \end{lstlisting}
 
-\item[Justification for special settings (if needed):] \mbox{}
+\subsubsection{Justification for special settings (if needed)}
 
 % in case you have the need for further justifications why you chose this and that setting or if the settings do not fit into the standard Variant A or Variant B schema, please document this here
 
-\item[References:] \todo{add references}
+\subsubsection{References}
+\todo{add references}
+\begin{itemize}
+  \item short description: \url{http://example.com/doc/ssl}
+\end{itemize}
 
 % add any further references or best practice documents here
 
-\item[How to test:]
+\subsubsection{How to test}
 % describe here or point the admin to tools (can be a simple footnote or \ref{} to  the tools section) which help the admin to test his settings.
 
-\end{description}
index 4cc18c9..2bc630e 100644 (file)
@@ -37,9 +37,9 @@ This typically occurs for embedded devices and virtual machines.
 Embedded devices lack some entropy sources other devices have, e.g.:
 
 \begin{itemize}
-\item No persistent clock, so boot-time is not contributing to the
+  \item No persistent clock, so boot-time is not contributing to the
     initial RNG state
-\item No hard-disk: No entropy from hard-disk timing, no way to store
+  \item No hard-disk: No entropy from hard-disk timing, no way to store
     entropy between reboots
 \end{itemize}
 
index 4d40709..c797065 100644 (file)
@@ -9,7 +9,7 @@ authenticated encryption schemes. It consists of the following components:
 
 \begin{description}
 
-\item[Key exchange protocol:]
+  \item[Key exchange protocol:]
 ``An (interactive) key exchange protocol is a method whereby parties who do not 
 share any secret information can generate a shared, secret key by communicating 
 over a public channel. The main property guaranteed here is that an 
@@ -18,24 +18,24 @@ line does not learn anything about the resulting secret key.''~\cite{katz2008int
 
 Example: \texttt{DHE}
 
-\item[Authentication:]
+  \item[Authentication:]
 The client authenticates the server by its certificate. Optionally the server 
 may authenticate the client certificate.
 
 Example: \texttt{RSA}
 
-\item[Cipher:]
+  \item[Cipher:]
 The cipher is used to encrypt the message stream. It also contains the key size
 and mode used by the suite.
 
 Example: \texttt{AES256}
 
-\item[Message authentication code (MAC):]
+  \item[Message authentication code (MAC):]
 A MAC ensures that the message has not been tampered with (integrity).
 
 Examples: \texttt{SHA256}
 
-\item[Authenticated Encryption with Associated Data (AEAD):]
+  \item[Authenticated Encryption with Associated Data (AEAD):]
 AEAD is a class of authenticated encryption block-cipher modes
 which take care of encryption as well as authentication (e.g. GCM, CCM mode). 
 
index 6749ef3..41dafca 100644 (file)
@@ -44,15 +44,14 @@ from the server's public key.
    ECDSA  & DSA           & yes          & no                 \\
 \bottomrule
 \end{tabular}
-%\\
-%\\
 %disabled: \texttt{!PSK:!SRP}
 \end{center}
 
 \textbf{Ephemeral Key Exchange} uses different keys for authentication (the server's RSA
 key) and encryption (a randomly created key). This advantage is called ``Forward
 Secrecy'' and means that even recorded traffic cannot be decrypted later when someone
-obtains the server key. \\
+obtains the server key.
+
 All ephemeral key exchange schemes are based on the Diffie-Hellman algorithm and require
 pre-generated Diffie-Hellman parameter (which allow fast ephemeral key generation). It
 is important to note that the Diffie-Hellman parameter settings need to reflect at least 
index bbc676a..f76cafe 100644 (file)
@@ -6,7 +6,7 @@ keeping high cipher suite security while supporting as many users as possible.
 The website \url{https://www.ssllabs.com/} gives administrators and security engineers
 a tool to test their setup and compare compatibility with clients. The authors made 
 use of ssllabs.com to arrive at a set of cipher suites which we will recommend 
-throughout this document.\\
+throughout this document.
 
 %\textbf{Caution: these settings can only represent a subjective
 %choice of the authors at the time of writing. It might be a wise choice to
@@ -26,10 +26,10 @@ deployments where software that is to be used can be defined without restriction
 We arrived at this set of cipher suites by selecting:
 
 \begin{itemize}
-\item TLS 1.2
-\item Perfect forward secrecy / ephemeral Diffie Hellman
-\item strong MACs (SHA-2) or
-\item GCM as Authenticated Encryption scheme
+  \item TLS 1.2
+  \item Perfect forward secrecy / ephemeral Diffie Hellman
+  \item strong MACs (SHA-2) or
+  \item GCM as Authenticated Encryption scheme
 \end{itemize}
 
 This results in the OpenSSL string:
@@ -76,16 +76,15 @@ example, there are known weaknesses for the SHA-1 hash function that is
 included in this set.  The advantage of this set of cipher suites is not only
 better compatibility with a broad range of clients, but also less computational
 workload on the provisioning hardware.
-\\
+
 
 \textbf{All further examples in this publication use Configuration B}.\\
 
 We arrived at this set of cipher suites by selecting:
 
 \begin{itemize}
-\item TLS 1.2, TLS 1.1, TLS 1.0
-\item allowing SHA-1 (see the comments on SHA-1 in section \ref{section:SHA})
-
+  \item TLS 1.2, TLS 1.1, TLS 1.0
+  \item allowing SHA-1 (see the comments on SHA-1 in section \ref{section:SHA})
 \end{itemize}
 
 This results in the OpenSSL string:
@@ -150,15 +149,15 @@ Our recommended cipher strings are meant to be used via copy and paste and need
 "out of the box".
 
 \begin{itemize}
-\item TLSv1.2 is preferred over TLSv1.0 (while still providing a useable cipher
+  \item TLSv1.2 is preferred over TLSv1.0 (while still providing a useable cipher
       string for TLSv1.0 servers).
-\item AES256 and CAMELLIA256 count as very strong ciphers at the moment.
-\item AES128 and CAMELLIA128 count as strong ciphers at the moment
-\item DHE or ECDHE for forward secrecy
-\item RSA as this will fit most of today's setups
-\item AES256-SHA as a last resort: with this cipher at the end, even server
+  \item AES256 and CAMELLIA256 count as very strong ciphers at the moment.
+  \item AES128 and CAMELLIA128 count as strong ciphers at the moment
+  \item DHE or ECDHE for forward secrecy
+  \item RSA as this will fit most of today's setups
+  \item AES256-SHA as a last resort: with this cipher at the end, even server
       systems with very old OpenSSL versions will work out of the box (version 0.9.8 for example does not
-      provide support for ECC and TLSv1.1 or above). \\
+      provide support for ECC and TLSv1.1 or above). \newline
       Note however that this cipher suite will not provide forward secrecy. It
       is meant to provide the same client coverage (eg. support Microsoft crypto
       libraries) on legacy setups.
index 2b450b1..dae5910 100644 (file)
@@ -47,20 +47,16 @@ this web site.
 
 \paragraph{Summary}
 \begin{itemize}
-
-\item For asymmetric public-key cryptography we consider any key length below
+  \item For asymmetric public-key cryptography we consider any key length below
 3248 bits to be deprecated at the time of this writing (for long term
 protection).
-
-\item For elliptic curve cryptography we consider key lengths below 256 bits to
+  \item For elliptic curve cryptography we consider key lengths below 256 bits to
 be inadequate for long term protection.  
-
-\item For symmetric algorithms we consider anything below 128 bits to be
+  \item For symmetric algorithms we consider anything below 128 bits to be
 inadequate for long term protection.
-
 \end{itemize}
 
-\paragraph{Special remark on 3DES} \mbox{} \\
+\paragraphDiamond{Special remark on 3DES}
 We want to note that 3DES theoretically has 168 bits of security, however based
 on the NIST Special Publication 800-57
 \footnote{\url{http://csrc.nist.gov/publications/PubsSPs.html\#800-57-part1},
index 39642da..686d575 100644 (file)
@@ -6,38 +6,38 @@ This section lists tools for checking the security settings.
 
 Server checks via the web
 \begin{itemize}
-\item \href{http://ssllabs.com}{ssllabs.com} offers a great way to check your webserver for misconfigurations. See \url{https://www.ssllabs.com/ssltest/}. Furthermore, ssllabs.com has a good best practices tutorial, which focuses on avoiding the most common mistakes in SSL.
-\item SSL Server certificate installation issues \url{http://www.sslshopper.com/ssl-checker.html}
-\item Check SPDY protocol support and basic TLS setup \url{http://spdycheck.org/}
-\item XMPP/Jabber Server check (Client-to-Server and Server-to-Server) \url{https://xmpp.net/}
-\item Luxsci SMTP TLS Checker \url{https://luxsci.com/extranet/tlschecker.html}
-\item \url{http://checktls.com} is a tool for testing arbitrary TLS services.
-\item TLS and SSH key check \url{https://factorable.net/keycheck.html}
-\item \url{http://tls.secg.org} is a tool for testing interoperability of HTTPS implementations for ECC cipher suites.
-\item \url{http://www.whynopadlock.com/} Testing for mixed SSL parts loaded via http that can totally lever your https.
+  \item \href{http://ssllabs.com}{ssllabs.com} offers a great way to check your webserver for misconfigurations. See \url{https://www.ssllabs.com/ssltest/}. Furthermore, ssllabs.com has a good best practices tutorial, which focuses on avoiding the most common mistakes in SSL.
+  \item SSL Server certificate installation issues \url{http://www.sslshopper.com/ssl-checker.html}
+  \item Check SPDY protocol support and basic TLS setup \url{http://spdycheck.org/}
+  \item XMPP/Jabber Server check (Client-to-Server and Server-to-Server) \url{https://xmpp.net/}
+  \item Luxsci SMTP TLS Checker \url{https://luxsci.com/extranet/tlschecker.html}
+  \item \url{http://checktls.com} is a tool for testing arbitrary TLS services.
+  \item TLS and SSH key check \url{https://factorable.net/keycheck.html}
+  \item \url{http://tls.secg.org} is a tool for testing interoperability of HTTPS implementations for ECC cipher suites.
+  \item \url{http://www.whynopadlock.com/} Testing for mixed SSL parts loaded via http that can totally lever your https.
 \end{itemize}
 
 Browser checks
 \begin{itemize}
-\item Check your browser's SSL capabilities: \url{https://cc.dcsec.uni-hannover.de/} and \url{https://www.ssllabs.com/ssltest/viewMyClient.html}.
-\item Check Browsers SSL/TLS support and vulnerability to attacks: \url{https://www.howsmyssl.com}
+  \item Check your browser's SSL capabilities: \url{https://cc.dcsec.uni-hannover.de/} and \url{https://www.ssllabs.com/ssltest/viewMyClient.html}.
+  \item Check Browsers SSL/TLS support and vulnerability to attacks: \url{https://www.howsmyssl.com}
 \end{itemize}
 
 
 Command line tools
 \begin{itemize}
-\item \url{http://sourceforge.net/projects/sslscan} connects to a given SSL service and shows the cipher suites that are offered.
-\item \url{http://checktls.com} is a tool for testing arbitrary TLS services. 
-\item \url{http://www.bolet.org/TestSSLServer/} tests for BEAST and CRIME vulnerabilities.
-\item \url{https://github.com/iSECPartners/sslyze} Fast and full-featured SSL scanner
-\item \url{http://nmap.org/} nmap security scanner
-\item \url{http://www.openssl.net} OpenSSL s\_client
+  \item \url{http://sourceforge.net/projects/sslscan} connects to a given SSL service and shows the cipher suites that are offered.
+  \item \url{http://checktls.com} is a tool for testing arbitrary TLS services. 
+  \item \url{http://www.bolet.org/TestSSLServer/} tests for BEAST and CRIME vulnerabilities.
+  \item \url{https://github.com/iSECPartners/sslyze} Fast and full-featured SSL scanner
+  \item \url{http://nmap.org/} nmap security scanner
+  \item \url{http://www.openssl.net} OpenSSL s\_client
 \end{itemize}
 
 
 \section{Keylength}
 \begin{itemize}
-\item \url{http://www.keylength.com} comprehensive online resource for comparison of keylengths according to common recommendations and standards in cryptography.
+  \item \url{http://www.keylength.com} comprehensive online resource for comparison of keylengths according to common recommendations and standards in cryptography.
 \end{itemize}
 
 
@@ -45,13 +45,13 @@ Command line tools
 
 %% NOTE: should we merge that with chapter 6.6??
 \begin{itemize}
-\item \href{http://www.fourmilab.ch/random/}{ENT} is a pseudo random number generator sequence tester.
-\item \href{http://www.issihosts.com/haveged/}{HaveGE} is a tool which increases the Entropy of the Linux random number generator devices. It is based on the HAVEGE algorithm. \url{http://dl.acm.org/citation.cfm?id=945516}
-\item \href{http://www.phy.duke.edu/~rgb/General/dieharder.php}{Dieharder} a random number generator testing tool.
-\item \href{http://www.cacert.at/random/}{CAcert Random} another random number generator testing service.
+  \item \href{http://www.fourmilab.ch/random/}{ENT} is a pseudo random number generator sequence tester.
+  \item \href{http://www.issihosts.com/haveged/}{HaveGE} is a tool which increases the Entropy of the Linux random number generator devices. It is based on the HAVEGE algorithm. \url{http://dl.acm.org/citation.cfm?id=945516}
+  \item \href{http://www.phy.duke.edu/~rgb/General/dieharder.php}{Dieharder} a random number generator testing tool.
+  \item \href{http://www.cacert.at/random/}{CAcert Random} another random number generator testing service.
 \end{itemize}
 
 \section{Guides}
 \begin{itemize}
-\item See: \url{https://www.ssllabs.com/downloads/SSL_TLS_Deployment_Best_Practices_1.3.pdf}.
+  \item See: \url{https://www.ssllabs.com/downloads/SSL_TLS_Deployment_Best_Practices_1.3.pdf}.
 \end{itemize}