Apache .htaccess: SSLRequireSSL erzeugt einen internen HTTP 500-Serverfehler

Apr 26 2020

Ich habe einen Apache-Webserver, der auf one.com gehostet wird. Das OpenSSL-Modul ist aktiv und funktioniert. Ich kann .htaccess manipulieren und sehe die Reaktionen. Ich möchte mich auf SSL verlassen, und die Umleitung durch Umschreiben funktioniert einwandfrei. Außerdem benötige ich eine Benutzerauthentifizierung. Es funktioniert gut mit AuthType Basic. Es gibt nur einen Nachteil: Wenn ein Benutzer dies wünschthttp://sub.example.com/non-existent-file(ohne SSL, natürlich mit meinem echten Domainnamen) wird eine Anmeldeaufforderung ohne SSL angezeigt. Natürlich möchte ich das unverschlüsselte Senden von Passwörtern verbieten. Ich habe gelesen, die einfachste Lösung wäre die Verwendung der SSLRequireSSLDirektive, aber mein Apache scheint es nicht zu mögen. Lassen Sie mich das Beispiel aufschlüsseln, um den Fehler zu reproduzieren. Mit einer vollständig schwarzen .htaccess- Datei kann der Server Inhalte sowohl auf http als auch auf https bereitstellen. Wenn ich nur SSLRequireSSLund nichts anderes zu .htaccess hinzufüge , wird ein interner HTTP 500-Serverfehler angezeigt.

.htaccess

SSLRequireSSL

→ 500 interner Serverfehler

Warum ist das so und wie soll ich es SSLRequireSSLstattdessen verwenden?

Meine vollständige .htaccess-Datei ohne SSLRequireSSL:

<IfModule mod_rewrite.c>

    RewriteEngine on
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=307]
    Redirect 307 /index.php /pages/welcome.php

</IfModule>

<IfModule mod_authn_file.c>

    AuthName "Get username and password from admin."
    AuthType Basic
    <if "%{REMOTE_ADDR} -ipmatch '192.168.0.0/24'">
        AuthUserFile /home/user/www/sub.example.com/html/.htpasswd
    </if>
    <else>
        AuthUserFile /customers/1/a/0/example.com/httpd.www/sub/.htpasswd
    </else>
    Require valid-user
    Order deny,allow
    Deny from all
    Allow from 192.168.0.0/24 w3.org googlebot.com
    Satisfy Any

</IfModule>

Ich konnte meine Apache-Version nicht bestimmen. Die PHP-Funktion apache_get_version()existiert nicht. php_sapi_name()kehrt zurück cgi-fcgi. Ich kann auf ein SSH-Terminal zugreifen. Es gibt keinen Befehl, der mit Apache… oder Apache… beginnt. Aber ich nehme an, Apache läuft, weil phpinfo()darin über eine Konstante berichtet wird, $_SERVER['SERVER_SOFTWARE']die auf Apacheund $_ENV['SERVER_SOFTWARE']auch auf gesetzt ist Apache.

Antworten

GerardH.Pille Apr 30 2020 at 16:05

So habe ich es mit .htaccess geschafft:

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

<If "%{HTTPS} == 'on'">
    AuthType Basic
    AuthName "Restricted Files"
    AuthBasicProvider file
    AuthUserFile "/var/www/html/secrets/.passwd"
    Require valid-user
</If>