У міру розвитку мережі Інтернет користувачі і власники сайтів все більш серйозно відносяться до безпеки, тому використання SSL-з’єднання стає повсюдною практикою.

У цій статті ми розповімо, як реалізувати SSL-шифрування сайту на WordPress, але не будемо заглиблюватися в деталі придбання SSL-сертифіката та налаштування веб-сервера, так як ці питання залежать від провайдерів відповідних послуг.

Більшість хостерів допоможуть вам придбати сертифікат і встановлять його за порівняно скромну плату. Всі поради, описані в цій статті, належать до ситуації, коли сертифікат SSL вже встановлено на нашому сервері.

Що таке SSL?

Вікіпедія визначає SSLтак:

SSL (від англійського Secure Sockets Layer — рівень захищених сокетів) — криптографічний протокол, який забезпечує безпеку зв’язку. Він використовує асиметричну криптографію для аутентифікації ключів обміну, симетричне шифрування для збереження конфіденційності, коди автентифікації повідомлень для цілісності повідомлень.

Часте використання протоколу SSL призвело до формування протоколу HTTPS (Hypertext Transfer Protocol Secure), що підтримує шифрування. Дані, які передаються по протоколу HTTPS, «упаковуються» криптографічний протокол SSL, тим самим забезпечуючи захист цих даних.

Навіщо використовувати SSL?

Безпека

Безпекою не можна зловживати. В сучасних умовах реалізувати SSL легко і недорого. Якщо ви маєте інтернет-магазин або інший сайт, який обробляє велику кількість приватних даних, то підтримка SSL для вас абсолютно необхідна.

Від SSL виграє не тільки електронна комерція: для будь-якого сайту з аутентифікацією користувачів шифроване з’єднання буде великим плюсом.

Довіра

Наявність валідного SSL-сертифіката є загальновизнаним ознакою респектабельності сайту. Багато користувачів звикли дивитися на «https://» в адресному рядку браузера, перш ніж вводити будь-яку інформацію.

SEO

Пошукова оптимізація і безпека йдуть рука об руку. Google заявив, що сайти, що мають SSL-версію, мають більш високу позицію в їх системі PageRank.

Відмова від відповідальності

Перш ніж почати працювати над сайтом, зробіть резервну копію. По можливості працюйте на локальній копії сайту, а потім переносите все онлайн. Автори статті не несуть відповідальності за втрату даних чи інші проблеми, які виникли у вас при реалізації описаних тут процедур.

Захист адміністраторської частини WordPress

Безпечний інтерфейс адміністратора є механізмом, який вбудований в ядро WordPress. Щоб вирішити цю функціональність, вам потрібно буде відредагувати файл wp-config.php, що знаходиться в корені вашого сайту. Ще раз підкреслимо необхідність створювати резервні копії важливих даних перед тим, як вносити зміни на сайт.

Отже, відкрийте файл wp-config.php та встановіть константу FORCE_SSL_ADMIN в значення true. Відповідний код повинен виглядати приблизно так:

define(‘FORCE_SSL_ADMIN’, true);

Додавши або відредагувавши потрібний рядок, не забудьте зберегти зміни. Оновивши сайт, ви повинні помітити, що тепер при вході в адміністративну частину відбувається переадресація на протокол HTTPS.

Використання HTTPS-плагіна WordPress

На випадок, якщо ви хочете надати всім користувачам сайту можливість використовувати безпечне з’єднання, існує спеціальний плагін. Цей плагін дозволяє налаштувати використання протоколу HTTPS в інтерфейсі адміністратора. Можна захистити як окремі сторінки і публікації, так і весь сайт цілком.

Ви можете встановити плагін «WordPress HTTPS» з панелі управління WordPress.

Безпека окремих сторінок або публікацій

Коли ви встановіть плагін «WordPress HTTPS«, кожен об’єкт на вашому сайті придбає спеціальний метабокс, який дозволить вам переадресувати запити користувачів сайту, звернені до цього об’єкта і його дочірніх об’єктів, на протокол HTTPS:

Безпека всього сайту

