Voraussetzung: haproxy ist installiert, acme.sh ist installiert.
Leider benötigt haproxy die Zertifikate in einer eher unüblichen Form. Nämlich den öffentlichen und den privaten Teil in einer Datei.
A. Haproxy einrichten [nur beim allerersten mal notwendig]
- etc/haproxy/certlist.txt erstellen
- haproxy.cfg unter etc/haproxy entsprechend anpassen.
bind *:443 ssl crt-list /etc/haproxy/certlist.txt
- PHP-Script certbot_haproxy.php und certbot_haproxy.sh nach /etc/acme.sh speichern (source siehe unten)
- Cronjob einrichten:
unter/etc/cron.daily/
neue dateilets_haproxy
erstellen mit zeile/etc/acme.sh/letsencrypt_haproxy.sh
B. Neues Zertifikat einrichten
- Zertifikat erzeugen
- Zertifikat für Haproxy kopieren
etc/acme.sh/letsencrypt_haproxy.sh
-> alle unteretc/acme.sh/certs
gespeicherten Zertifikate werden in eine für haproxy nutzbare Form umgewandelt und unter/stc/ssl/haproxy
gespeichert - Domain zu /etc/haproxy/certlist.txt hinzufügen.
zb/etc/ssl/haproxy/domain.de.pem domain.de
letsencrypt_haproxy.php
<?php
$writedir = '/etc/ssl/haproxy';
$dir = "/etc/acme.sh/certs";
$directory = opendir($dir);
while($file = readdir($directory)) {
if($file != "." && $file != "..") {
if(is_dir("$dir/$file")) {
$content = file_get_contents("$dir/$file/fullchain.cer");
$content .= file_get_contents("$dir/$file/$file.key");
file_put_contents("$writedir/$file.pem", $content);
} else {
}
}
}
closedir($directory);
?>
letsencrypt_haproxy.sh
php $(dirname $(readlink -f ${0}))/letsencrypt_haproxy.php
sudo service haproxy reload
echo "certs renewed und kopiert und haproxy reloaded"