Мне интересно, каков наилучший способ принудительной аутентификации HTTPS.
Когда у меня есть это в моем файле .htaccess:
AuthType Basic
AuthName "Developer"
AuthUserFile /usr/local/etc/apache22/passwords/passwords
Require user david
Аутентификация работает, но она аутентифицируется через порт 80, отправив пароль в открытом виде.
Поэтому я решил добавить правило перенаправления для перенаправления всех не-HTTPS-запросов на эквивалентные HTTPS-запросы:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteBase /~david/
RewriteRule ^(.*)$ https://myserver.tld/~david/$1 [R,L]
Это также работает, но этосначала аутентифицируется на порту 80, затем перенаправляет, затем снова аутентифицируется на порту 443. Я НЕ хочу аутентифицироваться на порте 80, потому что пароль будет отправлен в виде открытого текста.Я не смог найти хороший способ, чтобы сразу перенаправить на HTTPS, а затем аутентифицировать.
Единственный способ понять, как это сделать, это сделать:
AuthType Basic
AuthName "Developer"
AuthUserFile /usr/local/etc/apache22/passwords/passwords
Require user david
ErrorDocument 403 /403.php
SSLRequireSSL
И, имея PHP-скрипт 403.php на / моего сервера:
<?php
header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
?>
Это желаемое поведение.Для этого требуется SSL, поэтому при попытке доступа к каталогу через порт 80 он выдает специальный документ об ошибке, и этот документ перенаправляет страницу на HTTPS.
Это похоже на kludge.Есть ли лучший способ сделать это?