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