1 %%\subsection{Webservers}
6 \item[Tested with Version:]
8 \item[Settings:] \mbox{}
10 %-All +TLSv1.1 +TLSv1.2
11 \begin{lstlisting}[breaklines]
12 SSLProtocol All -SSLv2 -SSLv3
13 SSLHonorCipherOrder On
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
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'
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!
27 \item[Additional settings:]
29 You should redirect everything to httpS:// if possible. In Apache you can do this with the following setting inside of a VirtualHost environment:
31 \begin{lstlisting}[breaklines]
35 RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=permanent]
40 \item[Justification for special settings (if needed):]
46 See ssllabs in section \ref{section:Tools}
49 %XXXX ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5:!DSS
52 \subsubsection{lighttpd}
57 \item[Tested with Version:]
61 \item[Settings:] \mbox{}
64 %% Complete ssl.cipher-list with same algo than Apache
65 \todo{FIXME: this string seems to be wrongly formatted??}
67 \begin{lstlisting}[breaklines]
68 $SERVER["socket"] == "0.0.0.0:443" {
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")
81 \item[Additional settings:]
83 As for any other webserver, you should redirect automatically http traffic toward httpS://
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")
97 \todo{add references}.
98 lighttpd httpS:// redirection: \url{http://redmine.lighttpd.net/projects/1/wiki/HowToRedirectHttpToHttps}
100 % add any further references or best practice documents here
102 \item[How to test:] See ssllabs in section \ref{section:Tools}
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.
108 \subsubsection{nginx}
111 \item[Tested with Version:] 1.4.4 with OpenSSL 1.0.1e on OS X Server 10.8.5
113 1.2.1-2.2+wheezy2 with OpenSSL 1.0.1e on Debian Wheezy
114 1.4.4 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
121 \item[Settings:] \mbox{}
123 \begin{lstlisting}[breaklines]
124 ssl_prefer_server_ciphers on;
125 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
126 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';
127 add_header Strict-Transport-Security max-age=2592000;
130 %% XXX FIXME: do we need to specify dhparams? Parameter: ssl_dhparam = file. See: http://wiki.nginx.org/HttpSslModule#ssl_protocols
132 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.
133 \begin{lstlisting}[breaklines]
138 \item[Additional settings:]
140 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:
142 \begin{lstlisting}[breaklines]
143 ssl_ecdh_curve secp384r1;
146 You should redirect everything to httpS:// if possible. In Nginx you can do this with the following setting:
148 \begin{lstlisting}[breaklines]
149 rewrite ^(.*) https://$host$1 permanent;
153 \item[References:] \todo{add references}
155 \item[How to test:] See ssllabs in section \ref{section:Tools}
163 \subsubsection{MS IIS}
167 \todo{Daniel: add screenshots and registry keys}
171 \item[Tested with Version:] \todo{Daniel: add tested version}
173 \item[Settings:] \mbox{}
176 When trying to avoid RC4 and CBC (BEAST-Attack) and requiring perfect
177 forward secrecy, Microsoft Internet Information Server (IIS) supports
178 ECDSA, but does not support RSA for key exchange (consider ECC suite
179 B doubts\footnote{\url{http://safecurves.cr.yp.to/rigid.html}}).
181 Since \verb|ECDHE_RSA_*| is not supported, a SSL certificate based on
182 elliptic curves needs to be used.
184 The configuration of cipher suites MS IIS will use can be configured in one
185 of the following ways:
187 \item Group Policy \footnote{\url{http://msdn.microsoft.com/en-us/library/windows/desktop/bb870930(v=vs.85).aspx}}
189 \item IIS Crypto~\footnote{\url{https://www.nartac.com/Products/IISCrypto/}}
193 Table~\ref{tab:MS_IIS_Client_Support} shows the process of turning on
194 one algorithm after another and the effect on the supported Clients
195 tested using https://www.ssllabs.com.
197 \verb|SSL 3.0|, \verb|SSL 2.0| and \verb|MD5| are turned off.
198 \verb|TLS 1.0| and \verb|TLS 2.0| are turned on.
205 Cipher Suite & Client \\
207 \verb|TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256| & only IE 10,11, OpenSSL 1.0.1e \\
208 \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256| & Chrome 30, Opera 17, Safari 6+ \\
209 \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA| & FF 10-24, IE 8+, Safari 5, Java 7\\
212 \caption{Client support}
213 \label{tab:MS_IIS_Client_Support}
216 Table~\ref{tab:MS_IIS_Client_Support} shows the algoriths from
217 strongest to weakest and why they need to be added in this order. For
218 example insisting on SHA-2 algorithms (only first two lines) would
219 eliminate all versions of Firefox, so the last line is needed to
220 support this browser, but should be placed at the bottom, so capable
221 browsers will choose the stronger SHA-2 algorithms.
223 \verb|TLS_RSA_WITH_RC4_128_SHA| or equivalent should also be added if
224 MS Terminal Server Connection is used (make sure to use this only in a
225 trusted environment). This suite will not be used for SSL, since we do
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
234 Not supported Clients:
241 \item[Additional settings:]
243 %Here you can add additional settings
245 \item[Justification for special settings (if needed):]
247 % 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
251 \todo{add references}
253 % add any further references or best practice documents here
255 \item[How to test:] See ssllabs in section \ref{section:Tools}