Changes nginx ECC curve selection example to the least-bad but actually widely suppor...
[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:]
112
113 \todo{version?}
114
115 \item[Settings:] \mbox{}
116
117 \begin{lstlisting}[breaklines]
118   ssl_prefer_server_ciphers on;
119   ssl_protocols -SSLv2 -SSLv3; 
120   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';
121   add_header Strict-Transport-Security max-age=2592000;
122   add_header X-Frame-Options DENY;
123 \end{lstlisting}
124
125 %% XXX FIXME: do we need to specify dhparams? Parameter: ssl_dhparam = file. See: http://wiki.nginx.org/HttpSslModule#ssl_protocols
126
127 \item[Additional settings:]
128
129 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:
130
131 \begin{lstlisting}[breaklines]
132   ssl_ecdh_curve          secp384r1;
133 \end{lstlisting}
134
135 You should redirect everything to httpS:// if possible. In Nginx you can do this with the following setting:
136
137 \begin{lstlisting}[breaklines]
138   rewrite     ^(.*)   https://$host$1 permanent;
139 \end{lstlisting}
140
141
142 \item[References:] \todo{add references}
143
144 \item[How to test:] See ssllabs in section \ref{section:Tools}
145
146 \end{description}
147
148
149
150
151
152 \subsubsection{MS IIS}
153 \label{sec:ms-iis}
154
155
156 \todo{Daniel: add screenshots and registry keys}
157
158 \begin{description}
159
160 \item[Tested with Version:] \todo{Daniel: add tested version}
161
162 \item[Settings:] \mbox{}
163
164
165 When trying to avoid RC4 and CBC (BEAST-Attack) and requiring perfect
166 forward secrecy, Microsoft Internet Information Server (IIS) supports
167 ECDSA, but does not support RSA for key exchange (consider ECC suite
168 B doubts\footnote{\url{http://safecurves.cr.yp.to/rigid.html}}).
169
170 Since \verb|ECDHE_RSA_*| is not supported, a SSL certificate based on
171 elliptic curves needs to be used.
172
173 The configuration of cipher suites MS IIS will use can be configured in one
174 of the following ways:
175 \begin{enumerate}
176 \item Group Policy \footnote{\url{http://msdn.microsoft.com/en-us/library/windows/desktop/bb870930(v=vs.85).aspx}}
177 \item Registry
178 \item IIS Crypto~\footnote{\url{https://www.nartac.com/Products/IISCrypto/}}
179 \end{enumerate}
180
181
182 Table~\ref{tab:MS_IIS_Client_Support} shows the process of turning on
183 one algorithm after another and the effect on the supported Clients
184 tested using https://www.ssllabs.com.
185
186 \verb|SSL 3.0|, \verb|SSL 2.0| and \verb|MD5| are turned off.
187 \verb|TLS 1.0| and \verb|TLS 2.0| are turned on.
188
189 \begin{table}[h]
190   \centering
191   \small
192   \begin{tabular}{ll}
193     \toprule
194     Cipher Suite & Client \\
195     \midrule
196     \verb|TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256| & only IE 10,11, OpenSSL 1.0.1e \\
197     \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256| & Chrome 30, Opera 17, Safari 6+ \\
198     \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA| & FF 10-24, IE 8+, Safari 5, Java 7\\
199     \bottomrule 
200  \end{tabular}
201   \caption{Client support}
202   \label{tab:MS_IIS_Client_Support}
203 \end{table}
204
205 Table~\ref{tab:MS_IIS_Client_Support} shows the algoriths from
206 strongest to weakest and why they need to be added in this order. For
207 example insisting on SHA-2 algorithms (only first two lines) would
208 eliminate all versions of Firefox, so the last line is needed to
209 support this browser, but should be placed at the bottom, so capable
210 browsers will choose the stronger SHA-2 algorithms.
211
212 \verb|TLS_RSA_WITH_RC4_128_SHA| or equivalent should also be added if
213 MS Terminal Server Connection is used (make sure to use this only in a
214 trusted environment). This suite will not be used for SSL, since we do
215 not use a RSA Key.
216
217
218 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256| ... only supported by: IE 10,11, OpenSSL 1.0.1e
219 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256| ... Chrome 30, Opera 17, Safari 6+
220 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA| ... Firefox 10-24, IE 8+, Safari 5, Java 7
221
222
223 Not supported Clients:
224 \begin{enumerate}
225 \item Java 6
226 \item WinXP
227 \item Bing
228 \end{enumerate}
229
230 \item[Additional settings:]
231
232 %Here you can add additional settings
233
234 \item[Justification for special settings (if needed):]
235
236 % 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
237
238 \item[References:]
239
240 \todo{add references}
241
242 % add any further references or best practice documents here
243
244 \item[How to test:] See ssllabs in section \ref{section:Tools}
245
246
247 \end{description}