added nginx "test with" debian version
[ach-master.git] / src / practical_settings / webserver.tex
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   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'
22 \end{lstlisting}
23
24 Note again, that any cipher suite starting with ECDHE  can be omitted in case of doubt.
25 %% XXX NOTE TO SELF: remove from future automatically generated lists!
26
27 \item[Additional settings:]
28
29 You should redirect everything to httpS:// if possible. In Apache you can do this with the following setting inside of a VirtualHost environment:
30
31 \begin{lstlisting}[breaklines]
32   <VirtualHost *:80>
33    #...
34    RewriteEngine On
35         RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=permanent]
36    #...
37   </VirtualHost>
38 \end{lstlisting}
39
40 \item[Justification for special settings (if needed):]
41
42 \item[References:]
43
44 \item[How to test:]
45
46 See ssllabs in section \ref{section:Tools}
47
48 \end{description}
49 %XXXX   ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5:!DSS
50
51
52 \subsubsection{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 redirect automatically 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 \subsubsection{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
115 \todo{version?}
116
117 \item[Settings:] \mbox{}
118
119 \begin{lstlisting}[breaklines]
120   ssl_prefer_server_ciphers on;
121   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
122   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';
123   add_header Strict-Transport-Security max-age=2592000;
124 \end{lstlisting}
125
126 %% XXX FIXME: do we need to specify dhparams? Parameter: ssl_dhparam = file. See: http://wiki.nginx.org/HttpSslModule#ssl_protocols
127
128 It is recommended to specify your own Diffie-Hellman Parameters file of at least the same bit size as your RSA key. Eg. use no less than 2048bit DH parameters with a 2048bit RSA key.
129 \begin{lstlisting}[breaklines]
130   ssl_dhparam file;
131 \end{lstlisting}
132
133
134 \item[Additional settings:]
135
136 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:
137
138 \begin{lstlisting}[breaklines]
139   ssl_ecdh_curve          secp384r1;
140 \end{lstlisting}
141
142 You should redirect everything to httpS:// if possible. In Nginx you can do this with the following setting:
143
144 \begin{lstlisting}[breaklines]
145   rewrite     ^(.*)   https://$host$1 permanent;
146 \end{lstlisting}
147
148
149 \item[References:] \todo{add references}
150
151 \item[How to test:] See ssllabs in section \ref{section:Tools}
152
153 \end{description}
154
155
156
157
158
159 \subsubsection{MS IIS}
160 \label{sec:ms-iis}
161
162
163 \todo{Daniel: add screenshots and registry keys}
164
165 \begin{description}
166
167 \item[Tested with Version:] \todo{Daniel: add tested version}
168
169 \item[Settings:] \mbox{}
170
171
172 When trying to avoid RC4 and CBC (BEAST-Attack) and requiring perfect
173 forward secrecy, Microsoft Internet Information Server (IIS) supports
174 ECDSA, but does not support RSA for key exchange (consider ECC suite
175 B doubts\footnote{\url{http://safecurves.cr.yp.to/rigid.html}}).
176
177 Since \verb|ECDHE_RSA_*| is not supported, a SSL certificate based on
178 elliptic curves needs to be used.
179
180 The configuration of cipher suites MS IIS will use can be configured in one
181 of the following ways:
182 \begin{enumerate}
183 \item Group Policy \footnote{\url{http://msdn.microsoft.com/en-us/library/windows/desktop/bb870930(v=vs.85).aspx}}
184 \item Registry
185 \item IIS Crypto~\footnote{\url{https://www.nartac.com/Products/IISCrypto/}}
186 \end{enumerate}
187
188
189 Table~\ref{tab:MS_IIS_Client_Support} shows the process of turning on
190 one algorithm after another and the effect on the supported Clients
191 tested using https://www.ssllabs.com.
192
193 \verb|SSL 3.0|, \verb|SSL 2.0| and \verb|MD5| are turned off.
194 \verb|TLS 1.0| and \verb|TLS 2.0| are turned on.
195
196 \begin{table}[h]
197   \centering
198   \small
199   \begin{tabular}{ll}
200     \toprule
201     Cipher Suite & Client \\
202     \midrule
203     \verb|TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256| & only IE 10,11, OpenSSL 1.0.1e \\
204     \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256| & Chrome 30, Opera 17, Safari 6+ \\
205     \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA| & FF 10-24, IE 8+, Safari 5, Java 7\\
206     \bottomrule 
207  \end{tabular}
208   \caption{Client support}
209   \label{tab:MS_IIS_Client_Support}
210 \end{table}
211
212 Table~\ref{tab:MS_IIS_Client_Support} shows the algoriths from
213 strongest to weakest and why they need to be added in this order. For
214 example insisting on SHA-2 algorithms (only first two lines) would
215 eliminate all versions of Firefox, so the last line is needed to
216 support this browser, but should be placed at the bottom, so capable
217 browsers will choose the stronger SHA-2 algorithms.
218
219 \verb|TLS_RSA_WITH_RC4_128_SHA| or equivalent should also be added if
220 MS Terminal Server Connection is used (make sure to use this only in a
221 trusted environment). This suite will not be used for SSL, since we do
222 not use a RSA Key.
223
224
225 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256| ... only supported by: IE 10,11, OpenSSL 1.0.1e
226 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256| ... Chrome 30, Opera 17, Safari 6+
227 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA| ... Firefox 10-24, IE 8+, Safari 5, Java 7
228
229
230 Not supported Clients:
231 \begin{enumerate}
232 \item Java 6
233 \item WinXP
234 \item Bing
235 \end{enumerate}
236
237 \item[Additional settings:]
238
239 %Here you can add additional settings
240
241 \item[Justification for special settings (if needed):]
242
243 % 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
244
245 \item[References:]
246
247 \todo{add references}
248
249 % add any further references or best practice documents here
250
251 \item[How to test:] See ssllabs in section \ref{section:Tools}
252
253
254 \end{description}