Apache .htaccess: SSLRequireSSL produce un error interno del servidor HTTP 500

Apr 26 2020

Tengo un servidor web Apache alojado en one.com. El módulo OpenSSL está activo y funcionando. Puedo manipular .htaccess y veo las reacciones. Quiero confiar en SSL y la redirección reescribiendo funciona bien. Además, necesito autenticación de usuario. Funciona bien con AuthType Basic. Solo hay una desventaja: cuando un usuario solicitahttp://sub.example.com/non-existent-file(sin SSL, por supuesto con mi nombre de dominio real), verán un mensaje de inicio de sesión sin SSL. Por supuesto, quiero prohibir el envío de contraseñas sin cifrar. Leí, la solución más simple sería usar la SSLRequireSSLdirectiva, pero a mi Apache no parece gustarle. Permítanme desglosar el ejemplo para reproducir el error. Un archivo .htaccess completamente negro permite que el servidor proporcione contenido tanto en http como en https. Si agrego solo SSLRequireSSLy nada más en .htaccess, obtengo un error de servidor interno HTTP 500.

.htaccess

SSLRequireSSL

→ 500 error interno del servidor

¿Por qué es eso y cómo debería usar SSLRequireSSLen su lugar?

Mi archivo .htaccess completo sin 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>

No pude determinar mi versión de Apache. La función PHP apache_get_version()no existe. php_sapi_name()devuelve cgi-fcgi. Puedo acceder a una terminal SSH. No hay ningún comando que comience con apache… o Apache…. Pero supongo que Apache se está ejecutando, porque en phpinfo()él se habla de una constante $_SERVER['SERVER_SOFTWARE']establecida en Apachey $_ENV['SERVER_SOFTWARE']también establecida en Apache.

Respuestas

GerardH.Pille Apr 30 2020 at 16:05

Así es como lo manejé usando .htaccess:

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>