HTTPS is de dag van vandaag een must voor een website. Er zijn tools om certificaten automatisch aan te vragen (certbot etc), en webservers die gekend zijn om dit automatisch te doen (zoals Caddy), maar wist je dat je met Apache ook geen nood hebt voor Certbot? Met mod_md kan je apache automatisch HTTPS certificaten laten aanvragen via ACME (hetzelfde systeem dat Certbot en de caddy server gebruiken).
mod_md inschakelen is zeer eenvoudig, we beginnen met het inschakelen van de module:
sudo a2enmod md
Daarna moeten we een klein stukje configuratie toevoegen aan /etc/apache2/apache2.conf
, net boven waar de virtual hosts geïmporteerd worden
ServerAdmin your@email.example
MDCertificateAgreement accepted
MDPrivateKeys secp384r1
MDMessageCmd /usr/local/bin/apache-md-certs-hook.sh
Vervolgens kunnen we onze Vhost aanmaken zoals we gewend zijn, Enkel moeten we geen certificaat specifiëren.
# Tell Apache example.com is a managed domain
# we don't need to add MDomain entries for Aliases
MDomain example.com
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/html
SSLEngine on
</VirtualHost>
De volgende stap is een hook script dat Apache automatisch herlaad als een certificaat aangevraagd is (of verlengd word). Maak een bestand /usr/local/bin/apache-md-certs-hook.sh
met de volgende inhoud:
EVENT="$1"
DOMAIN="$2"
echo "[$(date)] Event: $EVENT | Domain: $DOMAIN"
case "$EVENT" in
installed|renewed)
echo "[$(date)] Reloading Apache due to event '$EVENT' for $DOMAIN"
sudo /bin/systemctl reload apache2
;;
*)
echo "[$(date)] No reload action for event '$EVENT'"
;;
esac
en zet de juiste rechten:
sudo chown root:root /usr/local/bin/apache-md-certs-hook.sh
sudo chmod 755 /usr/local/bin/apache-md-certs-hook.sh
Vervolgens moeten we nog een sudo regel toevoegen zodat apache zichzelf kan herladen. Maak het volgende bestand aan
sudo visudo -f /etc/sudoers.d/apache-reload
Met de volgende inhoud
www-data ALL=NOPASSWD: /bin/systemctl reload apache2
Nu hoeven we enkel Apache te herladen zodat onze nieuwe configuratie (en vhost) gebruikt worden
sudo service apache2 reload
Als we nu de site bezoeken, zien we een geldig certificaat. (het kan wel enkele seconden duren voordat het certificaat werkt). Apache zal dit ook vanzelf up to date houden.