Mixed Content by ProxyPass/ProxyPassReverse

Alles, was den Apache betrifft, kann hier besprochen werden.

Mixed Content by ProxyPass/ProxyPassReverse

Postby mberr001 » 14. February 2019 13:17

Hallo zusammen,

ich bin dabei ein neues Setup auf debian 9 aufzusetzen und will tomcat 8 hinter apache2.4 einrichten und nur HTTPS erlauben.
Hier die aktuelle Konfiguration.
Code: Select all
<VirtualHost *:80>
        RewriteEngine   on
        RewriteCond     %{SERVER_PORT} ^80$
        RewriteRule     ^(.*)$ https://%{SERVER_NAME}$1 [L,R=307]
        LogLevel alert rewrite:trace3
</VirtualHost>


Code: Select all
Listen 443
<IfModule mod_ssl.c>
        <VirtualHost *:443>

                ServerAdmin admin@xxx
                ServerName www.xxxx.com
                ServerAlias xxx.com

                SSLEngine on
                SSLCertificateFile     /etc/apache2/ssl/certificate.crt
                SSLCertificateKeyFile  /etc/apache2/ssl/xxxx_domain.key
                SSLCACertificateFile   /etc/apache2/ssl/cacertificate.crt

                SSLProtocol all -SSLv2 -SSLv3
               
                SSLProxyEngine on               
                ProxyRequests off
                ProxyPreserveHost on

                ProxyPass / http://127.0.0.1:8080/
                ProxyPassReverse / http://127.0.0.1:8080/
                               
                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined
        </VirtualHost>
</IfModule>


Die HTTP --> HTTPS Weiterleitung funktioniert beim ersten Aufruf (Redirect 307) danach werden die Seiten-Inhalte (laden von css files, images, etc..) über HTTP verschickt und der Browser beschwert sich wegen Mixed Content :evil:

Ich habe ein laufendes Setup mit apache 2.1 und tomcat 7 wo alles wie erwartet funktioniert. Hier war zusätzlich im VirtualHost *:443 folgendes drin
Code: Select all
                RewriteEngine   on
                RewriteCond     %{HTTP_USER_AGENT} ^$
                RewriteRule     ^.* - [F]

Bei dieser Konfiguration werden die Folge-Aufrufe alle vom Browser initial via HTTPS versendet. Vermute soll im RequestHeader in der Konfig was gesetzt werden.

Eine Idee woran das Problem liegen könnte?

Danke für jeden Hinweis und Gruß aus Mainz
Berrada
mberr001
 
Posts: 3
Joined: 14. February 2019 12:55
XAMPP version: 5.6.40
Operating System: debian

Re: Mixed Content by ProxyPass/ProxyPassReverse

Postby Nobbie » 15. February 2019 12:04

Wo ist denn jetzt der ProxyPass/ProxyPassReverse?

Unabhängig davon, dass es hier keinen Reverse Proxy gibt, ist Dein Problem aber auch so nicht lösbar. Fangen wir ganz vorne an, in dem VirtualHost tut es auch ein schlichter Redirect auf die https: Seite (leider dürfen wir den Namen nicht wissen). Die RewriteCond Abfrage ist völlig sinnfrei, die ist immer wahr, weil der VirtualHost ja genau so definiert ist (hier landen nur Anfragen auf Port 80).

Dann das Problem mit dem Mixed Content, ja, das ist ein fieses Problem, hatte ich auch mit meinem Forum im Internet. Da hilft kein Redirect und Requestheader und weiß ich was, weil das alles ja server-seitige Anweisungen sind für Apache. Das Problem liegt aber am Dokument an sich, da stehen die Links auf die CSS Files mit http:// drin und das meckert der Browser an, weil er sich im Kontext https:// befindet (durch den Redirect). Das Problem hättest Du aber auch, wenn Du selbst am Browser direkt https://... eingibst, dann hast Du auch Mixed Content.

Da hilft nur eine einzige Maßnahme: das Dokument selbst umschreiben, oder (wenn es wie bei mir irgendeine Standardsoftware ist, bei mir war es das SMF Forenscript) in der Administration des Scripts schauen, ob man da irgendwo eine Einstellung treffen kann, dass die Links auf die CSS Dateien mit https:// geschrieben werden (und auch alle anderen Links auf andere Dateien). Was anderes hilft nicht.