Убезпечити весь сайт можна на сторінці налаштувань HTTPS. Вибравши меню «HTTPS» в панелі керування сайтом, можна настроїти наступні параметри:

  • Force SSL Administration (використовувати тільки SSL для адміністрування): якщо ви вже виконали нашу рекомендацію щодо захисту адміністративного інтерфейсу WordPress, наведену нами на початку статті, цей чекбокс буде включений. Якщо ні – увімкніть його для досягнення того ж ефекту;
  • Force SSL Exclusively: (використовувати виключно SSL): якщо вибрати цей чекбокс, кожна сторінка, для якої параметр HTTPS не вказано окремо, буде перенаправляти користувача на свою HTTPS-версію;
  • Remove Insecure Elements (видалити небезпечні елементи): тепер всі елементи з посиланнями на HTTP-протокол видаляються зі сторінок. Використовуйте цю опцію з обережністю, так як вона може перешкодити роботі плагінів, що посилаються на зовнішні ресурси:

Підтримка SSL в WordPress

Нарешті, внизу сторінки присутній вікно введення тексту, зазначене як URL Filters. Туди можна ввести посилання на внутрішні ресурси, які необхідно захистити за допомогою SSL. Допускається використання регулярних виразів. Приклад, пропонований плагіном: захистити всі адреси, що починаються з /store/.

Для цього необхідно надрукувати «/store/» у полі введення і зберегти зміни. Кожен фільтр має вводитися з нового рядка. Якщо ввести туди «/«, то весь сайт буде доступний тільки через SSL. Відвідувач, який звертається до сайту по HTTP, буде автоматично переадресовано на HTTPS-версію сайту.

Якщо така поведінка сайту – саме те, чого ви прагнете, вам слід також змінити налаштування деяких стандартних адрес сайту. Про це ми поговоримо в наступній частині статті:

Підтримка SSL в WordPress

Переадресація на SSL з використанням коду відповіді HTTP

Цей прийом підходить в тому випадку, якщо ви взагалі не хочете використовувати небезпечне з’єднання на своєму сайті. Все, що вам потрібно – переадресовувати HTTP-трафік за допомогою коду 301 (постійне переміщення). Це можна зробити за допомогою PHP-коду, але простіше і ефективніше в даній ситуації використовувати директиви .htaccess.

Мається на увазі, що ваш сайт використовує веб-сервер Apache з модулем mod_rewrite. Це – вельми поширена конфігурація хостингу на Linux, але на всяк випадок уточніть це питання у хостера, перш ніж діяти.

Спочатку налаштуємо WordPress, а потім займемося .htaccess. В панелі адміністрування WordPress виберіть у меню «Settings» (Параметри) – «General» («Загальні»). Змініть поля «WordPress Address (URL)» і «Site Address (URL) так, щоб замість «http://» в них значилося «https://». Натисніть кнопку «Зберегти зміни» (Save Changes) в самому низу сторінки.

Зроблені зміни дадуть WordPress вказівку використовувати протокол HTTPS при генерації посилань на наш сайт. Але відвідувачі все ще зможуть заходити на нього HTTP. Тут нам і знадобиться .htaccess.

Якщо ви використовуєте генерацію постійних посилань (permalinks), то файл .htaccess вже є в корені вашого сайту. Якщо ні, ви можете створити його в будь-якому текстовому редакторі. Ім’я цього файлу не має розширення.

Воно починається з точки, що для UNIX-подібних систем означає, що програми можуть приховувати його наявність в системі від користувача аналогічно файлів з атрибутом «hidden» у файловій системі Windows.

Ваш файл .htaccess може бути порожньою, або містити якийсь код, наприклад, стандартний код реалізації постійних посилань (permalink):

# BEGIN WordPress
RewriteEngine On
RewriteBase /secure/
RewriteRule ^index.php$ — [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /secure/index.php [L]
# END WordPress

Нам необхідно розмістити на початку файлу .htaccess наступні директиви:

# Begin HTTPS
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R,L]
# END HTTPS

Замініть https://www.yourdomain.com/ у нашому прикладі на нову адресу вашого сайту.

Перша і остання рядки нашого прикладу – коментарі, потрібні для того, щоб нам було простіше підтримувати конфігурацію нашого сайту. Директива “IfModule mod_rewrite.c» здійснює перевірку на наявність модуля mod_rewrite в конфігурації нашого хостингу.

