У меня есть собственный блог на Wordpress. По возможности я стараюсь защищать административные интерфейсы веб-приложений с помощью проверки подлинности сертификата клиента SSL и X.509. У меня все это работает должным образом с такими вещами, как phpMyAdmin, поэтому технические детали с веб-сервером все на месте.
Моя настройка хостинга:
Я запускаю все это на VPS, поэтому у меня только один внешний IP. У меня есть несколько других веб-сайтов SSL, работающих на коробке: один на порту по умолчанию, а все остальные на альтернативных портах (так что каждый может иметь другой сертификат, соответствующий их имени хоста).
Я намеревался создать два блока конфигурации сервера:
Проблема, с которой я столкнулся, заключается в том, что 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?
Это, очевидно, не разделяет весь раздел администратора, но, по крайней мере, это означает, что незашифрованный трафик останавливается.