Das Code Snippet was Du angeblich bei einer irgendwo funktionierenden Anbindung von Tomcat hast, das stammt möglicherweise wirklich aus dem Kontext eines ReverseProxy (den haben wir hier aber nicht) und der bewirkt lediglich, dass Dateien und Dokumente nur an echte Browser ausgeliefert werden, nicht an andere Server (wie es bei ReverseProxys der Fall ist, da macht ein Server einen Http Request auf einen anderen Server, was sonst ein Browser macht). Welchen Sinn es in dem Kontext auch immer haben sollte, es hilft Dir bei Deinem Problem gar nicht.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: Mixed Content by ProxyPass/ProxyPassReverse

Postby mberr001 » 15. February 2019 16:37

Hallo und Danke für die zeit!

Bei RewriteCond %{SERVER_PORT} ^80$ macht definitiv kein Sinn. Nehme ich auch raus.
Es handelt sich um eine Java Web-Anwendung und im Dokument werden ausschliesslich relative Pfade benutzt.
Ich versuche apache von 2.1 auf 2.4 zu migrieren. Auf 2.1 läuft die Anwendung problemlos mit der folgende Konfiguration

Code: Select all
<IfModule mod_ssl.c>
<VirtualHost *:443>

        #  General setup for the virtual host
        DocumentRoot "/srv/www/htdocs"
        ServerName webseite
        #ServerName weseite:443
        #ServerAdmin webmaster@example.com
        ErrorLog /var/log/apache2/error_log
        TransferLog /var/log/apache2/access_log

        SSLEngine on
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
        SSLCertificateFile /etc/apache2/ssl/certificate.crt
        SSLCertificateKeyFile /etc/apache2/ssl/webseite_domain.key
      SSLCACertificateFile /etc/apache2/ssl/cacertificate.crt

       
        <Files ~ "\.(cgi|shtml|phtml|php3?)$">
            SSLOptions +StdEnvVars
        </Files>
        <Directory "/srv/www/cgi-bin">
            SSLOptions +StdEnvVars
        </Directory>

Alias /fruuts /home/tomcat/tomcat/webapps/app

<Directory "/home/tomcat/tomcat/webapps/app">
        # Possible values for the Options directive are "None", "All",
        # or any combination of:
        #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
        #
        # Note that "MultiViews" must be named *explicitly* --- "Options All"
        # doesn't give it to you.
        #
        # The Options directive is both complicated and important.  Please see
        # http://httpd.apache.org/docs-2.2/mod/core.html#options
        # for more information.
        Options None
        # AllowOverride controls what directives may be placed in .htaccess files.
        # It can be "All", "None", or any combination of the keywords:
        #   Options FileInfo AuthConfig Limit
        AllowOverride None
        # Controls who can get stuff from this server.
        Order allow,deny
        Allow from all
</Directory>

