Add information about DH param compatibility
[ach-master.git] / src / practical_settings / webserver.tex
1 %%---------------------------------------------------------------------- 
2 \subsection{Apache}
3
4 Note that any cipher suite starting with EECDH can be omitted, if in doubt.
5 (Compared to the theory section, EECDH in Apache and ECDHE in OpenSSL are
6 synonyms~\footnote{https://www.mail-archive.com/openssl-dev@openssl.org/msg33405.html})
7
8 \subsubsection{Tested with Versions}
9 \begin{itemize*}
10   \item Apache 2.2.22 linked against OpenSSL 1.0.1e, Debian Wheezy
11   \item Apache 2.4.6 linked against OpenSSL 1.0.1e, Debian Jessie
12 \end{itemize*}
13
14 \subsubsection{Settings}
15 Enabled modules \emph{SSL} and \emph{Headers} are required.
16
17 \configfile{default-ssl}{162-170}{SSL configuration for an Apache vhost}
18
19 \subsubsection{Additional settings}
20 You might want to redirect everything to \emph{https://} if possible. In Apache
21 you can do this with the following setting inside of a VirtualHost environment:
22
23 \configfile{hsts-vhost}{}{https auto-redirect vhost}
24
25 %\subsubsection{Justification for special settings (if needed)}
26
27 \subsubsection{References}
28 \begin{itemize*}
29   \item Apache2 Docs on SSL and TLS: \url{https://httpd.apache.org/docs/2.4/ssl/}
30 \end{itemize*}
31
32
33 \subsubsection{How to test}
34 See appendix \ref{cha:tools}
35
36
37 %%---------------------------------------------------------------------- 
38 \subsection{lighttpd}
39
40 \subsubsection{Tested with Versions}
41 \begin{itemize*}
42   \item lighttpd/1.4.31-4 with OpenSSL 1.0.1e on Debian Wheezy
43   \item lighttpd/1.4.33 with OpenSSL 0.9.8o on Debian Squeeze (note that TLSv1.2 does not work in openssl 0.9.8 thus not all ciphers actually work)
44   \item lighttpd/1.4.28-2 with OpenSSL 0.9.8o on Debian Squeeze (note that TLSv1.2 does not work in openssl 0.9.8 thus not all ciphers actually work)
45 \end{itemize*}
46
47
48 \subsubsection{Settings}
49 \configfile{10-ssl.conf}{3-14}{SSL configuration for lighttpd}
50
51 Starting with lighttpd version 1.4.29 Diffie-Hellman and Elliptic-Curve Diffie-Hellman key agreement protocols are supported.
52 By default, elliptic curve "prime256v1" (also "secp256r1") will be used, if no other is given.
53 To select special curves, it is possible to set them using the configuration options \verb|ssl.dh-file| and \verb|ssl.ec-curve|.
54
55 \configfile{10-ssl-dh.conf}{11-13}{SSL EC/DH configuration for lighttpd}
56
57 Please read section \ref{section:DH} for more information on Diffie Hellman key exchange and elliptic curves.
58
59 \subsubsection{Additional settings}
60 As for any other webserver, you might want to automatically redirect \emph{http://}
61 traffic toward \emph{https://}. It is also recommended to set the environment variable
62 \emph{HTTPS}, so the PHP applications run by the webserver can easily detect
63 that HTTPS is in use.
64
65 \configfile{11-hsts.conf}{}{https auto-redirect configuration}
66
67 \subsubsection{Additional information} 
68 The config option \emph{honor-cipher-order} is available since 1.4.30, the
69 supported ciphers depend on the used OpenSSL-version (at runtime). ECDHE has to
70 be available in OpenSSL at compile-time, which should be default. SSL
71 compression should by deactivated by default at compile-time (if not, it's
72 active).
73
74 Support for other SSL-libraries like GnuTLS will be available in the upcoming
75 2.x branch, which is currently under development.
76
77
78 \subsubsection{References} 
79 \begin{itemize*}
80   \item HTTPS redirection: \url{http://redmine.lighttpd.net/projects/1/wiki/HowToRedirectHttpToHttps}
81   \item Lighttpd Docs SSL: \url{http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs\_SSL}
82   \item Release 1.4.30 (How to mitigate BEAST attack) \url{http://redmine.lighttpd.net/projects/lighttpd/wiki/Release-1\_4\_30}
83   \item SSL Compression disabled by default: \url{http://redmine.lighttpd.net/issues/2445}
84 \end{itemize*}
85
86
87 \subsubsection{How to test} 
88 See appendix \ref{cha:tools}
89
90
91 %%---------------------------------------------------------------------- 
92 \subsection{nginx}
93
94 \subsubsection{Tested with Version} 
95 \begin{itemize*}
96   \item 1.4.4 with OpenSSL 1.0.1e on OS X Server 10.8.5
97   \item 1.2.1-2.2+wheezy2 with OpenSSL 1.0.1e on Debian Wheezy
98   \item 1.4.4 with OpenSSL 1.0.1e on Debian Wheezy
99   \item 1.2.1-2.2~bpo60+2 with OpenSSL 0.9.8o on Debian Squeeze (note that TLSv1.2 does not work in openssl 0.9.8 thus not all ciphers actually work)
100 \end{itemize*}
101
102
103 \subsubsection{Settings}
104 \configfile{default}{113-118}{SSL settings for nginx}
105 If you absolutely want to specify your own DH parameters, you can specify them via
106
107 \begin{lstlisting}
108 ssl_dhparam file;
109 \end{lstlisting}
110
111 However, we advise you to read section \ref{section:DH} and stay with the standard IKE/IETF parameters (as long as they are \textgreater 1024 bits).
112
113 \subsubsection{Additional settings}
114 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:
115
116 \configfile{default-ec}{119-119}{SSL EC/DH settings for nginx}
117
118 You might want to redirect everything to \emph{https://} if possible. In Nginx you can do this with the following setting:
119
120 \configfile{default-hsts}{29-29}{https auto-redirect in nginx}
121
122 \subsubsection{References} 
123 \begin{itemize*}
124   \item \url{http://nginx.org/en/docs/http/ngx_http_ssl_module.html}
125   \item \url{http://wiki.nginx.org/HttpSslModule}
126 \end{itemize*}
127
128 \subsubsection{How to test}
129 See appendix \ref{cha:tools}
130
131
132 %%---------------------------------------------------------------------- 
133 \subsection{MS IIS}
134 \label{sec:ms-iis}
135
136 To configure SSL/TLS on Windows Server IIS Crypto can be used.~\footnote{\url{https://www.nartac.com/Products/IISCrypto/}}
137 Simply start the Programm, no installation required. The tool changes the registry keys described below.
138 A restart is required for the changes to take effect.
139
140 \begin{figure}[p]
141   \centering
142   \includegraphics[width=0.411\textwidth]{img/IISCryptoConfig.png}
143   \caption{IIS Crypto Tool}
144   \label{fig:IISCryptoConfig}
145 \end{figure}
146
147 Instead of using the IIS Crypto Tool the configuration can be set
148 using the Windows Registry. The following Registry keys apply to the
149 newer Versions of Windows (Windows 7, Windows Server 2008, Windows
150 Server 2008 R2, Windows Server 2012 and Windows Server 2012 R2). For detailed
151 information about the older versions see the Microsoft knowledgebase
152 article. \footnote{\url{http://support.microsoft.com/kb/245030/en-us}}
153 \begin{lstlisting}[breaklines]
154   [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel] 
155   [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Ciphers] 
156   [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\CipherSuites] 
157   [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Hashes] 
158   [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\KeyExchangeAlgorithms] 
159   [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols] 
160 \end{lstlisting}
161
162 \subsubsection{Tested with Version} 
163 \begin{itemize*}
164   \item Windows Server 2008
165   \item Windows Server 2008 R2
166   \item Windows Server 2012
167   \item Windows Server 2012 R2
168 \end{itemize*}
169
170 \begin{itemize*}
171   \item Windows Vista and Internet Explorer 7 and upwards
172   \item Windows 7 and Internet Explorer 8 and upwards
173   \item Windows 8 and Internet Explorer 10 and upwards
174   \item Windows 8.1 and Internet Explorer 11
175 \end{itemize*}
176
177
178
179
180
181
182 \subsubsection{Settings}
183 When trying to avoid RC4 (RC4 biases) as well as CBC (BEAST-Attack) by using GCM and to support perfect
184 forward secrecy, Microsoft SChannel (SSL/TLS, Auth,.. Stack) supports
185 ECDSA but lacks support for RSA signatures (see ECC suite
186 B doubts\footnote{\url{http://safecurves.cr.yp.to/rigid.html}}).
187
188 Since one is stuck with ECDSA, an elliptic curve certificate needs to be used.
189
190 The configuration of cipher suites MS IIS will use, can be configured in one
191 of the following ways:
192 \begin{enumerate}
193   \item Group Policy \footnote{\url{http://msdn.microsoft.com/en-us/library/windows/desktop/bb870930(v=vs.85).aspx}}
194   \item Registry  \footnote{\url{http://support.microsoft.com/kb/245030 }}
195   \item IIS Crypto~\footnote{\url{https://www.nartac.com/Products/IISCrypto/}}
196   \item Powershell 
197 \end{enumerate}
198
199
200 Table~\ref{tab:MS_IIS_Client_Support} shows the process of turning on
201 one algorithm after another and the effect on the supported clients
202 tested using https://www.ssllabs.com.
203
204 \verb|SSL 3.0|, \verb|SSL 2.0| and \verb|MD5| are turned off.
205 \verb|TLS 1.0| and \verb|TLS 1.2| are turned on.
206
207 \ctable[%
208 caption={Client support},
209 label=tab:MS_IIS_Client_Support,
210 ]{ll}{}{%
211 \FL    Cipher Suite & Client
212 \ML    \lstinline+TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256+ & only IE 10,11, OpenSSL 1.0.1e
213 \NN    \lstinline+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256+ & Chrome 30, Opera 17, Safari 6+
214 \NN    \lstinline+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA+ & FF 10-24, IE 8+, Safari 5, Java 7
215 \LL}
216
217 Table~\ref{tab:MS_IIS_Client_Support} shows the algorithms from
218 strongest to weakest and why they need to be added in this order. For
219 example insisting on SHA-2 algorithms (only first two lines) would
220 eliminate all versions of Firefox, so the last line is needed to
221 support this browser, but should be placed at the bottom, so capable
222 browsers will choose the stronger SHA-2 algorithms.
223
224 \verb|TLS_RSA_WITH_RC4_128_SHA| or equivalent should also be added if
225 MS Terminal Server Connection is used (make sure to use this only in a
226 trusted environment). This suite will not be used for SSL, since we do
227 not use a RSA Key.
228
229 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256| ... only supported by: IE 10,11, OpenSSL 1.0.1e
230 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256| ... Chrome 30, Opera 17, Safari 6+
231 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA| ... Firefox 10-24, IE 8+, Safari 5, Java 7
232
233 Clients not supported:
234 \begin{enumerate}
235   \item Java 6
236   \item WinXP
237   \item Bing
238 \end{enumerate}
239
240
241 \subsubsection{Additional settings}
242 %Here you can add additional settings
243 It's recommended to use Strict-Transport-Security: max-age=15768000 
244 for detailed information visit the
245 \footnote{\url{http://www.iis.net/configreference/system.webserver/httpprotocol/customheaders}}
246 Microsoft knowledgebase.
247
248 You might want to redirect everything to http\textbf{s}:// if possible. In IIS you can do this with the following setting by Powershell:
249
250 \begin{lstlisting}[breaklines]
251 Set-WebConfiguration -Location "$WebSiteName/$WebApplicationName" `
252     -Filter 'system.webserver/security/access' `
253     -Value "SslRequireCert"
254 \end{lstlisting}
255
256 \subsubsection{Justification for special settings (if needed)}
257 % 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
258
259
260 \subsubsection{References}
261 \begin{itemize*}
262 \item \url{http://support.microsoft.com/kb/245030/en-us}
263 \item \url{http://support.microsoft.com/kb/187498/en-us}
264 \end{itemize*}
265
266 % add any further references or best practice documents here
267
268
269 \subsubsection{How to test}
270 See appendix \ref{cha:tools}
271
272 %%---------------------------------------------------------------------- 
273
274 %%% Local Variables: 
275 %%% mode: latex
276 %%% TeX-master: "../applied-crypto-hardening"
277 %%% End: