Наша интрасеть использует mod_ldap для аутентификации пользователей на нашем внутреннем сервере Active Directory следующим образом:
<Location /***/>
AuthType Basic
AuthName "***"
AuthBasicProvider ldap
AuthLDAPUrl "***"
require valid-user
</Location>
Мы хотим, чтобы наши пользователи могли заходить на наш сайт через Интернет, но, к сожалению, Базовый аутентификация выполняется в простой текст, что предоставит доступ к нашим учетным данным AD в сети.
Я понимаю, что могу защитить весь сайт с помощью ssl, но единственное, что меня действительно беспокоит, - это сами учетные данные.
Как лучше всего защитить мои учетные данные AD без использования https: // для всего сайта?
Примечание. Я пробовал заменить «Базовый» на «Дайджест», но это не сработало.
Вы никогда не сможете использовать дайджест-аутентификацию с LDAP, потому что дайджест-аутентификация скрывает (через MD5) пароль, поэтому его нельзя сравнивать с паролем ldap.
Вы можете решить эту проблему, используя куки вместо базовой аутентификации. См., Например, pubcookie http://www.pubcookie.org/ или Apache2 :: AuthCookie http://search.cpan.org/~mschout/Apache-AuthCookie-3.15/lib/Apache2/AuthCookie.pm
Но в чем проблема с использованием SSL везде? Вы тратите усилия на снятие защиты.
Ответ: вы не можете. После того, как пользователь аутентифицируется с помощью базовой аутентификации, его или ее браузер будет отправлять заголовок авторизации с каждым последующим запросом, содержащий его или ее пароль в открытом виде (только в кодировке Base64). Таким образом, единственный способ защитить пароль - это принудительно использовать HTTPS для всего сайта, по крайней мере, после их аутентификации.
Я ответил здесь https://stackoverflow.com/questions/6458398/apache-2-2-redirect-to-ssl-then-do-auth-with-solution-but-is-it-crap/7822709#7822709, решение, использующее SSLRequireSSL
, а ErrorDocument 403
возвращает страницу ошибки html 403, содержащую JavaScript, который перезагрузит страницу на HTTPS ... лучшее решение, которое я нашел, не разбивая файл конфигурации на два, один загружается VirtualHost
на порт HTTP, другой на порт HTTPS.
Используйте правило перезаписи, чтобы направить все аутентифицированные страницы на https :. Это произойдет до того, как произойдет запрос аутентификации. Также требуется ssl для всех аутентифицированных страниц.
РЕДАКТИРОВАТЬ: вы можете использовать правила перезаписи, чтобы заставить http: запросы к https: запросам. Это происходит для всех запросов, соответствующих шаблону, по которому вы соответствуете. Обычно это происходит до того, как произойдет страница, требующая аутентификации. Это может быть внутри определения местоположения или каталога. Остальная часть сайта будет на http, если доступ к ней не будет осуществляться с использованием https. Условия перезаписи довольно гибкие, в зависимости от того, что совпадает, и во что это переписывается.
# Force clients from the Internet to use HTTPS RewriteEngine on RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$ RewriteCond %{HTTPS} !=on RewriteRule .* - [F]
С точки зрения безопасности вам потребуется ssl. Как и аутентификация по паролю, это происходит до доступа к странице. Обязательно используйте "Удовлетворит все ваши правила безопасности". Добавить SSLRequireSSL
к условиям для аутентифицированных зон.
Дальнейшие подробности описаны в Apache SSL HowTo.