Назад | Перейти на главную страницу

Защита интерфейса администратора Wordpress на альтернативном порту

У меня есть собственный блог на Wordpress. По возможности я стараюсь защищать административные интерфейсы веб-приложений с помощью проверки подлинности сертификата клиента SSL и X.509. У меня все это работает должным образом с такими вещами, как phpMyAdmin, поэтому технические детали с веб-сервером все на месте.

Моя настройка хостинга:

Я запускаю все это на VPS, поэтому у меня только один внешний IP. У меня есть несколько других веб-сайтов SSL, работающих на коробке: один на порту по умолчанию, а все остальные на альтернативных портах (так что каждый может иметь другой сертификат, соответствующий их имени хоста).

Я намеревался создать два блока конфигурации сервера:

  1. один обслуживающий порт 80 blog.domain.com, который возвращал 404, если вы пытались добраться до чего-либо в / wp-admin
  2. другой, работающий на порту 8443 с SSL без ограничений URL, но требующий предоставления действительного сертификата клиента X.509.

Проблема, с которой я столкнулся, заключается в том, что Wordpress не любит, когда к нему обращаются через два разных порта. Всякий раз, когда я пытаюсь пойти в https://blog.domain.com:8443, он перенаправляет меня на https://blog.domain.com, который представляет собой совершенно другой виртуальный хост (основной сайт на сервере, работающий на порту по умолчанию). Затем я получаю сообщение об ошибке имени сертификата в браузере, и даже если я отменяю предупреждение, я больше не общаюсь с сайтом wordpress.

Основной URL-адрес блога хранится в таблице wp_options:

mysql> select option_value from wp_options where option_name = 'siteurl';
+------------------------------+
| option_value                 |
+------------------------------+
| http://blog.domain.com       |
+------------------------------+
1 row in set (0.00 sec)

mysql>

так что я не могу просто сделать вторую копию файлов блога с основным URL, установленным на https://blog.domain.com:8443 и получить доступ к интерфейсу администратора таким образом.

Любые идеи?

ОБНОВИТЬ

Поиграв какое-то время с предложенными ответами, я пришел к выводу, что невозможно делать именно то, что я хочу. Включение функций в wordpress приводит к тому, что пользователи делают запросы SSL к / wp- (admin | login | register), что они не могут сделать, если мне требуются сертификаты клиента X.509 на стороне SSL.

Лучшее решение, которое я придумал, - это настроить интерфейс SSL с аутентификацией по сертификату, который просто передавал запросы обратно на nginx без SSL. Даже в этом случае я не могу полностью отключить доступ без SSL к / wp-admin, потому что большая часть CSS и Javascript, используемых при регистрации пользователей и управлении профилями, происходит из этого каталога.

Я могу разрешить доступ к CSS, изображениям и Javascript в / wp-admin через HTTP и просто требовать SSL-доступ для скриптов PHP, но тогда пользователи не могут изменять свой профиль (цветовые схемы, отображаемые имена и т. Д.) Следующий шаг было бы идентифицировать подмножество PHP-скриптов, необходимых для обычных пользователей, и позволить им проходить через HTTP, отклоняя остальные, но тогда я подчиняюсь команде разработчиков WordPress, если они реорганизуют вещи.

Я предполагаю, что это сводится к тому, чтобы научиться управлять блогом только через SSL, хотя сервер позволяет мне делать это через простой HTTP.

У меня аналогичная проблема, я использую wordpress довольно давно и хочу заставить / wp-admin / работать через SSL.

Так я и сделал :

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/(wp-login.php|wp-admin/) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Это почти работает. Когда я иду в http: // сайт / wp-admin / Меня перенаправляют на wp-login.php через SSL, но после входа в систему меня перенаправляют на https://website/http://website/wp-admin/ (это не опечатка), потому что wordpress использует внутреннее перенаправление, которое не работает с правилом перезаписи.
Путем загрузки http: // сайт / wp-admin / снова я перенаправлен на https: // сайт / wp-admin / и все работает нормально.

Но перед недавним выпуском Wordpress была другая проблема, на странице wp-login.php действие формы входа было установлено на http: //website/wp-login.php. Таким образом, информация для входа была отправлена ​​в открытом виде. (Так что нужно было исправить wp-login.php)

В недавнем (начиная с 2.6.0) выпуске Wordpress добавлен FORCE_SSL_LOGIN настройка. Положив define ('FORCE_SSL_LOGIN','true'); в wp-config.php сделает действие формы на wp-login.php на https: //website/wp-login.php (С небольшим изменением в wp-login.php вы можете добавить: 8443)

Таким образом, с `FORCE_SSL_LOGIN + перезаписать это безопасно, но мне все равно нужно перезагрузить URL-адрес wp-admin после процесса входа в систему.

2.6.0 также добавить FORCE_SSL_ADMIN, но когда я установил для него значение true (с или с настроенной перезаписью), я на неопределенное время перенаправлялся на http: // сайт / wp-admin / Таким образом, вы можете попытаться установить FORCE_SSL_LOGIN в значение true и исправить wp-login.php, чтобы использовать порт 8443, и вы также можете попробовать FORCE_SSL_ADMIN (я еще не знаю, почему он не работает для меня, может быть, это будет для вас)

Это может вам помочь, так как в wordpress 2.6 вы можете принудительно объединить области администратора и входа в систему.

http://codex.wordpress.org/Administration_Over_SSL

  define('FORCE_SSL_LOGIN', true);
  define('FORCE_SSL_ADMIN', true);

Иногда вам нужно, чтобы весь ваш wp-admin работал через безопасное соединение с использованием протокола https. Концептуально процедура работает так:

Настройте два виртуальных хоста с одним и тем же URL-адресом (URL-адрес блога), один безопасный, а другой нет. На защищенном виртуальном хосте настройте правило перезаписи, которое направляет весь трафик, не связанный с администратором wp, на незащищенный сайт. На незащищенном виртуальном хосте настройте правило перезаписи, которое направляет весь трафик с wp-admin на безопасный хост. Добавьте фильтр (через плагин), который фильтрует ссылки в wp-admin, чтобы после активации административные ссылки переписывались для использования https и редактировали файлы cookie для работы только через зашифрованные соединения.

Плагин, который они упоминают, называется админ ssl.

Ммм ... У меня есть подозрение, что это потребует искажения wordpress, чтобы отделить раздел wp-admin от основного сайта, для чего, насколько я знаю, он не предназначен.

Разве вы не можете настроить безопасный виртуальный хост SSL (с тем же корневым каталогом), а затем с помощью магии .htaccess (что я делал раньше) заставить все запросы / wp-admin проходить через https, а не через http?

Это, очевидно, не разделяет весь раздел администратора, но, по крайней мере, это означает, что незашифрованный трафик останавливается.