JkMount /* worker1

# Serve html, jpg and gif using httpd
JkUnmount /fruuts/images/* worker1
JkUnmount /fruuts/css/* worker1
JkUnmount /fruuts/js/* worker1
JkUnmount /fruuts/downloads/* worker1

     

        #   SSL Protocol Adjustments:
        #   The safe and default but still SSL/TLS standard compliant shutdown
        #   approach is that mod_ssl sends the close notify alert but doesn't wait for
        #   the close notify alert from client. When you need a different shutdown
        #   approach you can use one of the following variables:
        #   o ssl-unclean-shutdown:
        #     This forces an unclean shutdown when the connection is closed, i.e. no
        #     SSL close notify alert is send or allowed to received.  This violates
        #     the SSL/TLS standard but is needed for some brain-dead browsers. Use
        #     this when you receive I/O errors because of the standard approach where
        #     mod_ssl sends the close notify alert.
        #   o ssl-accurate-shutdown:
        #     This forces an accurate shutdown when the connection is closed, i.e. a
        #     SSL close notify alert is send and mod_ssl waits for the close notify
        #     alert of the client. This is 100% SSL/TLS standard compliant, but in
        #     practice often causes hanging connections with brain-dead browsers. Use
        #     this only for browsers where you know that their SSL implementation
        #     works correctly.
        #   Notice: Most problems of broken clients are also related to the HTTP
        #   keep-alive facility, so you usually additionally want to disable
        #   keep-alive for those clients, too. Use variable "nokeepalive" for this.
        #   Similarly, one has to force some clients to use HTTP/1.0 to workaround
        #   their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
        #   "force-response-1.0" for this.
        SetEnvIf User-Agent ".*MSIE.*" \
                 nokeepalive ssl-unclean-shutdown \
                 downgrade-1.0 force-response-1.0

        #   Per-Server Logging:
        #   The home of a custom SSL log file. Use this when you want a
        #   compact non-error SSL logfile on a virtual host basis.
        CustomLog /var/log/apache2/ssl_request_log   ssl_combined

</VirtualHost>
</IfModule>


Mit der Konfiguration lädt der Browser die CSS/Images/etc.. alle via HTTPS nach dem redirekt (HTTP->HTTPS) oder wenn man direkt HTTPS aufruft.
Mit der neuen Konfiguration das laden wird nur via HTTP egal ob wir die Seite aufgerufen wird, deswegen dachte ich mir, apache muss dem Browser mitteilen dass er alles via HTTPS laden muss.
Bin leider kein Betriebsmann eher Java Entwickler und kämpfe mich durch.

Besten Dank für jeden Hinweis
mberr001
 
Posts: 3
Joined: 14. February 2019 12:55
XAMPP version: 5.6.40
Operating System: debian

Re: Mixed Content by ProxyPass/ProxyPassReverse

Postby mberr001 » 15. February 2019 16:59

Hier kurz einen Nachtrag:
Es liegt an das href im Base Tag des Dokuments.

<base href="#{facesContext.externalContext.request.scheme}://#{facesContext.externalContext.request.serverName}:#{facesContext.externalContext.request.serverPort}#{facesContext.externalContext.requestContextPath}/" />

ich habe die beiden Konfigurationen verglichen und mit der laufenden apache 2.1 Konfig wird immer https im href zurückgeliefert. Bei der neuen Konfiguration nur http.
ich kann das nur erklären dass apache durch die Weiterleitung immer nur HTTP auf Port 8080 setzt.

Eine Idee wie der apache trotz der internen Weiterleitung via HTTP die initial request Daten (Host und Port) weiterleiten kann

Viele Grüße
mberr001
 
Posts: 3
Joined: 14. February 2019 12:55
XAMPP version: 5.6.40
Operating System: debian

Re: Mixed Content by ProxyPass/ProxyPassReverse

Postby Nobbie » 15. February 2019 20:48

mberr001 wrote:Es liegt an das href im Base Tag des Dokuments.


Wahrscheinlich.

mberr001 wrote:ich habe die beiden Konfigurationen verglichen und mit der laufenden apache 2.1 Konfig wird immer https im href zurückgeliefert. Bei der neuen Konfiguration nur http.
ich kann das nur erklären dass apache durch die Weiterleitung immer nur HTTP auf Port 8080 setzt.


Kann ich nichts zu sagen, ich kenne die Anwendung nicht. Aber Du hast immer noch das Verständnisproblem, dass Apache NICHTS daran ändern kann - die Fehlermeldung kommt aus dem Browser und die kommt, weil da http:// steht anstatt https://.

mberr001 wrote:Eine Idee wie der apache trotz der internen Weiterleitung via HTTP die initial request Daten (Host und Port) weiterleiten kann


Nein, aber selbst wenn, es würde nichts nutzen. Der Browser sieht (und macht) einen Request auf http:// und das stört ihn schon. Was nachher Apache daraus macht, das spielt keine Rolle, da ist es zu spät, der Browser hat sich geärgert über das http://. Egal welche Requests wo und wann schon mal geschehen sind - da steht klipp und klar http:// im Source und das kollidiert mit dem Kontext, dass Apache das Dokument aus https:// bezogen hat. Du bist IMMER zu spät, wenn Du irgendetwas in Apache machen willst, um die Daten von https:// zu beziehen. DAS GEHT SO NICHT.

Es wäre wunderbar, wenn das so einfach wäre, hätte mir auch viel geholfen, aber es geht nicht. Punkt. Du musst selbst Sorge tragen, dass da überall https:// steht, ob das mit der base-Anweisung oder sonstwie geschieht, das ist egal, aber es geht NICHT mit irgendwelchen Apache DIrektiven.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04


Return to Apache

Who is online

Users browsing this forum: No registered users and 31 guests