Backend läd Teile über http anstatt über https

Hallo.

Nachdem Update auf 5.4.2 habe ich ein Problem mit Mixed Contents im Backend
Ausgangssituation:

  • Im Backend ist für den Shop der Haken bei „SSL verwenden“ gesetzt
  • Shop Cache wurde geleert (auch der Cache Ordner über die Console gelöscht)

Das Problem ist Folgendes:
Beim Starten des Backends gibt es im Browser Inspector Fehler, dass es Mixed Contents gibt und verschiedene Resourcen nicht über https sondern über http geladen werden.
Hier eine beispielhafte Fehlermeldung:

ext-all.js?201804030942:21 Mixed Content: The page at 'https://www.zennershop.de/backend/' was loaded over HTTPS, but requested an insecure stylesheet 'http://www.zennershop.de/themes/Backend/ExtJs/backend/_resources/resources/css/extra-icon-set-01.css?201804030942'. This request has been blocked; the content must be served over HTTPS.

Ich habe dann mal in den Sources geschaut und folgendes gefunden:

// Start preloading the icon sets
me.iconPreloader = Ext.create('Shopware.component.IconPreloader', {
loadPath: "http://www.zennershop.de/themes/Backend/ExtJs/backend/_resources/resources/css"
});

Wie kommt es, dass hier http statt https verwendet wird, trotz korrekter Einstellung?

Das Plugin Magnalister funktionert aus gleichem Grund ebenfalls wohl nicht. Kann mir da jemand auf die Sprünge helfen?

Gerade bei großen Projekten erreichen uns immer wieder Meldungen, dass nach einer SSL-Umstellung die Bilder im Frontend und bestimmte Assets im Backend nicht per HTTPS:// geladen werden. Die Darstellung wird dann vom Browser blockiert. In der Regel ist hier die Ursache, dass ein vorgeschalteter Proxy (bspw. Varnish, Loadbalancer, SSL-Proxy) SSL terminiert und intern nicht per SSL mit den Appservern kommuniziert. In diesem Fall wird oftmals die Server-Variable “HTTP_X_FORWARDED_PROTO” gesetzt. Diese Variable wird grundsätzlich auch von Shopware ausgewertet - mit einer Bedigung, der Proxy der die SSL-Terminierung vornimmt, muss als “trustedProxy” in der config.php definiert sein:

'trustedproxies' => [

        '192.168.0.10',

        '192.168.0.11',

    ],

 

Wie könnt ihr das nun debuggen? Zunächst einmal solltet ihr testen, ob die Ursache wirklich die fehlende Servervariable ist. Shopware wertet folgende beiden Variablen aus:

$_SERVER['HTTPS']

$_SERVER['HTTP_X_FORWARDED_PROTO']

Am besten schaut ihr also zunächst im Backend unter Systeminfo > PHP-Info nach, ob eine der beiden Variablen bei einem HTTPS-Request gesetzt ist (Einfach Backend per HTTPS:// aufrufen). Typischerweise steht auf einem Server ohne Proxy die Variable "\_SERVER['HTTPS']" dann auf "On". Bei einem verteilten Setup mit Proxy ist die Variable _SERVER[‘HTTPS’] leer und die Variable “$_SERVER[‘HTTP_X_FORWARDED_PROTO’]” enthält den Wert “https”.

Wenn beide Fälle so nicht zutreffen, erkennt Shopware euren Proxy nicht als “trustedProxy”. Du solltest dann die config.php mit der IP deines Proxys nach dem Beispiel oben erweitern. Wenn das nicht funktioniert, kannst du als schnelle Übergangslösung die Variable auch direkt in deiner config.php setzen. Hierzu reicht ein einfaches “$_SERVER[‘HTTP_X_FORWARDED_PROTO’] = ‘https’;” in der config.php:

  array (

    'host' => 'localhost',

    'port' => '3306',

    'username' => '...',

    'password' => '...',

    'dbname' => '...',

    ...

 

Danach solltest du deinen Setup grundlegend debuggen und dich mit deinem Hoster abstimmen, da Shopware nicht in der Lage ist, deinen Proxy per IP zu erkennen. Eine weiteres Anzeichen für eine fehlerhafte Erkennung ist, dass die Shopware-Statistiken die Besucher nicht mehr tracken können, da Shopware selbst nur die IP des Proxys erhält und nicht die IP des Besuchers. Hier sollte dein Hoster dich bei der tiefgreifenderen Konfiguration unterstützen können.​

2 Likes

Hallo Moritz.

Vielen Dank für die schnelle Rückmeldung. Dies hat mein Problem behoben.
Könnt ihr das vielleicht auch in die Doku mit aufnehmen oder war ich nur zu dumm es zu finden?

1 Like

Im Zusammenhang mit SSL haben wir das so nicht detailliert aufgefächert. Ich werde das mal mit aufnehmen.

Die Definition in Shopware findest du hier: Shopware HTTP cache

Shopware nutzt hier die Symfony-Implementierung: http://symfony.com/doc/current/deployment/proxies.html

Durch die Definition der trustedProxies definierst du, dass die “X-Forwarded-Header” ausgewertet werden. Wenn dem Proxy nicht “vertraut” wird, werden die Header einfach ignoriert.

1 Like