Ich versuche, SSL auf meinem Apache2-Webserver einzurichten, aber es scheint, dass es überhaupt nicht funktioniert.
Ich habe eine Anleitung zum Erstellen von Zertifikatsdateien mit openssl befolgt und die /etc/apache2/sites-available/default-ssl.conf
richtig konfiguriert.
Jedes Mal, wenn ich versuche, meine Website mit https zu öffnen, verweigert mein Browser die Verbindung aufgrund von Sicherheitsproblemen. Er sagt, dass ich meine Website nicht richtig konfiguriert habe.
In meinem /var/log/apache2/error.log
erhalte ich Warnungen, die besagen, dass mein Serverzertifikat keine ID enthält, die mit dem Servernamen übereinstimmt.
[Mon Apr 10 11:03:24.041813 2017] [mpm_prefork:notice] [pid 1222] AH00169: caught SIGTERM, shutting down
[Mon Apr 10 11:03:30.566578 2017] [ssl:warn] [pid 661] AH01909: 127.0.0.1:443:0 server certificate does NOT include an ID which matches the server name
[Mon Apr 10 11:03:31.579088 2017] [ssl:warn] [pid 1194] AH01909: 127.0.0.1:443:0 server certificate does NOT include an ID which matches the server name
[Mon Apr 10 11:03:31.592958 2017] [mpm_prefork:notice] [pid 1194] AH00163: Apache/2.4.25 (Raspbian) OpenSSL/1.0.2k configured -- resuming normal operations
[Mon Apr 10 11:03:31.593136 2017] [core:notice] [pid 1194] AH00094: Command line: '/usr/sbin/apache2'
Haben Sie eine Idee, wie ich das Problem lösen kann? Vielen Dank in diesem Sinne!
Okay, ich habe bemerkt, dass dieser Beitrag in letzter Zeit ziemlich oft aufgerufen wird und es scheint, dass viele Leute mit dem gleichen Problem konfrontiert sind wie ich. Wenn ja, dann könnte dies Ihnen helfen.
Ich habe eine einfache Schritt-für-Schritt-Anleitung befolgt, um eine SSL-Zertifizierung für meinen Webserver zu erstellen. Wie so viele Tutorials da draußen war das Ergebnis des Tutorials, das ich befolgt habe, ein selbstsigniertes Zertifikat mit OpenSSL. Ja, selbst-signiert, das war das Problem. Der Browser konnte dem Server nicht trauen, weil das Zertifikat von ihm selbst signiert war. Nun, ich würde beides nicht tun...
Ein Zertifikat muss von einer externen, vertrauenswürdigen Zertifizierungsstelle (CA) signiert sein. So bin ich auf Let's Encrypt gestoßen, das die ganze Arbeit für Sie erledigt und noch einfacher einzurichten ist, und das Beste ist: es ist absolut kostenlos.
Löschen Sie Ihre alten SSL-Zertifikatsdateien, die Sie mit OpenSSL erstellt haben.
Öffnen Sie Backports, um den certbot-Client auf Debian zu bekommen. Sie sollten wissen, dass dies eine Lücke für unfertige Software öffnen wird! Installieren Sie die Pakete nur, wenn Sie sich darüber im Klaren sind, was Sie tun.
echo 'deb http://ftp.debian.org/debian jessie-backports main' | sudo tee /etc/apt/sources.list.d/backports.list
sudo apt-get update
sudo apt-get install python-certbot-apache -t jessie-backports
sudo nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
. . .
ServerName example.com
ServerAlias www.example.com
. . .
</VirtualHost>
sudo apache2ctl configtest
sudo systemctl restart apache2
sudo certbot --apache
Alle Zertifikate von Let's Encrypt sind 3 Monate lang gültig. Um sie zu erneuern, können Sie manuell die Funktion
sudo certbot renew
oder diesen Dienst als Cron-Job automatisieren
sudo crontab -e
und geben Sie die folgende Zeile ein, um jeden Montag um 2:30 Uhr eine Erneuerung auszulösen.
. . .
30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
Eine detailliertere Anleitung finden Sie hier: https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-debian-8
Wenn Sie keine anderen SSL-Fehler sehen, und wenn Sie versucht haben, 'LogLevel debug' in der Datei httpd.conf einzustellen, kann diese Fehlermeldung auch darauf hindeuten, dass 'Listen 443' in der httpd.conf-Datei fehlt.
Dies sind keine Fehler - es sind Warnungen. Es ist durchaus möglich, mod_ssl mit einem Zertifikat laufen zu lassen, das nicht mit den definierten Servernamen übereinstimmt, solange Sie einen Standard-SSL-Host definiert haben und der Common Name auf dem Zertifikat mit dem Hostnamen übereinstimmt, den die Clients für die Verbindung verwenden.
Letzteres scheint in Ihrem Fall nicht der Fall zu sein. Wie Jacob sagt, müssen Sie den richtigen Hostnamen als Common Name (oder einen Alias) angeben, wenn Sie eine CSR erstellen.
Um zu sehen, welche(r) Name(n) derzeit auf dem Zertifikat stehen:
openssl s_client -showcerts -connect ${HOSTNAME}:443
Wenn mehrere Zertifikate auf dem Rechner installiert sind und auf dieselbe IP-Adresse laufen, dann:
openssl s_client -showcerts -connect ${HOSTIP}:443 -servername ${HOSTNAME}
(wobei die ${...}-Werte Platzhalter sind, die Sie durch die entsprechenden Werte ersetzen sollten).