Add information about DH param compatibility
[ach-master.git] / src / practical_settings / webserver.tex
index 676d7e8..d39de0c 100644 (file)
@@ -52,14 +52,14 @@ Starting with lighttpd version 1.4.29 Diffie-Hellman and Elliptic-Curve Diffie-H
 By default, elliptic curve "prime256v1" (also "secp256r1") will be used, if no other is given.
 To select special curves, it is possible to set them using the configuration options \verb|ssl.dh-file| and \verb|ssl.ec-curve|.
 
-\configfile{10-ssl-dh.conf}{11-12}{SSL EC/DH configuration for lighttpd}
+\configfile{10-ssl-dh.conf}{11-13}{SSL EC/DH configuration for lighttpd}
 
 Please read section \ref{section:DH} for more information on Diffie Hellman key exchange and elliptic curves.
 
 \subsubsection{Additional settings}
 As for any other webserver, you might want to automatically redirect \emph{http://}
 traffic toward \emph{https://}. It is also recommended to set the environment variable
-\emph{HTTPS}, so the PHP applications run by the webserver can easily detect,
+\emph{HTTPS}, so the PHP applications run by the webserver can easily detect
 that HTTPS is in use.
 
 \configfile{11-hsts.conf}{}{https auto-redirect configuration}
@@ -132,27 +132,68 @@ See appendix \ref{cha:tools}
 %%---------------------------------------------------------------------- 
 \subsection{MS IIS}
 \label{sec:ms-iis}
-\todo{Daniel: add screenshots and registry keys}
+
+To configure SSL/TLS on Windows Server IIS Crypto can be used.~\footnote{\url{https://www.nartac.com/Products/IISCrypto/}}
+Simply start the Programm, no installation required. The tool changes the registry keys described below.
+A restart is required for the changes to take effect.
+
+\begin{figure}[p]
+  \centering
+  \includegraphics[width=0.411\textwidth]{img/IISCryptoConfig.png}
+  \caption{IIS Crypto Tool}
+  \label{fig:IISCryptoConfig}
+\end{figure}
+
+Instead of using the IIS Crypto Tool the configuration can be set
+using the Windows Registry. The following Registry keys apply to the
+newer Versions of Windows (Windows 7, Windows Server 2008, Windows
+Server 2008 R2, Windows Server 2012 and Windows Server 2012 R2). For detailed
+information about the older versions see the Microsoft knowledgebase
+article. \footnote{\url{http://support.microsoft.com/kb/245030/en-us}}
+\begin{lstlisting}[breaklines]
+  [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel] 
+  [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Ciphers] 
+  [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\CipherSuites] 
+  [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Hashes] 
+  [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\KeyExchangeAlgorithms] 
+  [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols] 
+\end{lstlisting}
+
+\subsubsection{Tested with Version} 
+\begin{itemize*}
+  \item Windows Server 2008
+  \item Windows Server 2008 R2
+  \item Windows Server 2012
+  \item Windows Server 2012 R2
+\end{itemize*}
+
+\begin{itemize*}
+  \item Windows Vista and Internet Explorer 7 and upwards
+  \item Windows 7 and Internet Explorer 8 and upwards
+  \item Windows 8 and Internet Explorer 10 and upwards
+  \item Windows 8.1 and Internet Explorer 11
+\end{itemize*}
+
+
 
 
-\subsubsection{Tested with Version} \todo{Daniel: add tested version}
 
 
 \subsubsection{Settings}
-When trying to avoid RC4 and CBC (BEAST-Attack) and requiring perfect
-forward secrecy, Microsoft Internet Information Server (IIS) supports
-ECDSA, but does not support RSA for key exchange (consider ECC suite
+When trying to avoid RC4 (RC4 biases) as well as CBC (BEAST-Attack) by using GCM and to support perfect
+forward secrecy, Microsoft SChannel (SSL/TLS, Auth,.. Stack) supports
+ECDSA but lacks support for RSA signatures (see ECC suite
 B doubts\footnote{\url{http://safecurves.cr.yp.to/rigid.html}}).
 
-Since \verb|ECDHE_RSA_*| is not supported, a SSL certificate based on
-elliptic curves needs to be used.
+Since one is stuck with ECDSA, an elliptic curve certificate needs to be used.
 
 The configuration of cipher suites MS IIS will use, can be configured in one
 of the following ways:
 \begin{enumerate}
   \item Group Policy \footnote{\url{http://msdn.microsoft.com/en-us/library/windows/desktop/bb870930(v=vs.85).aspx}}
-  \item Registry
+  \item Registry  \footnote{\url{http://support.microsoft.com/kb/245030 }}
   \item IIS Crypto~\footnote{\url{https://www.nartac.com/Products/IISCrypto/}}
+  \item Powershell 
 \end{enumerate}
 
 
@@ -161,7 +202,7 @@ one algorithm after another and the effect on the supported clients
 tested using https://www.ssllabs.com.
 
 \verb|SSL 3.0|, \verb|SSL 2.0| and \verb|MD5| are turned off.
-\verb|TLS 1.0| and \verb|TLS 2.0| are turned on.
+\verb|TLS 1.0| and \verb|TLS 1.2| are turned on.
 
 \ctable[%
 caption={Client support},
@@ -199,14 +240,28 @@ Clients not supported:
 
 \subsubsection{Additional settings}
 %Here you can add additional settings
+It's recommended to use Strict-Transport-Security: max-age=15768000 
+for detailed information visit the
+\footnote{\url{http://www.iis.net/configreference/system.webserver/httpprotocol/customheaders}}
+Microsoft knowledgebase.
 
+You might want to redirect everything to http\textbf{s}:// if possible. In IIS you can do this with the following setting by Powershell:
+
+\begin{lstlisting}[breaklines]
+Set-WebConfiguration -Location "$WebSiteName/$WebApplicationName" `
+    -Filter 'system.webserver/security/access' `
+    -Value "SslRequireCert"
+\end{lstlisting}
 
 \subsubsection{Justification for special settings (if needed)}
 % 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
 
 
 \subsubsection{References}
-\todo{add references}
+\begin{itemize*}
+\item \url{http://support.microsoft.com/kb/245030/en-us}
+\item \url{http://support.microsoft.com/kb/187498/en-us}
+\end{itemize*}
 
 % add any further references or best practice documents here
 
@@ -215,52 +270,6 @@ Clients not supported:
 See appendix \ref{cha:tools}
 
 %%---------------------------------------------------------------------- 
-\subsection{Supporting older clients}
-% hack.
-\gdef\currentsectionname{Webservers-legacy}
-
-Older clients like Internet Explorer on Windows XP (actually the Windows XP
-crypto stack), Java 6 and Java 7 aren't supported by the recommended Variant B
-cipher string.
-To catch most of those old clients you might use their inability to understand
-SNI to create a catchall page with a default SSL server. On the default page
-you should provide information about upgrading their browser to the user.
-This will not work with Java 7 because Java 7 understands SNI.
-
-\subsubsection{Apache}
-% hack.
-\gdef\currentsubsectionname{Apache}
-
-Create a default SSL server:
-
-\configfile{ports.conf}{12-13}{SNI for SSL on Apache}
-\configfile{000-default-ssl}{2-14}{SNI catchall on Apache}
-
-The catchall virtual server needs to be the first server in the config.
-You also should not use snakeoil certificates (as in the snipplet above)
-but the very same certificate as you use for the real service. In case you
-provide several virtual servers via SNI, the certificate for the catchall page
-needs to include all their names.
-
-\subsubsection{lighttpd}
-% hack.
-\gdef\currentsubsectionname{lighttpd}
-
-\todo{someone needs to write that section or we just omit it}
-
-\subsubsection{nginx}
-% hack.
-\gdef\currentsubsectionname{nginx}
-
-Create a default SSL server:
-\configfile{default}{125-139}{SNI catchall on nginx}
-
-The real service then needs to be in its own server definition omitting the
-\texttt{default} keyword in the \texttt{listen} directive.
-You should not use snakeoil certificates (as in the snipplet above) but the
-very same certificate as you use for the real service. In case you provide
-several virtual servers via SNI, the certificate for the catchall page needs
-to include all their names.
 
 %%% Local Variables: 
 %%% mode: latex