Add OCSP stapling, HPKP and NPN.
authorMathias Schüpany <mathias@schuepany.at>
Sat, 9 May 2015 16:14:51 +0000 (18:14 +0200)
committerMathias Schüpany <mathias@schuepany.at>
Sat, 9 May 2015 16:14:51 +0000 (18:14 +0200)
src/common/names.tex
src/configuration/Proxies/HAProxy/haproxy.cfg
src/practical_settings/proxy_solutions.tex

index 75585ee..4b6ca4b 100644 (file)
 \newacronym{EDH}{edh}{Ephemeral Diffie-Hellman}
 \newacronym{EECDH}{eecdh\alsoidx{Diffie--Hellman}\alsoidx{elliptic curve}}{%
   elliptic curve ephemeral Diffie--Hellman}
+\newacronym{HPKP}{hpkp}{%
+  Public Key Pinning}
+\newacronym{HSTS}{hsts}{%
+  Strict Transport Security}
+\newacronym{NPN}{npn}{%
+  Next Protocol Negotiation}
 \newacronym{PFS}{pfs}{%
   perfect forward secrecy}
 \newacronym{RSA}{rsa}{Rivest Shamir Adleman}
index c2594a7..e4770f7 100644 (file)
@@ -1,7 +1,7 @@
 global
     ssl-default-bind-ciphers EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA
-    ssl-default-bind-options no-sslv3 #disable SSLv3
-    tune.ssl.default-dh-param 2048 #tune minimum DH to 2048
+    ssl-default-bind-options no-sslv3 no-tls-tickets #disable SSLv3
+    tune.ssl.default-dh-param 2048 #tune DH to 2048
     log 127.0.0.1    local0 notice
     user haproxy
     group haproxy
index 2b949fd..b930fe3 100644 (file)
@@ -107,6 +107,11 @@ Disabling protocols and ciphers in a forward proxy environment could lead to une
 %% ---------------------------------------------------------------------- 
 \subsection{HAProxy}
 % See http://www.haproxy.org/
+% See https://timtaubert.de/blog/2014/11/the-sad-state-of-server-side-tls-session-resumption-implementations/
+% See http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#5.1-npn
+% See http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#3.2-tune.ssl.cachesize
+% See https://kura.io/2014/07/02/haproxy-ocsp-stapling/
+% See https://kura.io/2015/01/27/hpkp-http-public-key-pinning-with-haproxy/
 
 HAProxy can be used as loadbalancer and proxy for TCP and HTTP-based applications. Since version 1.5 it supports SSL and IPv6.
 
@@ -120,6 +125,40 @@ HAProxy can be used as loadbalancer and proxy for TCP and HTTP-based application
 \configfile{haproxy.cfg}{21-25}{frontend configuration}
 \configfile{haproxy.cfg}{27-33}{backend configuration}
 
+\subsubsection{Additional Settings}
+\paragraph*{Enable \ac{NPN} Support:}
+~
+\begin{lstlisting}
+       bind *:443 ssl crt server.pem npn "http/1.1,http/1.0"
+\end{lstlisting}
+Append the npn command in the frontend configuration of HAProxy.
+
+\paragraph*{Enable OCSP stampling:}
+~
+HAProxy supports since version 1.5.0 OCSP stampling. To enable it you have to generate the OCSP singing file in the same folder, with the same name as your certificate file plus the extension .ocsp. (e.g. your certificate file is named server.crt then the OCSP file have to be named server.crt.oscp)\\
+To generate the OCSP file use these commands:
+\begin{lstlisting}
+openssl x509 -in your.certificate.crt -noout -ocsp_uri # <- get your ocsp uri
+openssl ocsp -noverify -issuer ca.root.cert.crt -cert your.certificate.crt -url "YOUR OCSP URI" -respout your.certificate.crt.ocsp
+\end{lstlisting}
+Reload HAProxy and now OCSP stampling should be enabled.\\
+Note: This OCSP signature file is only valid for a limited time. The simplest way of updating this file is by using cron.daily or something similar.
+
+\paragraph*{Enable \ac{HPKP}:}
+~
+Get certificate informations:
+\begin{lstlisting}
+openssl x509 -in server.crt -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | base64
+\end{lstlisting}
+Then you append the returned string in the HAProxy configuration. Add the following line to the backend configuration:
+\begin{lstlisting}
+rspadd Public-Key-Pins:\ pin-sha256="YOUR_KEY";\ max-age=15768000;\ includeSubDomains
+\end{lstlisting}
+Reload HAProxy and HPKP should now be enabled.\\
+Note: Keep in mind to generate a backup key in case of problems with your primary key file.
+
+\subsubsection{How to test}
+See appendix \ref{cha:tools}
 
 %% ---------------------------------------------------------------------- 
 \subsection{Pound}