In Netzwerken mit mehreren Apache-Servern hinter einer gemeinsamen Domain gibt es verschiedene Möglichkeiten, SSL-Zertifikate zu verwalten und bereitzustellen. Jede Lösung bietet verschiedene Ansätze, je nach den Anforderungen der Serverinfrastruktur. Dabei gibt es einige grundlegende Unterschiede hinsichtlich Redundanz, Sicherheit und Verwaltung der Zertifikate.
Jede Methode hat ihre eigenen Vor- und Nachteile. Falls die Hosts unabhängig voneinander arbeiten sollen, ist das Kopieren des Zertifikats sinnvoll. Falls eine zentrale Verwaltung bevorzugt wird, bietet sich der SSL-Proxy an. SNI ist ideal, wenn verschiedene Zertifikate für mehrere Domains genutzt werden, während SAN-Zertifikate für mehrere Subdomains einer Domain eine einfache Lösung darstellen.
Methode | Vorteile | Nachteile |
---|---|---|
Kopieren des Zertifikats | Einfach einzurichten, keine Abhängigkeit von einem Proxy | Manuelles Kopieren bei Erneuerung notwendig |
SSL-Proxy | Zentralisierte Verwaltung, weniger Wartung | SSL wird nur am Proxy-Terminationspunkt geprüft |
SNI (Server Name Indication) | Mehrere SSL-Zertifikate auf einer IP-Adresse | Ältere Clients unterstützen es nicht |
SAN-Zertifikat (Subject Alternative Names) | Ein Zertifikat für mehrere Domains | Alle Hosts müssen im Zertifikat enthalten sein |
1. Kopieren des Zertifikats auf alle Hosts
Bei dieser Methode wird ein einzelnes SSL-Zertifikat auf alle Apache-Server verteilt, sodass jeder Host eine eigene verschlüsselte Verbindung bereitstellen kann.
- Ermitteln des Zertifikatspfads auf Server 1:1grep -Ri "SSLCertificateFile" /etc/apache2/sites-enabled/
- Zertifikat und privaten Schlüssel kopieren:12scp /etc/letsencrypt/live/example.com/fullchain.pem server2:/etc/ssl/certs/scp /etc/letsencrypt/live/example.com/privkey.pem server2:/etc/ssl/private/
- SSL für Apache auf Server 2 konfigurieren (nano /etc/apache2/sites-available/default-ssl.conf):123456<VirtualHost *:443>ServerName example.comSSLEngine onSSLCertificateFile /etc/ssl/certs/fullchain.pemSSLCertificateKeyFile /etc/ssl/private/privkey.pem</VirtualHost>
- SSl aktivieren und Apache neu starten:12a2ensite default-sslsystemctl restart apache2
2. SSL-Proxy zur Weiterleitung der SSL-Verbindung
Ein zentraler Apache-Server nimmt SSL-Verbindungen entgegen und leitet sie unverschlüsselt an interne Apache-Hosts weiter.
- SSL-Proxy-Modul aktivieren:1a2enmod proxy proxy_http ssl
- Apache als Proxy konfigurieren:12345678<VirtualHost *:443>ServerName example.comSSLEngine onSSLCertificateFile /etc/ssl/certs/fullchain.pemSSLCertificateKeyFile /etc/ssl/private/privkey.pemProxyPass / http://192.168.1.2/ProxyPassReverse / http://192.168.1.2/</VirtualHost>
- Apache neu starten:1systemctl restart apache2
3. Apache SNI (Server Name Indication)
SNI ermöglicht es Apache, mehrere SSL-Zertifikate für unterschiedliche Domains auf derselben IP-Adresse zu verwalten.
- Apache-Version überprüfen (ab 2.2.12 nötig):12apache2 -v
- Mehrere SSL-VirtualHosts konfigurieren:12345678910111213<VirtualHost *:443>ServerName domain1.comSSLEngine onSSLCertificateFile /etc/ssl/certs/domain1.pemSSLCertificateKeyFile /etc/ssl/private/domain1.key</VirtualHost><VirtualHost *:443>ServerName domain2.comSSLEngine onSSLCertificateFile /etc/ssl/certs/domain2.pemSSLCertificateKeyFile /etc/ssl/private/domain2.key</VirtualHost>
- Apache neu starten:1systemctl restart apache2
4. Verwendung von Apache SAN (Subject Alternative Names)
Ein einzelnes SSL-Zertifikat kann mehrere Domains oder Subdomains enthalten, sodass nur ein Zertifikat für alle Hosts benötigt wird.
- Let’s Encrypt SAN-Zertifikat ausstellen:1certbot certonly --standalone -d example.com -d sub1.example.com -d sub2.example.com
- Apache so konfigurieren, dass das SAN-Zertifikat genutzt wird:1234567<VirtualHost *:443>ServerName example.comServerAlias sub1.example.com sub2.example.comSSLEngine onSSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pemSSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem</VirtualHost>
- Apache neu starten:1systemctl restart apache2
5. Überprüfung des Zertifikats
Um zu testen, ob das Zertifikat korrekt geladen wird, nutzen Sie folgenden Befehl auf Server 2:
1 | openssl s_client -connect localhost:443 -servername example.com | openssl x509 -noout -text | grep -A2 "Subject Alternative Name" |
Falls das Zertifikat korrekt eingerichtet ist, sollten die zugehörigen Domains aufgelistet werden.
by Speefak