SSL Zertifikatsfehler beim Aufruf einer Webseite

Zertifikatsfehler

In den vergangenen Wochen kämpfte ich immer wieder mit einem SSL Zertifikatsfehler bei einer bestimmten Domain die ich betreue. Ich werde in diesem Artikel nicht in jedes Details zu SSL Zertifikaten, Apache und allem Weiteren eingehen, eher nur auf den Weg, wie ich diesem Problem Herr geworden bin. Aber zunächst vielleicht ein wenig Hintergrund zum Setup Der Umgebung.

Setup der Umgebung

Die Domain selbst wird bei einem Domainhoster verwaltet und zeigt auf die IP Adresse eines Apache2 Webserver, der in einer Ubuntu VM bei einem Webhoster läuft. Auf dem Webserver laufen mehrere virtuelle Hosts. Für die spezielle Domain, nennen wir sie hier einmal example.org, gibt es mehrere Wege für den Aufruf. Eine www-Variante, eine non-www Variante, mit HTTP und mit HTTPS. Natürlich möchte ich die Webseite nicht als HTTP unverschlüsselt betreiben, deswegen ist dies direkt an HTTPS umgeleitet, auch der non-www Aufruf, also example.org wird direkt an www.example.org weitergeleitet. Genutzt wird ein selbstsigniertes Zertifikat von Letsencrypt.

Das Problem mit SSL_ERROR_BAD_CERT_DOMAIN

Jeder Browser nennt es anders, aber der Firefox gibt den Fehler: SSL_ERROR_BAD_CERT_DOMAIN zurück, wenn man die Webseite über https://example.org aufruft. Bedeutet im Umkehrschluss: Der Aufruf von http://*.example.org wird immer ordnungsgemäß an die richtige Adresse https://www.example.org weitergeleitet. Es musste sich also um ein Problem mit dem SSL Zertifikat handeln. Da ich kein Wildcard Zertifikat besitze, also jedes welche *.example.org abdecken würde, sondern ich ein Sparfuchs bin, gilt das Zertifikat immer nur für www.example.org oder eben example.org, ohne das www. Und genau hier lag auf das Problem. Denn sobald die Domain https://example.org aufgerufen wird, die dann ja weitergeleitet werden soll an https://www.example.org, möchte der Browser auch ein SSL Zertifikat für die non-www Variante haben.

MOD_REWRITE macht mir zu viel Hokuspokus – es geht auch ohne!

MOD_REWRITE mag toll sein, für bestimmte Dinge, aber ich brauchte es in diesem Szenario wirklich nicht. Also habe ich mich ran gesetzt und die Konfiguration im Apache anders aufgebaut, so dass ich zwei SSL Zertifikate nutzen kann. Dafür habe ich im Apache in der zugehörigen Konfiguration für die Domänen zwei virtuelle Hosts angelegt. Einen, der auf die www Variante hört, einen weiteren, der auf die non-www Variante reagiert.

Die Konfiguration des Apache 2

Die Konfiguration des Apache habe ich wie folgt gestaltet. Zuvor habe ich mir über Letsencrypt zwei Zertifikate geholt: Eins für www.example.org und eines für example.org.

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    ServerName example.org
    Redirect permanent / https://www.example.org/
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.org/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.org/privkey.pem
</VirtualHost>

<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    ServerName www.example.org
    DocumentRoot /var/www/example.org
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/www.example.org/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.org/privkey.pem
</VirtualHost>
</IfModule>

Jeder der virtuellen Hosts reagiert auf einen anderen Servername. Bei example.org habe ich das passende Zertifikat für den Namen hinterlegt, zudem eine permanente Umleitung auf den Namen www.example.org eingebaut. Das tut exakt was ich will.

Weitere Artikel zum Thema Linux gibt es hier.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert