manually merge in sebi's changes. git merge got confused. Or i did :)
[ach-master.git] / src / practical_settings / webserver.tex
1 %%\subsection{Webservers}
2
3 %%---------------------------------------------------------------------- 
4 \subsection{Apache}
5
6 \subsubsection{Tested with Versions} \todo{FIXME: add}
7 %\begin{itemize}
8 %\end{itemize}
9
10
11 \subsubsection{Settings} 
12
13 Enabled modules \emph{SSL} and \emph{Headers} are required.
14
15
16 %-All +TLSv1.1 +TLSv1.2
17 \begin{lstlisting}[breaklines]
18   SSLCertificateFile server.crt
19   SSLCertificateKeyFile server.key
20   SSLProtocol All -SSLv2 -SSLv3 
21   SSLHonorCipherOrder On
22   SSLCompression off
23   # Add six earth month HSTS header for all users...
24   Header add Strict-Transport-Security "max-age=15768000"
25   # If you want to protect all subdomains, use the following header
26   # ALL subdomains HAVE TO support https if you use this!
27   # Strict-Transport-Security: max-age=15768000 ; includeSubDomains
28
29   SSLCipherSuite '@@@CIPHERSTRINGB@@@'
30
31 \end{lstlisting}
32
33 Note again, that any cipher suite starting with ECDHE can be omitted, if in doubt.
34
35
36 \vskip 1.0em
37 \subsubsection{Additional settings}
38
39 You might want to redirect everything to httpS:// if possible. In Apache you can do this with the following setting inside of a VirtualHost environment:
40
41 \begin{lstlisting}[breaklines]
42   <VirtualHost *:80>
43    #...
44    RewriteEngine On
45         RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=permanent]
46    #...
47   </VirtualHost>
48 \end{lstlisting}
49
50 %\subsubsection{Justification for special settings (if needed)}
51
52 \subsubsection{References}
53 \url{https://httpd.apache.org/docs/2.4/ssl/}
54
55
56 \subsubsection{How to test}
57
58 See section \ref{section:Tools}
59
60 %%\end{description}
61
62
63 %%---------------------------------------------------------------------- 
64 \subsection{lighttpd}
65
66
67
68 %%\begin{description}
69 \subsubsection{Tested with Version}
70 \begin{itemize}
71 \item lighttpd/1.4.31-4 with OpenSSL 1.0.1e on Debian Wheezy
72 \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)
73 \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)
74 \end{itemize}
75
76 \todo{version?}
77
78 \subsubsection{Settings}
79
80
81 %% Complete ssl.cipher-list with same algo than Apache
82 \todo{FIXME: this string seems to be wrongly formatted??}
83
84 \begin{lstlisting}[breaklines]
85   $SERVER["socket"] == "0.0.0.0:443" {
86     ssl.engine  = "enable"
87     ssl.use-sslv2 = "disable"
88     ssl.use-sslv3 = "disable"
89     #ssl.use-compression obsolete >= 1.4.3.1
90     ssl.pemfile = "/etc/lighttpd/server.pem"
91     ssl.cipher-list = '@@@CIPHERSTRINGB@@@'
92     ssl.honor-cipher-order = "enable"
93     setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=31536000")
94   }
95 \end{lstlisting}
96
97
98 \subsubsection{Additional settings}
99
100 As for any other webserver, you might want to automatically redirect http
101 traffic toward httpS:// It is also recommended to set the environment variable
102 \emph{HTTPS}, so the applications run by the webserver can easily detect, that
103 HTTPS is in use.
104
105
106
107 \begin{lstlisting}[breaklines]
108   $HTTP["scheme"] == "http" {
109     # capture vhost name with regex conditiona -> %0 in redirect pattern
110     # must be the most inner block to the redirect rule
111     $HTTP["host"] =~ ".*" {
112         url.redirect = (".*" => "https://%0$0")
113     }
114   }
115   # Set the environment variable properly
116   setenv.add-environment = (
117             "HTTPS" => "on"
118         )
119   }
120 \end{lstlisting}
121
122
123 \subsubsection{Additional information} 
124 The config option \emph{honor-cipher-order} is available since 1.4.30, the
125 supported ciphers depend on the used OpenSSL-version (at runtime). ECDH has to
126 be available in OpenSSL at compile-time, which should be default. SSL
127 compression should by deactivated by default at compile-time (if not, it's
128 active).
129
130 Support for other SSL-libraries like GnuTLS will be available in the upcoming
131 2.x branch, which is currently under developement.
132
133
134 \subsubsection{References} 
135
136 \begin{itemize}
137         \item HTTPS redirection: \url{http://redmine.lighttpd.net/projects/1/wiki/HowToRedirectHttpToHttps}
138         \item Lighttpd Docs SSL: \url{http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs\_SSL}
139         \item Release 1.4.30 (How to mitigate BEAST attack) \url{http://redmine.lighttpd.net/projects/lighttpd/wiki/Release-1\_4\_30}
140         \item SSL Compression disabled by default: \url{http://redmine.lighttpd.net/issues/2445}
141 \end{itemize}
142
143
144
145
146 \subsubsection{How to test} 
147 See section \ref{section:Tools}
148
149 % 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.
150 %\end{description}
151
152
153 %%---------------------------------------------------------------------- 
154 \subsection{nginx}
155
156 %\begin{description}
157 \subsubsection{Tested with Version} 
158 \begin{itemize}
159 \item 1.4.4 with OpenSSL 1.0.1e on OS X Server 10.8.5
160 \item 1.2.1-2.2+wheezy2 with OpenSSL 1.0.1e on Debian Wheezy
161 \item 1.4.4 with OpenSSL 1.0.1e on Debian Wheezy
162 \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)
163 \end{itemize}
164
165
166 \subsubsection{Settings}
167
168 \begin{lstlisting}[breaklines]
169   ssl_prefer_server_ciphers on;
170   ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # not possible to do exclusive
171   ssl_ciphers '@@@CIPHERSTRINGB@@@';
172   add_header Strict-Transport-Security max-age=2592000;
173 \end{lstlisting}
174
175 If you absolutely want to specify your own DH parameters, you can specify them via
176
177 \begin{lstlisting}[breaklines]
178   ssl_dhparam file;
179 \end{lstlisting}
180
181 However, we advise you to read section \ref{section:DH} and stay with the standard IKE/IETF parameters (as long as they are $ > 1024 $ bits).
182
183
184 \subsubsection{Additional settings}
185
186 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:
187
188 \begin{lstlisting}[breaklines]
189   ssl_ecdh_curve          secp384r1;
190 \end{lstlisting}
191
192 You might want to redirect everything to httpS:// if possible. In Nginx you can do this with the following setting:
193
194 \begin{lstlisting}[breaklines]
195   rewrite     ^(.*)   https://$host$1 permanent;
196 \end{lstlisting}
197
198
199 \subsubsection{References} \todo{add references}
200
201 \subsubsection{How to test}
202 See section \ref{section:Tools}
203
204 %\end{description}
205
206
207
208
209
210 %%---------------------------------------------------------------------- 
211 \subsection{MS IIS}
212 \label{sec:ms-iis}
213
214
215 \todo{Daniel: add screenshots and registry keys}
216
217 %\begin{description}
218
219 \subsubsection{Tested with Version} \todo{Daniel: add tested version}
220
221 \subsubsection{Settings}
222
223
224 When trying to avoid RC4 and CBC (BEAST-Attack) and requiring perfect
225 forward secrecy, Microsoft Internet Information Server (IIS) supports
226 ECDSA, but does not support RSA for key exchange (consider ECC suite
227 B doubts\footnote{\url{http://safecurves.cr.yp.to/rigid.html}}).
228
229 Since \verb|ECDHE_RSA_*| is not supported, a SSL certificate based on
230 elliptic curves needs to be used.
231
232 The configuration of cipher suites MS IIS will use, can be configured in one
233 of the following ways:
234 \begin{enumerate}
235 \item Group Policy \footnote{\url{http://msdn.microsoft.com/en-us/library/windows/desktop/bb870930(v=vs.85).aspx}}
236 \item Registry
237 \item IIS Crypto~\footnote{\url{https://www.nartac.com/Products/IISCrypto/}}
238 \end{enumerate}
239
240
241 Table~\ref{tab:MS_IIS_Client_Support} shows the process of turning on
242 one algorithm after another and the effect on the supported clients
243 tested using https://www.ssllabs.com.
244
245 \verb|SSL 3.0|, \verb|SSL 2.0| and \verb|MD5| are turned off.
246 \verb|TLS 1.0| and \verb|TLS 2.0| are turned on.
247
248 \begin{table}[h]
249   \centering
250   \small
251   \begin{tabular}{ll}
252     \toprule
253     Cipher Suite & Client \\
254     \midrule
255     \verb|TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256| & only IE 10,11, OpenSSL 1.0.1e \\
256     \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256| & Chrome 30, Opera 17, Safari 6+ \\
257     \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA| & FF 10-24, IE 8+, Safari 5, Java 7\\
258     \bottomrule 
259  \end{tabular}
260   \caption{Client support}
261   \label{tab:MS_IIS_Client_Support}
262 \end{table}
263
264 Table~\ref{tab:MS_IIS_Client_Support} shows the algoriths from
265 strongest to weakest and why they need to be added in this order. For
266 example insisting on SHA-2 algorithms (only first two lines) would
267 eliminate all versions of Firefox, so the last line is needed to
268 support this browser, but should be placed at the bottom, so capable
269 browsers will choose the stronger SHA-2 algorithms.
270
271 \verb|TLS_RSA_WITH_RC4_128_SHA| or equivalent should also be added if
272 MS Terminal Server Connection is used (make sure to use this only in a
273 trusted environment). This suite will not be used for SSL, since we do
274 not use a RSA Key.
275
276
277 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256| ... only supported by: IE 10,11, OpenSSL 1.0.1e
278 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256| ... Chrome 30, Opera 17, Safari 6+
279 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA| ... Firefox 10-24, IE 8+, Safari 5, Java 7
280
281
282 Clients not supported:
283 \begin{enumerate}
284 \item Java 6
285 \item WinXP
286 \item Bing
287 \end{enumerate}
288
289 \subsubsection{Additional settings}
290
291 %Here you can add additional settings
292
293 \subsubsection{Justification for special settings (if needed)}
294
295 % 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
296
297 \subsubsection{References}
298
299 \todo{add references}
300
301 % add any further references or best practice documents here
302
303 \subsubsection{How to test}
304 See section \ref{section:Tools}
305
306
307 %\end{description}