haproxy einrichten

Die Einrichtung von haproxy ist „relativ“ leicht zu erledigen. Programm aus den Quellen installieren und konfigurieren.

Dabei gab es einige Komplikationen: zuerst einmal benötige ich für Tests Websockets, die von Apache aber nicht unterstützt werden. Diese lassen sich über mehrere Optionen in haproxy filtern und mit einer separaten Regel belegen, sodass sie direkt zum Websocket-Server durchgetunnelt werden. http://blog.silverbucket.net/post/31927044856/3-ways-to-configure-haproxy-for-websockets
Oder: http://blog.exceliance.fr/2012/11/07/websockets-load-balancing-with-haproxy/

Möchte man nun auch SSL verwenden, um die Verbindung zu verschlüsseln, kann man den Ansatz eines vorgeschalteten SSL-Proxies wie stunnel verwenden: http://afitnerd.com/2012/08/14/websockets-over-ssl-stunnel-haproxy-node-js/In einer aktuelleren Version von haproxy ist SSL aber schon implementiert. Die Version muss nur noch Compiliert werden. http://blog.exceliance.fr/2012/04/13/enhanced-ssl-load-balancing-with-server-name-indication-sni-tls-extension/ Diese Installation gestattet auch, verschiedene Zertifikate für unterschiedliche (Sub-)Domains zu verwenden.

Zum Debuggen und lesen der Logs muss noch Hand angelegt werden: http://linuxadminzone.com/enable-or-fix-logging-for-haproxy-load-balancer/

Als Ergebnis kam dann folgende Configdatei heraus: haproxy.cfg

Anmerkung: die pem-files der Zertifikate unterstützen es scheinbar, die Zertifikat-Chain in die Datei hineinzuschreiben in folgender Form:

  • Server certificate
  • Intermediate CA 1 certificate
  • Intermediate CA 2 certificate
  • Intermediate CA n certificate
  • Root CA certificate
  • Private key

Scheint aber nur bei dem default-Zertifikat genommen zu werden, bei allen anderen Zertifikatfiles wird der Chain (scheinbar) nicht beachtet.

Also für das Default-Zertifikat auf jeden Fall ein gültiges Zertifikat mit Chain hinterlegen.

Edit: Beim Einrichten weiterer Server mit Zertifikaten fiel auf, dass die Chain wohl doch pro File geprüft wird, warum auch immer es beim letzten Test ignoriert wurde. De Facto blockieren die meisten Programme, die mit nicht vollständig gültigem SSL-Zertifikat betrieben werden (also self-signed, keine vollständige Supply-Chain, …) und werfen stattdessen mit Fehlermeldungen über ungültige Zertifikate um sich.