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