reformat ECC section
[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 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
77 \subsubsection{Settings}
78
79
80 %% Complete ssl.cipher-list with same algo than Apache
81 \todo{FIXME: this string seems to be wrongly formatted??}
82
83 \begin{lstlisting}[breaklines]
84   $SERVER["socket"] == "0.0.0.0:443" {
85     ssl.engine  = "enable"
86     ssl.use-sslv2 = "disable"
87     ssl.use-sslv3 = "disable"
88     #ssl.use-compression obsolete >= 1.4.3.1
89     ssl.pemfile = "/etc/lighttpd/server.pem"
90     ssl.cipher-list = '@@@CIPHERSTRINGB@@@'
91     ssl.honor-cipher-order = "enable"
92     setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=31536000")
93   }
94 \end{lstlisting}
95
96
97 \subsubsection{Additional settings}
98
99 As for any other webserver, you might want to automatically redirect http
100 traffic toward httpS:// It is also recommended to set the environment variable
101 \emph{HTTPS}, so the applications run by the webserver can easily detect, that
102 HTTPS is in use.
103
104
105
106 \begin{lstlisting}[breaklines]
107   $HTTP["scheme"] == "http" {
108     # capture vhost name with regex conditiona -> %0 in redirect pattern
109     # must be the most inner block to the redirect rule
110     $HTTP["host"] =~ ".*" {
111         url.redirect = (".*" => "https://%0$0")
112     }
113   }
114   # Set the environment variable properly
115   setenv.add-environment = (
116             "HTTPS" => "on"
117         )
118   }
119 \end{lstlisting}
120
121
122 \subsubsection{Additional information} 
123 The config option \emph{honor-cipher-order} is available since 1.4.30, the
124 supported ciphers depend on the used OpenSSL-version (at runtime). ECDH has to
125 be available in OpenSSL at compile-time, which should be default. SSL
126 compression should by deactivated by default at compile-time (if not, it's
127 active).
128
129 Support for other SSL-libraries like GnuTLS will be available in the upcoming
130 2.x branch, which is currently under development.
131
132
133 \subsubsection{References} 
134
135 \begin{itemize}
136         \item HTTPS redirection: \url{http://redmine.lighttpd.net/projects/1/wiki/HowToRedirectHttpToHttps}
137         \item Lighttpd Docs SSL: \url{http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs\_SSL}
138         \item Release 1.4.30 (How to mitigate BEAST attack) \url{http://redmine.lighttpd.net/projects/lighttpd/wiki/Release-1\_4\_30}
139         \item SSL Compression disabled by default: \url{http://redmine.lighttpd.net/issues/2445}
140 \end{itemize}
141
142
143
144
145 \subsubsection{How to test} 
146 See section \ref{section:Tools}
147
148 % 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.
149 %\end{description}
150
151
152 %%---------------------------------------------------------------------- 
153 \subsection{nginx}
154
155 %\begin{description}
156 \subsubsection{Tested with Version} 
157 \begin{itemize}
158 \item 1.4.4 with OpenSSL 1.0.1e on OS X Server 10.8.5
159 \item 1.2.1-2.2+wheezy2 with OpenSSL 1.0.1e on Debian Wheezy
160 \item 1.4.4 with OpenSSL 1.0.1e on Debian Wheezy
161 \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)
162 \end{itemize}
163
164
165 \subsubsection{Settings}
166
167 \begin{lstlisting}[breaklines]
168   ssl_prefer_server_ciphers on;
169   ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # not possible to do exclusive
170   ssl_ciphers '@@@CIPHERSTRINGB@@@';
171   add_header Strict-Transport-Security max-age=2592000;
172 \end{lstlisting}
173
174 If you absolutely want to specify your own DH parameters, you can specify them via
175
176 \begin{lstlisting}[breaklines]
177   ssl_dhparam file;
178 \end{lstlisting}
179
180 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).
181
182 \vskip 0.5em
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} 
200 \begin{itemize}
201 \item \url{http://nginx.org/en/docs/http/ngx_http_ssl_module.html}
202 \item \url{http://wiki.nginx.org/HttpSslModule}
203 \end{itemize}
204
205 \subsubsection{How to test}
206 See section \ref{section:Tools}
207
208
209
210
211
212 %%---------------------------------------------------------------------- 
213 \subsection{MS IIS}
214 \label{sec:ms-iis}
215
216
217 \todo{Daniel: add screenshots and registry keys}
218
219 %\begin{description}
220
221 \subsubsection{Tested with Version} \todo{Daniel: add tested version}
222
223 \subsubsection{Settings}
224
225
226 When trying to avoid RC4 and CBC (BEAST-Attack) and requiring perfect
227 forward secrecy, Microsoft Internet Information Server (IIS) supports
228 ECDSA, but does not support RSA for key exchange (consider ECC suite
229 B doubts\footnote{\url{http://safecurves.cr.yp.to/rigid.html}}).
230
231 Since \verb|ECDHE_RSA_*| is not supported, a SSL certificate based on
232 elliptic curves needs to be used.
233
234 The configuration of cipher suites MS IIS will use, can be configured in one
235 of the following ways:
236 \begin{enumerate}
237 \item Group Policy \footnote{\url{http://msdn.microsoft.com/en-us/library/windows/desktop/bb870930(v=vs.85).aspx}}
238 \item Registry
239 \item IIS Crypto~\footnote{\url{https://www.nartac.com/Products/IISCrypto/}}
240 \end{enumerate}
241
242
243 Table~\ref{tab:MS_IIS_Client_Support} shows the process of turning on
244 one algorithm after another and the effect on the supported clients
245 tested using https://www.ssllabs.com.
246
247 \verb|SSL 3.0|, \verb|SSL 2.0| and \verb|MD5| are turned off.
248 \verb|TLS 1.0| and \verb|TLS 2.0| are turned on.
249
250 \begin{table}[h]
251   \centering
252   \small
253   \begin{tabular}{ll}
254     \toprule
255     Cipher Suite & Client \\
256     \midrule
257     \verb|TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256| & only IE 10,11, OpenSSL 1.0.1e \\
258     \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256| & Chrome 30, Opera 17, Safari 6+ \\
259     \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA| & FF 10-24, IE 8+, Safari 5, Java 7\\
260     \bottomrule 
261  \end{tabular}
262   \caption{Client support}
263   \label{tab:MS_IIS_Client_Support}
264 \end{table}
265
266 Table~\ref{tab:MS_IIS_Client_Support} shows the algorithms from
267 strongest to weakest and why they need to be added in this order. For
268 example insisting on SHA-2 algorithms (only first two lines) would
269 eliminate all versions of Firefox, so the last line is needed to
270 support this browser, but should be placed at the bottom, so capable
271 browsers will choose the stronger SHA-2 algorithms.
272
273 \verb|TLS_RSA_WITH_RC4_128_SHA| or equivalent should also be added if
274 MS Terminal Server Connection is used (make sure to use this only in a
275 trusted environment). This suite will not be used for SSL, since we do
276 not use a RSA Key.
277
278
279 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256| ... only supported by: IE 10,11, OpenSSL 1.0.1e
280 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256| ... Chrome 30, Opera 17, Safari 6+
281 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA| ... Firefox 10-24, IE 8+, Safari 5, Java 7
282
283
284 Clients not supported:
285 \begin{enumerate}
286 \item Java 6
287 \item WinXP
288 \item Bing
289 \end{enumerate}
290
291 \subsubsection{Additional settings}
292
293 %Here you can add additional settings
294
295 \subsubsection{Justification for special settings (if needed)}
296
297 % 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
298
299 \subsubsection{References}
300
301 \todo{add references}
302
303 % add any further references or best practice documents here
304
305 \subsubsection{How to test}
306 See section \ref{section:Tools}
307
308
309 %\end{description}