- Навіщо потрібно використовувати https і що мається на увазі під безпекою?
- придбання сертифіката
- види сертифікатів
- Wildcard SSL
- Мультидоменні SSL сертифікати
- EV (Extended Validation) сертифікати
- Сертифікати з підтримкою IDN
- отримання сертифікату
- Налаштування сайту
- Тег <base />
- Тег rel = "canonical»
- 301 редирект з http на https
- файл robots.txt
- Переїзд сайту в панелі вебмайстрів Яндекс і Гугл
- Яндекс вебмастер
- Центр веб-майстрів Гугл
- Перехід на HTTPS в Joomla
- Помилка при переході на Https в Joomla
- Перехід на HTTPS в WordPress
Всім привіт! У даній статті торкнемося теми безпеки, а саме безпечний протокол передачі даних - https. Якщо ви звернули увагу мій блог, на якому ви зараз перебуваєте працює по протоколу https, на який я перейшов недавно. Також, на https я перевів один з моїх клієнтських сайтів. Довелося трохи повозитися і понервувати, але в підсумку все вийшло. Я подумав, що треба обов'язково написати про це на блозі - як перейти з http на https безболісно для сайту, тим більше ця тема я вважаю вже популярна, тому що сьогодні все більше і більше сайтів переходять на https.
Що мене спонукало перейти на протокол https? Останнім часом мені на очі почали траплятися ось такі заголовки: Браузер Mozilla Firefox незабаром перестане підтримувати небезпечні http-з'єднання; Уряд США доручило всім державним сайтам перейти на HTTPS; C січня 2017 року всі сайти, що передають секретні дані (паролі, номери кредитних карт і т.д.) по незахищеному з'єднанню в браузері Google Chrome позначатимуться як небезпечні. Плюс до всього десь в інтернеті читав, що скоро всім сайтам доведеться перейти на протокол https в обов'язковому порядку. Я подумав, що в один прекрасний день все одно ця доля спіткає і мене. Так навіщо ж зволікати? Тим більше хостинг beget.ru , На якому я сиджу надав можливість для придбання безкоштовних SSL-сертифікатів. Загалом, зібрав всю необхідну інформацію по тому, як перейти з HTTP на HTTPS і зробив це. 🙂
структура статті
Навіщо потрібно використовувати https і що мається на увазі під безпекою?
Якщо говорити коротко, то протокол https дозволяє відправляти запити на сервер з нашого сайту в зашифрованому вигляді, гарантуючи при цьому, що ці самі дані не будуть перехоплені хакерами. Елементарний приклад переданих даних - це авторизація на сайті (або реєстрація). В процесі авторизації ми відправляємо запит на сервер, який містить логін і пароль. Так ось, якщо відправляти ці дані по небезпечному з'єднанню, то вони легко можуть бути перехоплені, що в результаті може привести до злому сайту. Роботу протоколу https забезпечують SSL сертифікати. Вони бувають різних видів, про види сертифікатів читайте нижче.
Весь процес я вирішив розділити на кроки і виконувати їх як раз саме в такій послідовності. Також нижче я дам рекомендації по переходу для популярних cms Joomla та WordPress. У кожного є свої особливості.
придбання сертифіката
Для початку необхідно придбати SSL сертифікат, щоб ваш сайт був доступний за обома протоколами - http і https. Давайте спочатку внесемо деякі ясності в види SSL сертифікатів.
види сертифікатів
прості сертифікати
Такі сертифікати видаються на один або декілька доменів і підходять як фізичним, так і юридичним особам. Як правило, на випуск таких сертифікатів не йде багато часу, може бути випущений навіть протягом 5 хвилин. Щоб отримати такий сертифікат необхідна тільки перевірка приналежності до домену того, хто його запитує.
Wildcard SSL
Wildcard SSL - прекрасно підійде сайтам з наявністю піддоменів. В даному випадку достатньо випустити один сертифікат, який буде працювати на всіх піддоменів і дозволить заощадити гроші на покупку окремих сертифікатів.
Мультидоменні SSL сертифікати
МультиДоменні SSL сертифікат - сертифікат, який може підтримувати відразу декілька доменів. Також, як і Wildcard дозволить заощадити гроші. Так що майте на увазі, якщо у вашій компанії або проекту є кілька доменних імен, то вибирайте саме МультиДоменні сертифікат.
EV (Extended Validation) сертифікати
EV (Extended Validation) - розширена перевірка компанії. Даний вид сертифіката можуть дозволити собі купити тільки великі компанії. Для його отримання необхідно надати всю детальну інформацію про компанію - назва організації, реквізити, наявність про державну реєстрацію, реальні дзвінки для затвердження отриманих даних і багато іншого. Так, отримання такого виду сертифіката справа клопітка, але повірте воно того варто. Більш того, поряд з адресним рядком в браузері буде відображатися назва компанії. Ось як це виглядає на прикладі сайту Ощадбанку.
Виглядає круто і підвищує довіру потенційного клієнта. Тому, власникам великих компаній рекомендується випуск саме EV сертифікатів.
Сертифікати з підтримкою IDN
Не всі сертифікати підтримують кириличні домени. Якщо у вас домен кирилицею в зоні РФ, то вам слід придбати сертифікат з підтримкою IDN.
Детальніше про види сертифікатів і їх вартості ви можете почитати в інтернеті. Тут же я навів лише деякі, щоб ви мали поняття, що сертифікати SSL бувають різні.
отримання сертифікату
Сьогодні придбати сертифікат SSL для сайту можна абсолютно безкоштовно. Вже давно Google заявив про те, що пора вже переходити всім на безпечний прокол https і що перевагу в ранжируванні буде віддаватися сайтам саме з захищеним з'єднанням. До речі, це ще одна причина по якій я перейшов на https. Загалом, в зв'язку з цим всім у світ з'явився проект під назвою Let's Encrypt . В першу чергу цей проект розрахований на доступність придбання SSL сертифікату, а також полегшити життя рядовим веб-розробникам з установкою сертифікатів (генерація приватних ключів та інше). І що найголовніше - сертифікати, що видаються Let's Encrypt, абсолютно безкоштовні. Особисто на моєму блозі варто саме такий сертифікат.
Я отримав сертифікат SSL від Let's Encrypt в панелі управління beget.ru. Якщо ви користуєтеся даними хостингом, то отримати його буде простіше простого. Заходьте в панель управління Бегета, далі переходите в розділ «Домени» і в списку доменів клацаєте по іконці SSL.
Іконка поруч з доменом говорить про те, що сертифікат вже встановлено. Потрапивши в розділ SSL, відкриваємо вкладку «Безкоштовний SSL сертифікат«. Якщо у вас є піддомени на обраному домені, то краще відразу виберіть і їх теж, тому що якщо цього не зробити відразу, то в подальшому доведеться перевипускати сертифікат.
Налаштування сайту
ресурси завантажень
Для перекладу сайту на HTTPS необхідно виконати деякі настройки на сайті, стосується це завантажуються ресурсів. Що мається на увазі під ресурсами, це - скрипти, стилі, картинки, аудіо, відео, тобто всі ті ресурси, які завантажуються браузером з вашого сайту через протокол http. Існують відносні і абсолютні адреси. Чим вони відрізняються?
Відносний адреса:
/image.jpg
Відносний адреса незалежно від протоколу:
//sitename.ru/image.jpg
Абсолютний адреса:
http://sitename.ru/image.jpg
В абсолютному адресу вказується доменне ім'я сайту з протоколом. Так ось, при переході на https необхідно застосовувати відносні адреси незалежно від протоколу, тобто відсікаючи сам протокол. При такому підході ресурси будуть завантажуватися за таким же протоколу, що і ваш і не важливо на http він або на https. Єдина умова - якщо ви завантажуєте ресурси з зовнішніх сайтів (наприклад, з CDN), то дані сайти повинні бути доступні по https, інакше від них доведеться відмовитися.
Наприклад, завантаження бібліотеки jQuery з CDN з підтримкою https буде наступною:
<Script src = "// code.jquery.com/jquery-1.12.4.min.js"> </ script>
Також, як варіант ви можете просто вказати всі абсолютні посилання з протоколом https (так наприклад зроблено в WordPress).
Тег <base />
Зверніть увагу, якщо ви на сайті використовуєте тег <base> з адресою сайту, то обов'язково прослідкуйте, щоб адреса була вказана з протоколом https. Наприклад, <base href = "https://zaurmag.ru» />. Даний тег не є обов'язковим, але все ж, якщо у вашій cms він використовується, то потрудіться його виправити в разі чого. Знаходиться він на самому початку секції <head>. Якщо вийде так, що ви все посилання змінили на відносні незалежно від протоколу (//sitename.ru), а в тезі <base> міститься адреса з http, то всі ваші відносні посилання будуть вважатися відносними залежно від протоколу http. В результаті в консолі браузера ви отримаєте купу помилок, а на сайті попливе дизайн.
Тег rel = "canonical»
Якщо у вас на сайті використовується тег rel = "canonical», то простежте за тим, щоб канонічний адресу сторінки в даному тезі був абсолютним із зазначенням протоколу https. Інакше, якщо буде http він буде працювати тільки на шкоду.
301 редирект з http на https
Щоб не втратити трафік нам необхідно зробити так, що коли користувач заходить на сайт за протоколом http його б автоматично перекидали на https. Склеювання дзеркал і переіндексація сайту в пошукових системах справа довга (Гугл правда швидко реагує, ось з Яндексом доведеться чекати), тому 301 редирект може це справа прискорити і не дати втратити трафік. Для цього в файл .htaccess потрібно додати всього дві строчки:
RewriteCond% {SERVER_PORT}! ^ 443 $ RewriteRule ^ (. *) $ Https://sitename.ru/$1 [R = 301, L]
Цих двох рядків повинно вистачити. Якщо ж у вас будуть проблеми з перенаправленням, то можете спробувати альтернативний код.
RewriteEngine On # Якщо цього рядка немає вище RewriteCond% {HTTP: X-Forwarded-Protocol}! = Https RewriteRule. * Https: //% {SERVER_NAME}% {REQUEST_URI} [R = 301, L]
А ось ще один код редиректу. Бувало таке у мене, що вище два коди, які не працювали. Допоміг тільки цей.
RewriteEngine On RewriteCond% {HTTPS} off RewriteCond% {HTTP: X-Forwarded-Proto}! Https RewriteRule ^ (. *) $ Https: //% {HTTP_HOST}% {REQUEST_URI} [L, R = 301]
Якщо і це не допоможе, то вам треба буде звернутися в службу підтримки хостингу, вони повинні допомогти з цим питанням.
Ще раджу додати код, який буде перекидати по 301 редіректу на www або на без www, в залежності від того, який домен ви вибрали основним.
## редирект з без www на www: RewriteCond% {HTTP_HOST} ^ sitename.ru $ [NC] RewriteRule ^ (. *) $ Https: //www.sitename/$1 [R = 301, L] ## редирект c www на без www: RewriteCond% {HTTP_HOST} ^ www.sitename.ru $ [NC] RewriteRule ^ (. *) $ https://sitename.ru/$1 [R = 301, L]
файл robots.txt
В robots.txt нам обов'язково слід вказати головне дзеркало з протоколом https. Також вказати посилання на карту сайту так з протоколом https. Ось як я зробив на своєму блозі:
Host: https://zaurmag.ru Sitemap: https://zaurmag.ru/sitemap.xml
Переїзд сайту в панелі вебмайстрів Яндекс і Гугл
Після перерахованих вище дій нам необхідно повідомити пошуковим системам, що сайт переїхав на новий протокол https. Як відомо адреса з http і з https це абсолютно два різних адреси в очах пошукових систем.
Яндекс вебмастер
Для переїзду сайту в Яндекс заходимо в панель Яндекс Вебмайстер за адресою https://webmaster.yandex.ru . Вибираємо свій сайт і в розділі «Налаштування індексування» вводимо свій домен і відзначаємо чек-бокс «Додати HTTPS«, зберігаємо.
Далі переходимо в розділ «Налаштування індексування» -> «Файли Sitemap» і додаємо адресу карти сайту з протоколом https. Ця електронна адреса, якщо пам'ятаєте ми вказували і в файлі robots.txt.
Центр веб-майстрів Гугл
З Яндексом розібралися, тепер давайте перейдемо до Google. Йдемо в центр вебмайстрів Гугл - https://www.google.com/webmasters і додаємо всі версії (дзеркала) сайту. Всього їх повинно бути 4. Наприклад, для мого блогу я додав:
http://zaurmag.ru https://zaurmag.ru http://www.zaurmag.ru https://www.zaurmag.ru
Далі вибираємо основне дзеркало з https природно, тільки з www або без www. Для свого сайту я вибрав без www - https://zaurmag.ru. Відкриваємо сайт і в налаштуваннях сайту (натискаємо по шестерінці праворуч) вказуємо основний домен. Ось на прикладі мого блога.
Далі вказуємо адресу карти сайту. Для цього йдемо в «Сканування» -> «Файли Sitemap» і додаємо адресу карти сайту, клацнувши по червоній кнопці праворуч. До речі, поки писав статтю виявив, що я не додав карту сайту для основного домену сайту zaurmag.ru. 🙂
Ну ось, на цьому все. Якщо ви зробили все правильно, то в браузері поряд з адресним рядком у вас повинен з'явитися зелений замочок. Хотілося б відзначити, що якщо хоча б один ресурс буде завантажуватися по незахищеному протоколу, то зеленого замочка ви не побачите, буде сірий знак оклику. Відстежити завантаження всіх ресурсів ви можете в консолі браузера .
Також хотілося б сказати, що процес переиндексации в Гугл займає не так багато часу, приблизно 2 тижні вистачить, а може і менше. Ось в Яндекс по складніше з цим, я і не здивований. Яндекс завжди був тугий в цьому плані. У перший час у вас обнулится ТИЦ, якщо він у вас був і в перший же апдейт Тіца повинен буде повернутися. Це я написав, щоб ви не лякалися. Ну а далі в Яндекс Вебмастер ви виявите таку картину ...
Минуло досить пристойний час після переходу на https і як бачите по скрін ще не всі сторінки перейшли на https. Що сказати, так влаштований вітчизняний пошуковик.
Парус слів про Яндекс Метрика. Якщо у вас був встановлений код яндекс метіркі, то в панелі метірікі вам доведеться додати сайт заново з протоколом https.
Перехід на HTTPS в Joomla
Оновлено - 15.12.2016
В останніх версіях Joomla з переходом на https не повинно виникнути проблем. У файл .htaccess не обов'язково додавати директиви редиректів, движок сам перекине з http на https. Для цього необхідно просто включити опцію в загальних налаштуваннях Joomla - «Сервер» -> «Увімкнути SSL» -> «Весь сайт».
Важливо! Включайте цю опцію саме тоді, коли ви впевнені, що сертифікат у вас вже встановлений і сайт доступний за протоколом Https.
Помилка при переході на Https в Joomla
Один раз у мене було таке, що мені довелося трохи попрацювати, на одному з клієнтських сайтів перехід на https пройшов не так гладко. Браузер лаявся на відносні адреси завантажуються ресурсів, хоча адреси були вказані відносними незалежно від протоколу. Проблема була в тезі <base />. Давайте розповім по порядку.
Крім тих налаштувань сайту, що були вказані вище нам необхідно відкрити файл configuration.php і в поле live_site вписати абсолютний адресу з проколом https.
public $ live_site = 'https://sitename.ru';
За ідеєю після цієї настройки в тезі <base /> адреса сайту повинен бути зазначений з протоколом https. Але ні, він був вказаний з протоколом http, від того і пішли всі помилки. Пошукав рішення проблеми в інтернеті, конкретно на форумі joomlaforum.ru і знайшов рішення. Необхідно було зробити деякий хак ядра, правда запевняли, що після поновлення дані зміни не затруться. Відкриваємо файл - /libraries/joomla/document/renderer/html/head.php і замінюємо (77 рядок)
$ Buffer. = $ Tab. '<Base href = "'. $ Base. '" />'. $ LnEnd;
на
$ Buffer. = $ Tab. '<Base href = "'. Juri :: base (). '" />'. $ LnEnd;
Скажу відразу - після поновлення движка зміни все ж затираються і вам доведеться після кожного оновлення вносити правки в вищевказаний файл.
Поки я цю проблему так і не вирішив. Не розумію чому так відбувається - версія движка остання.
Після цих дій все прийшло в норму. Також в загальних налаштуваннях Joomla, включив SSL. Її включення призвело до непрацездатності сайту. Якщо раптом ви вибрали опцію «Весь сайт» і сайт перестав працювати, то вам необхідно відкрити файл configuration.php по Ftp, знайти $ force_ssl і встановити значення на 0.
public $ force_ssl = '0';
Після цього сайт запрацює.
Перехід на HTTPS в WordPress
В принципі для переходу на https в WordPress ніяких додаткових дій, крім перерахованих вище робити не потрібно. Єдине потрібно поміняти адресу сайту на https в загальних налаштуваннях WordPress. Але цю настройку необхідно зробити тільки після придбання SSL сертифікату, коли ваш домен буде доступний по протоколу https, інакше в адмінку ви не зможете потрапити.
Також, бажано зробити бекап сайту на всякий випадок. Просто справа в тому, що в WordPress всі адреси зберігаються в базі даних в абсолютному вигляді. Після зміни настройки сайту все адреси повинні помінятися і в базі даних. Тому на випадок, якщо піде щось не так зробіть бекап.
На цьому і завершу. Всім дякую за увагу. Чи не соромимося, задаємо питання в коментарях.
Перевірка орфографії
Навіщо потрібно використовувати https і що мається на увазі під безпекою?Що мене спонукало перейти на протокол https?
Так навіщо ж зволікати?
Чим вони відрізняються?