OCSP-Stapling im HAProxy aktivieren

Um OCSP-Stapling im HAProxy zu aktivieren, sind im Grunde nur ein paar wenige Schritte notwendig. In meinem Beispiel nutze in ein Serverzertifikat von Letsencrypt.

Zuerst sollte sichergestellt werden, dass im HAProxy der Stats-Socket aktiviert ist:

global
    stats socket /run/haproxy/admin.sock mode 660 level admin

Der HAProxy muss neugestartet werden, damit der Socket genutzt werden kann.

Danach kann man mittels openssl den Zertifikatsstatus prüfen und das Ergebnis in eine Datei schreiben. Die Datei sollte die Dateiendung ".ocsp" haben und neben der Zertifikatsdatei (enthält Key und Zertifikat) für den HAProxy abgelegt werden.

$ openssl ocsp -issuer /path/to/letsencrypt-ca-chain.pem -cert /path/to/letsencrypt-cert.pem -url http://r3.o.lencr.org -no_nonce -respout /path/to/haproxy-cert.pem.ocsp
/path/to/letsencrypt-cert.pem: good
    This Update: Mar 17 23:00:00 2021 GMT
    Next Update: Mar 24 23:00:00 2021 GMT

Im letzten Schritt aktualisiert man den Status im HAProxy über den Socket.

$ echo "set ssl ocsp-response $(base64 -w 0 /path/to/haproxy-cert.pem.ocsp)" | socat stdio unix-connect:/run/haproxy/admin.sock
OCSP Response updated!

Mittels cron habe ich alles - mit einfachen Mitteln - automatisiert:

15 23 * * * /usr/bin/openssl ocsp -issuer /path/to/letsencrypt-ca-chain.pem -cert /path/to/letsencrypt-cert.pem -url http://r3.o.lencr.org -no_nonce -respout /path/to/haproxy-cert.pem.ocsp
30 23 * * * /usr/bin/echo "set ssl ocsp-response $(/usr/bin/base64 -w 0 /etc/ssl/haproxy/ronfri.ddns.net.pem.ocsp)" | socat stdio unix-connect:/run/haproxy/admin.sock

Damit wird nun regelmäßig (täglich) der Zertifikatsstatus geholt und im HAProxy bereitgestellt.

Quellen und Links:

[1]https://icicimov.github.io/blog/server/HAProxy-OCSP-stapling/
[2]https://bengtssondd.it/security/2018/12/30/OCSP-stapling-with-HAProxy-from-pitfall-to-euphoria/
[3]https://kura.gg/2014/07/02/haproxy-ocsp-stapling/