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/ |