Наявність цієї перевірки дозволить іншим директивам .htaccess здійснитися в тому випадку, якщо цей модуль не встановлено. Без такої перевірки вони б викликали збій.

Далі ми включаємо механізм заміни адреси («RewriteEngine On«) і встановлюємо умова (RewriteCond), при якому буде відбуватися заміна – доступ до сайту через порт HTTP (80). Нарешті, RewriteRule визначає, на що буде замінюватися адресу – на каталог secure, який переадресує запит до HTTPS-частини сайту.

Встановивши дані правила, ви можете перевірити їх роботу, зайшовши на сайт за адресою, яка починається з «http://«. Якщо все пройшло гладко, в адресному рядку браузера з’явиться «https://«.

Яке рішення вибрати?

Однозначної відповіді у нас немає. Деякі побоюються за те, що покладатися на плагін в справі безпеки сайту не варто, так як плагін може містити уразливості або може бути виведений з ладу невдалим оновленням.

На це можна заперечити, що плагін WordPress HTTPS має хорошу репутацію, регулярно оновлюється і має велику аудиторію, а його код не настільки складний, щоб містити серйозні уразливості.

До того ж плагін забезпечує гнучкість в управлінні безпекою сайту, якщо перед нами стоїть завдання віддавати через SSL лише певну частину контенту.

З іншого боку, пряме редагування PHP-коду є більш витонченим і керованим рішенням, і якщо вас влаштовує його функціональність, ви цілком можете зупинитися на ньому.

Потенційні проблеми

Щоб сторінки, що передаються через SSL, не викликали протестів у браузерів, весь контент на них повинен віддаватися по HTTPS. Це стосується скриптів, стилів, графіки, шрифтів, вбудованих об’єктів…

На жаль, багато сторонні постачальники контенту, наприклад, банерообмінні мережі, не завжди передають свої дані по HTTPS. Саме ці обмеження часто змушує сайти передавати одні сторінок через HTTP, а інші – через HTTPS. Цю можливість ми обговорювали вище.

Іноді можна обійти гострі кути, використовуючи незалежні від протоколу посилання. Наприклад, ми хочемо вбудувати шрифт Open Sans із зовнішнього джерела (CDN Google) в обидві частини нашого сайту. У такому випадку ми можемо послатися на нього так:

Звернули увагу на відсутність назви протоколу перед подвійним слешем? Це змушує браузер використовувати для запиту ресурсу той же протокол, по якому отримана посилається на цей ресурс сторінка. Так що, якщо ваш сайт використовує HTTPS, буде запитана HTTPS-версія шрифту. В іншому випадку буде використано протокол HTTP.

В більшості випадків цей метод просто працює і рятує нас від зайвого головного болю. Зрозуміло, його можна застосовувати не тільки HTML, а і CSS.

Налагодження помилок HTTPS

Повторюся: HTTPS-сторінки, що містять в собі HTTP-посилання, викликають помилки в браузерах. Такий контент цілком обґрунтовано вважається підозрілим з точки зору безпеки. Знайти подібні проблеми на сторінках вашого сайту допоможуть вбудовані засоби браузера Google Chrome.

Chrome виділяє підозрілі сторінки жовтим трикутником, який з’являється над символом безпечного з’єднання в адресному рядку браузера. Клацання по трикутник показує повідомлення, подібне до цього:

Підтримка SSL в WordPress

Докладні відомості про безпечному контенті можна побачити в консолі JavaScript. (Кнопка меню «Tools» («Інструменти») – «JavaScript Console«.)

Підтримка SSL в WordPress

В даному випадку винуватець наших проблем – файл http://en.support.files.wordpress.com/2008/12/def-avatar.png, розташований на 316 рядку нашої сторінки. Посилання на цей файл необхідно замінити на безпечну або незалежну від протоколу, як ми обговорювали раніше.

Висновок

Тепер ви можете прийняти обгрунтоване рішення про те, як використовувати протокол SSL (HTTPS) на вашому сайті, і реалізувати це рішення.

Переклад статті «Options for SSL in WordPress» був підготовлений дружною командою проекту Сайтостроение від А до Я.