244957727a04c18e08f8a7c241478374b4bec8c5
[ach-master.git] / src / practical_settings / webserver.tex
1 %%----------------------------------------------------------------------
2 \subsection{Apache}
3
4 Note that any cipher suite starting with EECDH can be omitted, if in doubt.
5 (Compared to the theory section, EECDH in Apache and ECDHE in OpenSSL are
6 synonyms~\footnote{https://www.mail-archive.com/openssl-dev@openssl.org/msg33405.html})
7
8 \subsubsection{Tested with Versions}
9 \begin{itemize*}
10   \item Apache 2.2.22 linked against OpenSSL 1.0.1e, Debian Wheezy
11   \item Apache 2.4.6 linked against OpenSSL 1.0.1e, Debian Jessie
12 \end{itemize*}
13
14 \subsubsection{Settings}
15 Enabled modules \emph{SSL} and \emph{Headers} are required.
16
17 \configfile{default-ssl}{42-43,52-52,62-62,162-170}{SSL configuration for an Apache vhost}
18
19 \subsubsection{Additional settings}
20 You might want to redirect everything to \emph{https://} if possible. In Apache
21 you can do this with the following setting inside of a VirtualHost environment:
22
23 \configfile{hsts-vhost}{}{https auto-redirect vhost}
24
25 %\subsubsection{Justification for special settings (if needed)}
26
27 \subsubsection{References}
28 \begin{itemize*}
29   \item Apache2 Docs on SSL and TLS: \url{https://httpd.apache.org/docs/2.4/ssl/}
30 \end{itemize*}
31
32
33 \subsubsection{How to test}
34 See appendix \ref{cha:tools}
35
36
37 %%----------------------------------------------------------------------
38 \subsection{lighttpd}
39
40 \subsubsection{Tested with Versions}
41 \begin{itemize*}
42   \item lighttpd/1.4.31-4 with OpenSSL 1.0.1e on Debian Wheezy
43   \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)
44   \item lighttpd/1.4.28-2 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)
45 \end{itemize*}
46
47
48 \subsubsection{Settings}
49 \configfile{10-ssl.conf}{3-15}{SSL configuration for lighttpd}
50
51 Starting with lighttpd version 1.4.29 Diffie-Hellman and Elliptic-Curve Diffie-Hellman key agreement protocols are supported.
52 By default, elliptic curve "prime256v1" (also "secp256r1") will be used, if no other is given.
53 To select special curves, it is possible to set them using the configuration options \verb|ssl.dh-file| and \verb|ssl.ec-curve|.
54
55 \configfile{10-ssl-dh.conf}{11-13}{SSL EC/DH configuration for lighttpd}
56
57 Please read section \ref{section:DH} for more information on Diffie Hellman key exchange and elliptic curves.
58
59 \subsubsection{Additional settings}
60 As for any other webserver, you might want to automatically redirect \emph{http://}
61 traffic toward \emph{https://}. It is also recommended to set the environment variable
62 \emph{HTTPS}, so the PHP applications run by the webserver can easily detect
63 that HTTPS is in use.
64
65 \configfile{11-hsts.conf}{}{https auto-redirect configuration}
66
67 \subsubsection{Additional information}
68 The config option \emph{honor-cipher-order} is available since 1.4.30, the
69 supported ciphers depend on the used OpenSSL-version (at runtime). ECDHE has to
70 be available in OpenSSL at compile-time, which should be default. SSL
71 compression should by deactivated by default at compile-time (if not, it's
72 active).
73
74 Support for other SSL-libraries like GnuTLS will be available in the upcoming
75 2.x branch, which is currently under development.
76
77
78 \subsubsection{References}
79 \begin{itemize*}
80   \item HTTPS redirection: \url{http://redmine.lighttpd.net/projects/1/wiki/HowToRedirectHttpToHttps}
81   \item Lighttpd Docs SSL: \url{http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs\_SSL}
82   \item Release 1.4.30 (How to mitigate BEAST attack) \url{http://redmine.lighttpd.net/projects/lighttpd/wiki/Release-1\_4\_30}
83   \item SSL Compression disabled by default: \url{http://redmine.lighttpd.net/issues/2445}
84 \end{itemize*}
85
86
87 \subsubsection{How to test}
88 See appendix \ref{cha:tools}
89
90
91 %%----------------------------------------------------------------------
92 \subsection{nginx}
93
94 \subsubsection{Tested with Version}
95 \begin{itemize*}
96   \item 1.4.4 with OpenSSL 1.0.1e on OS X Server 10.8.5
97   \item 1.2.1-2.2+wheezy2 with OpenSSL 1.0.1e on Debian Wheezy
98   \item 1.4.4 with OpenSSL 1.0.1e on Debian Wheezy
99   \item 1.2.1-2.2~bpo60+2 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)
100   \item 1.4.6 with OpenSSL 1.0.1f on Ubuntu 14.04.2 LTS
101 \end{itemize*}
102
103
104 \subsubsection{Settings}
105 \configfile{default}{113-118}{SSL settings for nginx}
106 If you absolutely want to specify your own DH parameters, you can specify them via
107
108 \begin{lstlisting}
109 ssl_dhparam file;
110 \end{lstlisting}
111
112 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).
113
114 \subsubsection{Additional settings}
115 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:
116
117 \configfile{default-ec}{119-119}{SSL EC/DH settings for nginx}
118
119 You might want to redirect everything to \emph{https://} if possible. In Nginx you can do this with the following setting (replace www.domain.com with your domain):
120
121 \configfile{default-hsts}{29-29}{https auto-redirect in nginx}
122
123 \subsubsection{References}
124 \begin{itemize*}
125   \item \url{http://nginx.org/en/docs/http/ngx_http_ssl_module.html}
126   \item \url{http://wiki.nginx.org/HttpSslModule}
127 \end{itemize*}
128
129 \subsubsection{How to test}
130 See appendix \ref{cha:tools}
131
132
133 %%----------------------------------------------------------------------
134 \subsection{Cherokee}
135
136 \subsubsection{Tested with Version}
137 \begin{itemize*}
138     \item Cherokee/1.2.104 on Debian Wheezy with OpenSSL 1.0.1e 11 Feb 2013
139 \end{itemize*}
140
141 \subsubsection{Settings}
142
143 The configuration of the cherokee webserver is performed by an admin interface available via the web. It then writes the configuration to \texttt{/etc/cherokee/cherokee.conf}, the important lines of such a configuration file can be found at the end of this section.
144
145 \begin{itemize*}
146     \item General Settings
147     \begin{itemize*}
148         \item Network
149         \begin{itemize*}
150             \item \emph{SSL/TLS back-end}: \emph{OpenSSL/libssl}
151         \end{itemize*}
152         \item Ports to listen
153         \begin{itemize*}
154             \item Port: 443, TLS: TLS/SSL port
155         \end{itemize*}
156     \end{itemize*}
157     \item Virtual Servers, For each vServer on tab \emph{Security}:
158     \begin{itemize*}
159         \item \emph{Required SSL/TLS Values}: Fill in the correct paths for \emph{Certificate} and \emph{Certificate key}
160         \item Advanced Options
161         \begin{itemize*}
162             \item \emph{Ciphers}: \texttt{EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:\newline EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:\newline+SSLv3:!aNULL!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:\newline!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA}
163             \item \emph{Server Preference}: Prefer
164             \item \emph{Compression}: Disabled
165         \end{itemize*}
166     \end{itemize*}
167     \item Advanced: TLS
168     \begin{itemize*}
169         \item SSL version 2 and SSL version 3: No
170         \item TLS version 1, TLS version 1.1 and TLS version 1.2: Yes
171     \end{itemize*}
172 \end{itemize*}
173
174 \subsubsection{Additional settings}
175 For each vServer on the Security tab it is possilbe to set the Diffie Hellman length to up to 4096 bits. We recommend to use \textgreater 1024 bits.
176 More information about Diffie-Hellman and which curves are recommended can be found in section \ref{section:DH}.
177
178 In Advanced: TLS it is possible to set the path to a Diffie Hellman parameters file for 512, 1024, 2048 and 4096 bits.
179
180 HSTS can be configured on host-basis in section \emph{vServers} / \emph{Security} / \emph{HTTP Strict Transport Security (HSTS)}:
181 \begin{itemize*}
182     \item \emph{Enable HSTS}: Accept
183     \item \emph{HSTS Max-Age}: 15768000
184     \item \emph{Include Subdomains}: depends on your setup
185 \end{itemize*}
186
187 To redirect HTTP to HTTPS, configure a new rule per Virtual Server in the \emph{Behavior} tab. The rule is \emph{SSL/TLS} combined with a \emph{NOT} operator. As \emph{Handler} define \emph{Redirection} and use \texttt{/(.*)\$} as \emph{Regular Expression} and \emph{https://\$\{host\}/\$1} as \emph{Substitution}.
188
189 \configfile{cherokee.conf}{3-4,12-12,17-19,26-32,52-57}{SSL configuration for cherokee}
190
191 \subsubsection{References}
192 \begin{itemize*}
193   \item Cookbook: SSL, TLS and certificates: \url{http://cherokee-project.com/doc/cookbook_ssl.html}
194   \item Cookbook: Redirecting all traffic from HTTP to HTTPS: \url{http://cherokee-project.com/doc/cookbook_http_to_https.html}
195 \end{itemize*}
196
197
198 \subsubsection{How to test}
199 See appendix \ref{cha:tools}
200
201
202 %%----------------------------------------------------------------------
203 \subsection{MS IIS}
204 \label{sec:ms-iis}
205
206 To configure SSL/TLS on Windows Server IIS Crypto can be used.~\footnote{\url{https://www.nartac.com/Products/IISCrypto/}}
207 Simply start the Programm, no installation required. The tool changes the registry keys described below.
208 A restart is required for the changes to take effect.
209
210 \begin{figure}[p]
211   \centering
212   \includegraphics[width=0.411\textwidth]{img/IISCryptoConfig.png}
213   \caption{IIS Crypto Tool}
214   \label{fig:IISCryptoConfig}
215 \end{figure}
216
217 Instead of using the IIS Crypto Tool the configuration can be set
218 using the Windows Registry. The following Registry keys apply to the
219 newer Versions of Windows (Windows 7, Windows Server 2008, Windows
220 Server 2008 R2, Windows Server 2012 and Windows Server 2012 R2). For detailed
221 information about the older versions see the Microsoft knowledgebase
222 article. \footnote{\url{http://support.microsoft.com/kb/245030/en-us}}
223 \begin{lstlisting}[breaklines]
224   [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel]
225   [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Ciphers]
226   [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\CipherSuites]
227   [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Hashes]
228   [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\KeyExchangeAlgorithms]
229   [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols]
230 \end{lstlisting}
231
232 \subsubsection{Tested with Version}
233 \begin{itemize*}
234   \item Windows Server 2008
235   \item Windows Server 2008 R2
236   \item Windows Server 2012
237   \item Windows Server 2012 R2
238 \end{itemize*}
239
240 \begin{itemize*}
241   \item Windows Vista and Internet Explorer 7 and upwards
242   \item Windows 7 and Internet Explorer 8 and upwards
243   \item Windows 8 and Internet Explorer 10 and upwards
244   \item Windows 8.1 and Internet Explorer 11
245 \end{itemize*}
246
247
248
249
250
251
252 \subsubsection{Settings}
253 When trying to avoid RC4 (RC4 biases) as well as CBC (BEAST-Attack) by using GCM and to support perfect
254 forward secrecy, Microsoft SChannel (SSL/TLS, Auth,.. Stack) supports
255 ECDSA but lacks support for RSA signatures (see ECC suite
256 B doubts\footnote{\url{http://safecurves.cr.yp.to/rigid.html}}).
257
258 Since one is stuck with ECDSA, an elliptic curve certificate needs to be used.
259
260 The configuration of cipher suites MS IIS will use, can be configured in one
261 of the following ways:
262 \begin{enumerate}
263   \item Group Policy \footnote{\url{http://msdn.microsoft.com/en-us/library/windows/desktop/bb870930(v=vs.85).aspx}}
264   \item Registry  \footnote{\url{http://support.microsoft.com/kb/245030 }}
265   \item IIS Crypto~\footnote{\url{https://www.nartac.com/Products/IISCrypto/}}
266   \item Powershell
267 \end{enumerate}
268
269
270 Table~\ref{tab:MS_IIS_Client_Support} shows the process of turning on
271 one algorithm after another and the effect on the supported clients
272 tested using https://www.ssllabs.com.
273
274 \verb|SSL 3.0|, \verb|SSL 2.0| and \verb|MD5| are turned off.
275 \verb|TLS 1.0| and \verb|TLS 1.2| are turned on.
276
277 \ctable[%
278 caption={Client support},
279 label=tab:MS_IIS_Client_Support,
280 ]{ll}{}{%
281 \FL    Cipher Suite & Client
282 \ML    \lstinline+TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256+ & only IE 10,11, OpenSSL 1.0.1e
283 \NN    \lstinline+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256+ & Chrome 30, Opera 17, Safari 6+
284 \NN    \lstinline+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA+ & FF 10-24, IE 8+, Safari 5, Java 7
285 \LL}
286
287 Table~\ref{tab:MS_IIS_Client_Support} shows the algorithms from
288 strongest to weakest and why they need to be added in this order. For
289 example insisting on SHA-2 algorithms (only first two lines) would
290 eliminate all versions of Firefox, so the last line is needed to
291 support this browser, but should be placed at the bottom, so capable
292 browsers will choose the stronger SHA-2 algorithms.
293
294 \verb|TLS_RSA_WITH_RC4_128_SHA| or equivalent should also be added if
295 MS Terminal Server Connection is used (make sure to use this only in a
296 trusted environment). This suite will not be used for SSL, since we do
297 not use a RSA Key.
298
299 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256| ... only supported by: IE 10,11, OpenSSL 1.0.1e
300 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256| ... Chrome 30, Opera 17, Safari 6+
301 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA| ... Firefox 10-24, IE 8+, Safari 5, Java 7
302
303 Clients not supported:
304 \begin{enumerate}
305   \item Java 6
306   \item WinXP
307   \item Bing
308 \end{enumerate}
309
310
311 \subsubsection{Additional settings}
312 %Here you can add additional settings
313 It's recommended to use Strict-Transport-Security: max-age=15768000
314 for detailed information visit the
315 \footnote{\url{http://www.iis.net/configreference/system.webserver/httpprotocol/customheaders}}
316 Microsoft knowledgebase.
317
318 You might want to redirect everything to http\textbf{s}:// if possible. In IIS you can do this with the following setting by Powershell:
319
320 \begin{lstlisting}[breaklines]
321 Set-WebConfiguration -Location "$WebSiteName/$WebApplicationName" `
322     -Filter 'system.webserver/security/access' `
323     -Value "SslRequireCert"
324 \end{lstlisting}
325
326 \subsubsection{Justification for special settings (if needed)}
327 % 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
328
329
330 \subsubsection{References}
331 \begin{itemize*}
332 \item \url{http://support.microsoft.com/kb/245030/en-us}
333 \item \url{http://support.microsoft.com/kb/187498/en-us}
334 \end{itemize*}
335
336 % add any further references or best practice documents here
337
338
339 \subsubsection{How to test}
340 See appendix \ref{cha:tools}
341
342 %%----------------------------------------------------------------------
343
344 %%% Local Variables:
345 %%% mode: latex
346 %%% TeX-master: "../applied-crypto-hardening"
347 %%% End: