Wie behebt man die Mixed-Content-Warnung?

Sie haben ein SSL-Zertifikat auf Ihrer Website installiert, aber das Schloss in der Adressleiste erscheint immer noch nicht oder zeigt mit einem Ausrufezeichen "nicht sicher" an. Die häufigste Ursache dafür ist Mixed Content (gemischte Inhalte): Während die Seite selbst über HTTPS geladen wird, werden einige darin enthaltene Ressourcen noch über HTTP aufgerufen. In diesem Beitrag erklären wir, wie Sie das Problem finden und dauerhaft beheben.

Was ist Mixed Content?

Wenn eine sichere (https://) Seite eine unsichere (http://) Ressource lädt, wertet der Browser dies als Sicherheitslücke. Es gibt zwei Arten:

  • Passiver Mixed Content: Ressourcen wie Bild, Video, Audio. Der Browser lädt sie in der Regel, entfernt aber das Schloss und schreibt eine Warnung in die Konsole.
  • Aktiver Mixed Content: Skript, Stildatei (CSS), iframe, XHR/fetch-Aufrufe. Diese werden vom Browser blockiert, da sie die Seite übernehmen könnten, und Ihre Seite erscheint defekt.

Schritt 1 — Finden Sie die schuldigen Ressourcen

Öffnen Sie die Entwicklertools des Browsers (F12) und sehen Sie sich den Tab Console an. Die Mixed-Content-Warnungen werden klar aufgelistet:

Mixed Content: The page at 'https://ihredomain.com/' was loaded over HTTPS,
but requested an insecure resource 'http://ihredomain.com/img/logo.png'.
This content should also be served over HTTPS.

Jede Zeile gibt an, welche Ressource über HTTP geladen wurde. Erstellen Sie aus dieser Liste die zu korrigierenden Adressen.

Bild: <Mixed-Content-Warnungen in der DevTools-Konsole>
Die Konsole der Entwicklertools listet die unsicheren Ressourcen einzeln auf.

Schritt 2 — Korrigieren Sie die Ressourcenadressen

Die dauerhafteste Lösung besteht darin, die http://-Präfixe in den Seitenressourcen auf https:// umzustellen. Verwenden Sie nach Möglichkeit Pfade ohne Domain, also protokollunabhängige oder wurzelrelative Pfade:

<!-- Falsch -->
<img src="http://ihredomain.com/img/logo.png">
<script src="http://cdn.beispiel.com/lib.js"></script>

<!-- Richtig -->
<img src="https://ihredomain.com/img/logo.png">
<img src="/img/logo.png">                  <!-- wurzelrelativ, am sichersten -->
<script src="https://cdn.beispiel.com/lib.js"></script>

Vergessen Sie nicht die url(http://...)-Definitionen in CSS-Dateien und die eingebetteten background-image-Werte.

Schritt 3 — Ersetzen Sie alte Adressen in der Datenbank gesammelt

In Content-Management-Systemen (CMS) können alte Beiträge in der Datenbank voller http://-Links sein. Um sie gesammelt zu aktualisieren, können Sie eine Datenbankabfrage verwenden. Erstellen Sie zuerst unbedingt ein Backup und führen Sie dann eine Aktualisierung wie die folgende aus:

-- Erstellen Sie zuerst ein BACKUP!
UPDATE inhalte
SET koerper = REPLACE(koerper, 'http://ihredomain.com', 'https://ihredomain.com');

Passen Sie die Tabellen- und Spaltennamen an Ihr eigenes Schema an.

Schritt 4 — Gesammelte Lösung: upgrade-insecure-requests

Wenn es schwierig ist, hunderte alter Links einzeln zu korrigieren, können Sie einen Sicherheits-Header hinzufügen, der dem Browser sagt, alle HTTP-Anfragen automatisch auf HTTPS hochzustufen. Dies funktioniert, wenn die HTTPS-Version derselben Ressource vorhanden ist:

# Nginx
add_header Content-Security-Policy "upgrade-insecure-requests";
<!-- oder im HTML-<head> -->
<meta http-equiv="Content-Security-Policy"
      content="upgrade-insecure-requests">

Diese Methode ist keine Lösung für Ressourcen, die auf einem externen Server keine HTTPS-Version haben; ersetzen Sie solche Ressourcen entweder durch eine Alternative, die HTTPS bereitstellt, oder verlagern Sie sie auf Ihren eigenen Server.

Schritt 5 — Leeren Sie den Cache und überprüfen Sie

Leeren Sie nach den Änderungen den Cache des Browsers und, falls vorhanden, des CDN, öffnen Sie dann die Seite in einem Inkognito-Tab und bestätigen Sie unter F12 → Console, dass keine Warnung mehr verbleibt. Wenn das Schloss-Symbol zurückgekehrt ist, ist das Problem gelöst.

Häufige Fallstricke

  • Fest codierte (hardcoded) Adressen: In Theme- und Plugin-Dateien eingebettete http://-Links.
  • Externe Werbe-/Analyse-Skripte: Entfernen oder aktualisieren Sie Drittanbieter-Ressourcen, die kein HTTPS unterstützen.
  • Alte Social-Media-Einbettungscodes: Ersetzen Sie sie durch neue, HTTPS-kompatible Einbettungscodes.

Zusammenfassung

Mixed Content entsteht durch HTTP-Ressourcen, die auf einer HTTPS-Seite verbleiben, und lässt das Schloss fallen. Finden Sie die Schuldigen über die Konsole, stellen Sie die Adressen auf https:// um und unterstützen Sie dies bei Bedarf mit upgrade-insecure-requests. Falls Sie noch kein Zertifikat haben oder es erneuern müssen, erstellen Sie es mit unserem kostenlosen SSL-Assistenten und laden Sie das ZIP-Paket herunter.