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