Apache HTTP Server: SSL-Zertifikat austauschen
SSL-Zertifikat auf Apache 2.4 (Debian/Ubuntu und RHEL) austauschen: vHost-Dateien finden, Kette bauen, Schlüssel prüfen, apachectl configtest, Graceful Reload und Prüfung.
Apache HTTP Server 2.4 liest Zertifikat und Schlüssel aus SSLCertificateFile und
SSLCertificateKeyFile in jedem TLS-VirtualHost. Seit Apache 2.4.8 darf die
Zertifikatsdatei die Zwischenzertifikate nach dem Serverzertifikat enthalten,
SSLCertificateChainFile wird nicht mehr gebraucht.
| Debian / Ubuntu | RHEL / Rocky / Alma | |
|---|---|---|
| Konfiguration | /etc/apache2/ | /etc/httpd/ (TLS: conf.d/ssl.conf) |
| Übliche Zertifikatspfade | /etc/ssl/certs/, /etc/ssl/private/ | /etc/pki/tls/certs/, /etc/pki/tls/private/ |
| Dienst | apache2 | httpd |
Voraussetzungen
-
Ermitteln Sie, welcher VirtualHost welche Dateien nutzt.
apachectl -Slistet die VirtualHosts und ihre Konfigurationsdateien;grepzeigt die Zertifikatszeilen:sudo apachectl -S sudo grep -Rn 'SSLCertificate' /etc/apache2 /etc/httpd 2>/dev/null -
Bereiten Sie Serverzertifikat (
leaf.pem), Zwischenzertifikat(e) (intermediates.pem) und privaten Schlüssel (private.key) vor, alle als PEM. Das Stammzertifikat gehört nicht dazu. -
Sichern Sie die aktuellen Dateien samt Rechten:
sudo cp -a /etc/pki/tls/certs/www.crt /etc/pki/tls/certs/www.crt.bak sudo cp -a /etc/pki/tls/private/www.key /etc/pki/tls/private/www.key.bak
Zertifikat Schritt für Schritt austauschen
-
Kette bauen - Serverzertifikat zuerst - und prüfen, ob der Schlüssel dazugehört:
cat leaf.pem intermediates.pem > fullchain.pem openssl verify -untrusted intermediates.pem leaf.pem openssl pkey -in private.key -pubout | sha256sum openssl x509 -in leaf.pem -noout -pubkey | sha256sumopenssl verifymussOKausgeben, und die beiden Hashes müssen gleich sein. -
Dateien an den Pfaden installieren, die der VirtualHost nutzt. Der Schlüssel darf nur für root lesbar sein: Der Elternprozess von Apache läuft als root und liest ihn, auch bei einem Graceful Reload, bevor er die Arbeit an die Kindprozesse übergibt.
sudo install -m 0644 fullchain.pem /etc/pki/tls/certs/www.crt sudo install -m 0600 private.key /etc/pki/tls/private/www.key sudo restorecon -v /etc/pki/tls/certs/www.crt /etc/pki/tls/private/www.key # nur SELinux-SystemeSSLEngine on SSLCertificateFile "/etc/pki/tls/certs/www.crt" SSLCertificateKeyFile "/etc/pki/tls/private/www.key" -
Konfiguration testen, dann Graceful Reload:
sudo apachectl configtest sudo systemctl reload httpd # RHEL # sudo systemctl reload apache2 # Debian/Ubuntuconfigtestprüft die Syntax, nicht ob Schlüssel und Zertifikat zusammenpassen - deshalb prüft das Schritt 1. Auf beiden Distributionen löstsystemctl reloadeinen Graceful Restart aus: Laufende Anfragen werden beendet, neue Verbindungen bekommen das neue Zertifikat, niemand wird getrennt.
Verschlüsselte private Schlüssel
Ein Schlüssel mit Passphrase lässt Apache bei jedem Start und Reload danach fragen - ein
von systemd gestarteter Dienst kann nicht antworten, der Start schlägt fehl. Verwenden
Sie entweder einen unverschlüsselten Schlüssel, geschützt über die Dateirechte
(Passphrase entfernen mit openssl pkey -in encrypted.key -out private.key), oder
konfigurieren Sie SSLPassPhraseDialog mit einem Programm, das die Passphrase liefert -
je nach Ihrer Richtlinie für Schlüssel.
Neues Zertifikat prüfen
openssl s_client -connect www.example.com:443 -servername www.example.com -showcerts </dev/null
sudo journalctl -u httpd --since "10 minutes ago" # bzw. -u apache2Prüfen Sie Antragsteller und SAN, Aussteller, Ablaufdatum und ob das Zwischenzertifikat
mitgesendet wird - für jeden namensbasierten VirtualHost, mit seinem eigenen Namen als
-servername.
Rollback
Kopieren Sie die .bak-Dateien zurück, führen Sie apachectl configtest aus und laden
Sie neu. Behalten Sie die Sicherung, bis das neue Zertifikat geprüft ist.
Häufige Probleme
- Die Änderung erfolgte im falschen Konfigurationsbaum (
apache2statthttpd) oder für den falschen VirtualHost. - Die Kette ist unvollständig, oder der Schlüssel passt nicht.
- Ein verschlüsselter Schlüssel blockiert Start oder Reload.
- SELinux verweigert den Zugriff auf Dateien ohne passendes Label (
restorecon). - Ein anderer SNI-VirtualHost wurde getestet.
Zertifikatstausch mit aethercert automatisieren
Die aethercert-Vorlage für Apache schreibt die konfigurierten Zertifikats-/Ketten- und
Schlüsseldateien und führt den konfigurierten Reload-Befehl aus. Standard ist
systemctl reload apache2; auf RHEL-basierten Systemen setzen Sie
systemctl reload httpd.
Unter Deployment-Ziele finden Sie die Felder dieser Vorlage, die Voraussetzungen auf dem Host und den Stand der Verifizierung.
Quellen
NGINX
SSL-Zertifikat auf NGINX austauschen: Fullchain-PEM bauen und prüfen, mit Rückweg installieren, nginx -t, Reload ohne Verbindungsabbruch - auch in Docker.
HAProxy
HAProxy-PEM-Bundle ohne Ausfall tauschen: bauen und prüfen, per Reload oder Runtime API aktualisieren, Platte und Speicher synchron halten, SNI prüfen und zurückrollen.