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