Хотел написать много бла-бла-бла на тему того, почему нужно переходить на протокол HTTPS, но потом подумал и не стал. Может когда-нибудь… А сегодня поделюсь острыми ощущениями. Начинаем.
Имеем такую связку:
- Блог имени меня-любимого,
- CMS (Система Управления Контентом) — WordPress,
- Тип хостинга — VPS,
- Операционная система — Centos 7,
- Панель хостинга — ISPManager 4.
Первое и второе чистое хвастовство, но все остальное по делу.
Казалось-бы, что тут думать? Бери и внедряй HTTPS. Но я был бы не я, если бы не превратил простое действие в приключение… на свой блог.
Этап первый: Добываем сертификат
Как делают умные люди? Умные люди идут на Вебнеймс (он же Регтайм) или на Ник точка Ру (он же — Руцентр). Идут, и покупают сертификаты там, за деньги. Ну или берут тестировать на 30 дней, а уже затем покупают.
Я же поперся на https://startssl.com Почему? Потому, что там дают сертификат на 3 года бесплатно. Помните недавно писал, что мне в HTTPS не нравится? Будем считать, что помните. А тут такая халява.
Пошел. Вначале переключил сайт StartSSL на русский язык. Это в верхнем меню. Стало гораздо понятнее.
Экстремалы, вроде нашего сисадмина, могут не переключаться. Им и так хорошо.
Всем остальным переключать на русский придется часто. Почему-то сайт так и норовит перейти на незнакомый язык.
Затем, выбрал получение бесплатного сертификата. Не буду описывать все пошагово. Скажу лишь, что сначала надо подтвердить e-mail, потом создавать e-mail для домена (чтобы подтвердить владение домном). После этого началась процедура получения сертификата.
Для этого нужно зайти на СВОЙ сервер по SSH под рутом. Зайти в любую папку и запустить вот эту команду:
openssl req -newkey rsa:2048 -keyout yourdomain.key -out yourdomain.csr
После этого в папке появилось два файла: один, с расширением .key, другой с расширением .csr
По ходу создания этих файлов, нужно было вводить два пароля, а так же мыло для домена, название фирмы город и пр. Советую, если не дружите с английским от слова «совсем», вооружиться словарем или переводчиком. И блокнотом, чтобы записать те пароли. Потом пригодятся.
На StartSSL.com я ввел в нужное окошко содержимое файла yourdomain.csr и в итоге скачал архив с сертификатами.
Долго, непонятно, но терпимо. Идем дальше.
Этап второй: Установка сертификата на сервер
Имеем ISPManager. Ну вы-то может не имеете, а у меня именно он. Для начала надо авторизоваться пользователем, который управляет доменом, для которого получал сертификат. Можно войти в панель под рутом, и в пользователя войти уже из раздела пользователей. Не принципиально.
Главное, что вводить сертификат в ISPManager из под рута не получится.
Но! Есть один тонкий момент. Пользователю (владельцу) домена нужно дать права на SSL. Иначе, когда войдет, не увидит опции «SSL сертификаты» в разделе «World Wide Web». А давать эти права нужно как раз под рутом.
Это был первый раз, когда я оказался близок к тому, чтобы начать материться не смотря на воспитание громко. Ну… ничего, сообразил.
В итоге, я под пользователем, кликаю «SSL сертификаты» и попадаю в девственно пустой раздел.
Ну… я к тому, что там ни одного сертификата. Жму «Создать» и вижу окошко, куда нужно вводить данные.
Вот казалось бы все логично и понятно. Ну сами посмотрите.
Видите? Все просто и понятно. Или не очень?
Ну в «Имя сертификата» вписываем домен. У меня это lexium.ru
В поле «Тип сертификата» выбираем «существующий». Упаси вас Бог выбрать «самоподписной»!!! Его будут блокировать браузеры и антивирусы, а пользователи начнут шарахаться от вашего сайта, как от чумы или даже хуже.
В «Приватный ключ» вписываем приватный ключ. В «Сертификат» вписываем сертификат. Остальное не заполнял (вроде). Ну может если только пароль, хотя скорее всего нет.
Жмем ок, и сертификат добавляется на сервер. Ура? Фиг там был!
Во-первых Сертификат. Да, мне прислали архив с четырьмя архивами, в которых по два файла. Ну ладно, догадался. Открыл первый попавшийся файл в архиве, где расширение .crt, а в названии фигурировало доменное имя. Скопировал в поле содержимое этого файла целиком.
Во-вторых, долго искал что за долбаные «Цепочки сертификатов». Писалось разное, но часть мудрецов сошлась на том, что туда ничего писать не надо. Ок. Не пишу ничего.
С паролем тоже не ясно. Одни говорят писать, другие оставить пустым. При создании запроса на сертификат (о котором писал в первом этапе) вводилось два пароля. Я перепробовал оба. В итоге, вроде как оставил поле пустым.
И на закуску — приватный ключ. Ага. Где его искать? Логика и «метод тыка» подсказали, что это точно не то, что мы получили в первом этапе в файле yourdomain.csr Тогда, наверное, приватный ключ, это содержимое файла yourdomain.key?
Ну, Key — это ключ в переводе. Логично-же.
А вот фиг там был! Я ставил содержимое этого файла в поле, и нифига. Чудовищным усилием воли не взорвался матом на весь офис. Чудом, можно сказать.
Оказывается yourdomain.key нужно сперва расшифровать. Ну это же очевидно! Каждый догадался бы.
Итак, раскодировать приватный ключ можно вот этой командой, которую вводим на сервере по SSH:
openssl rsa -in yourdomain.key -out yourdomain2.key
Во время раскодировки у вас спросят пароль. Горе вам, если при создании тех двух файлов, вы проигнорировали мои писульки и не сохранили пароли. Зато если сохранили, используйте первый. Ввели? Ок.
Теперь, в папке появился еще один файл — yourdomain2.key. Вот его содержимое и нужно вставить в поле «Приватный ключ».
Вставили, выдохнули, можно нажать «Ок».
Этап третий: Присваиваем сертификат домену
Ну, тут все просто. Возвращаемся в ISPManager под рута, открываем «WWW Домены», находим в списке наш, который будет работать по HTTPS-протоколу.
Встаем на этот домен и жмем «Изменить». Там, в выпрыгнувшем окошке, ставим галку в поле SSL. Порт 443, SSL сертификат выбираем с именем домена. У меня он оказался в одном экземпляре, а значит и выбирать оказалось не из чего.
Жмем «Ок».
Этап четвертый (веселый): Учим сайт на WordPress’е работать на HTTPS
Самое логичное — просто войти на сайт не по https://www.lexium.ru, а по https://www.lexium.ru, и наслаждаться. Но фиг был и там.
Главная страница загрузилась, но без стилей и скриптов. Почему? А потому, что их заблокировал браузер. Ну вот не понравились они ему. Браузеры, судя по отжираемым ресурсам, нынче шибко умные. Не желает подключать к сайту файлы, по протоколу http. Дорвался до https, и я его в чем-то понимаю.
Ок. Смотрим, что советуют мудрецы. А они советуют в wp-config.php вставить вот такую строку:
define('FORCE_SSL_ADMIN', true);
Так вот, делать этого не надо. Мне оно, во всяком случае, не помогло, а совсем даже наоборот.
А что ставить надо?
Поставьте в wp-config.php вот такую строчку:
$_SERVER['HTTPS'] = 'on';
Теперь, идем в .htaccess и дописываем строчки из прошлого поста.
RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Ставьте их где-нибудь под этими строчками:
RewriteEngine On RewriteBase / Options -Indexes options +FollowSymLinks
Еще одни мудрецы, советуют внести кое какие изменения в конфиг NGINX’а. Я попробовал. Теперь знаю, почему домен корпоративного сайта пропал из панели ISPManager.
Мой домен тоже исчез. Правда потому удалось его вернуть, потратив всего час. Видимо с перепугу. Как я его вернул, точно уже и не вспомню.
Итак, в конфиг строчку добавили, в .htaccess — тоже.
Теперь заходим в админку WordPress и прописываем в разделе «Настройки», в подразделе «Общее», в поле Адрес WordPress (URL) и в поле Адрес сайта (URL), вместо http://что-то-там — https://что-то-там
Вместо «что-то-там» вписываем свой домен. Ну, вы и так догадались.
Что делать, если не смогли зайти в админку? У нас все еще открыт wp-config.php?
Тогда вписываем туда еще две строчки:
define( 'WP_HOME', 'https://www.lexium.ru' ); define( 'WP_SITEURL', 'https://www.lexium.ru' );
Вместо lexium.ru, естественно, впишите домен своего сайта и помним: именно эти две строчки, если уж вы их вписали, чтобы зайти в админку, потом нужно будет удалить.
А пока, по идее, все работает, но есть еще косяки. У меня на сайте. У вас может на этом все и закончится.
Купились? Нет? Тогда читаем дальше.
Этап пятый: Шлифуем сайт
Как там было в анекдоте, когда по украденным российским чертежам истребителя американцы собрали паровоз? В чертежах в конце приписка была «после сборки хорошенько обработать напильником». Вот и обработаем.
Впишем домены с протоколом HTTPS в базу.
Для этого, заходим в действующую тему WordPress и добавим две строчки в файл functions.php:
update_option( 'siteurl', 'https://www.lexium.ru' ); update_option( 'home', 'https://www.lexium.ru' );
Естественно, вместо lexium.ru нужно ставить свой домен.
Теперь зайдите на сайт, обновите страницу. Всё. Домены прописались. Удаляем эти строки из functions.php и те две, что добавляли на предыдущем этапе в wp-config.php
И последний штрих. С помощью плагина «Поиск и Замена» убираем упоминания http. Ставим искать строки «https://www.lexium.» и менять их на «https://www.lexium.».
Всё?
Нет. Теперь пройдемся по файлам темы и по самописным плагинам, искореняя все «http:», какие найдем.
Заменим их на идейно-правильный «https:».
Сделали? Вот теперь всё.
День ушел на перевод сайта на HTTPS и написание этой инструкции. Ну и ладно. Зато кому-нибудь, это сэкономит время. Возможно даже мне.
UPDATE: Но этим дело не кончилось. Читайте продолжение.
Напишите комментарий