Перемещение сайта на HTTPS/SSL. Советы и хитрости
В 2014 году мы решили перейти на широко используемый в настоящее время протокол HTTPS для шифрования конфиденциальных данных, которые отправляются через наш сайт. В рамках этой статьи будут даны некоторые полезные советы, основанные на нашем собственном опыте, которые могут пригодиться, если вы планируете осуществить переход с протокола HTTP на HTTPS.
Небольшая предыстория
В уже далеком 2014 году HTTPS стал горячо обсуждаемой темой после того, как получила огласку уязвимость Heartbleed. Эта уязвимость позволяла злоумышленникам перехватывать трафик, передаваемый через SSL/TLS. Также она дала им возможность похищать и читать данные.
К счастью, эта ошибка была быстро исправлена после своего обнаружения. Этот инцидент стал предупреждением о том, что должное шифрование пользовательской информации в Интернете является необходимостью и не может быть лишь дополнительной опцией.
Для того чтобы подчеркнуть важность шифрования конфиденциальных данных, Google Chrome, начиная с января 2017 года отображает явное предупреждение рядом с адресной строкой всякий раз, когда вы посещаете сайт, который не использует шифрование для конфиденциальных сведений.
Как переключиться (смена протокола http на https)?
Поскольку важно, чтобы данные были в безопасности, в 2014 году мы предприняли меры, чтобы обеспечить наличие SSL-сертификатов на наших сайтах. Если вы решите сменить протокол http на https, (а вы действительно должны это сделать!), есть несколько моментов, которые необходимо учитывать, чтобы ваш сайт работал надлежащим образом после завершения перехода.
- Нужно изменить все внутренние ссылки. Это также означает обновление ссылок на ресурсы (при необходимости). Не забудьте пробежаться по используемой теме оформления и изменить ссылки на CSS, изображения и файлы JavaScript. Кроме того, можно изменить все ссылки, чтобы они начинались с «//» вместо «https: //». В результате получатся URL-адреса, соответствующие протоколу.
- Убедитесь, что ваш CDN поддерживает SSL. Мы используем MaxCDN, который позволяет легко настроить SSL на субдомен CDN.
- Существуют различные уровни SSL (каждый со своими плюсами и минусами), которые вы можете выбрать. Об этом вы узнаете позже.
- Убедитесь, что у вас есть каноническая ссылка в разделе <head>, чтобы правильно перенаправить весь трафик, поступающий с http: // на https://.
Google также опубликовал удобное руководство по переходу на HTTPS без существенного влияния на рейтинг сайта, которое можно найти здесь.
Как это влияет на рейтинг?
Как было сказано в предыдущем разделе, переход от протокола HTTP к протоколу HTTPS может немного повлиять на рейтинг сайта, если не спланировать все должным образом.
Однако, после перехода на HTTPS, со временем ваш рейтинг будет улучшаться. В 2014 году поисковая система Google объявила о том, что наличие SSL-сертификата будет считаться положительным фактором при расчете рейтинга, поэтому игра стоит свеч.
Для того чтобы Googlebot смог быстрее переиндексировать сайт после перехода, переходите на https:// в часы с низким притоком трафика. Таким образом, Googlebot сможет использовать больше ресурсов вашего сервера. Просто учтите, что для сайта среднего размера может потребоваться некоторое время, чтобы восстановить рейтинг. У вас есть карта сайта? Тогда Googlebot сможет пересчитать и переиндексировать ваш сайт еще быстрее.
Настройка HTTPS и SSL на вашем сервере
У многих хостинг-провайдеров есть сервис, позволяющий включать HTTPS или заказать SSL-сертификат. Есть несколько типов сертификатов на выбор, отличающихся по нескольким параметрам. Каждый вариант также имеет свой собственный ценник, поэтому перед покупкой убедитесь, что вы запросили сертификат, соответствующий вашим потребностям и бюджету!
Если вы стеснены в плане бюджета, но разбираетесь в технических аспектах, взгляните на Let's Encrypt, чтобы получить бесплатный (!) сертификат.
Сшивание OCSP (Online Certificate Status Protocol)
Необходимость проверки действительности SSL-сертификата может привести к небольшому снижению скорости загрузки. Для того чтобы устранить это, можно использовать сшивание OCSP (OCSP – протокол для проверки статуса SSL-сертификата). Сшивание OCSP – это функция, которая позволяет серверу загружать копию ответа удостоверяющего центра при проверке SSL-сертификата.
Это означает, что, как только браузер подключается к серверу, он проверяет действительность сертификата на основе копии, размещенной на сервере, а не запрашивает удостоверяющий центр, что приводит к значительному повышению производительности.
Apache
Прежде чем включить сшивание OCSP на сервере Apache, убедитесь, что вы используете версию Apache 2.3.3+, выполнив команду «apache2 -v» (или «httpd -v») на своем сервере. Более ранние версии Apache не поддерживают эту функцию.
Если вы прошли процесс настройки HTTPS на вашем сервере, как описано в разделе «Настройка HTTPS и SSL на вашем сервере», то должны были познакомиться с конфигурацией VirtualHost, разработанной специально для использования в сочетании с HTTPS/SSL.
В этом файле выполните следующие действия:
- Внутри раздела <VirtualHost> </VirtualHost> вы должны добавить SSLUseStapling.
- Чуть выше раздела <VirtualHost> </VirtualHost> добавьте SSLStaplingCache shmcb:/tmp/stapling_cache (128000).
- Убедитесь, что конфигурация корректна, запустив apachectl -t. Если это так, перезагрузите Apache, перезапустив сервис apache2.
Nginx
Nginx также поддерживает сшивание OCSP. Перед изменением конфигурации сервера, пожалуйста, проверьте, что вы используете версию Nginx 1.3.7+, выполнив команду «nginx –v» на своем сервере. Ранние версии Nginx не поддерживают эту функцию.
Если вы прошли процесс настройки HTTPS на своем сервере, как описано в разделе «Настройка HTTPS и SSL на вашем сервере», то должны были познакомиться с конфигурацией Nginx, разработанной специально для использования в сочетании с HTTPS/SSL.
В файле конфигурации Nginx в разделе server {} добавьте следующие строки:
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/private/ca-certs.pem;
Последняя строка ссылается на файл, содержащий список доверенных сертификатов удостоверяющего центра. Этот файл применяется для проверки клиентских сертификатов при использовании OCSP.
После добавления этих строк в файл убедитесь, что конфигурация по-прежнему корректна, запустив сервис nginx configtest. Если это так, перезапустите Nginx, выполнив перезагрузку сервиса nginx.
Заголовок Strict Transport Security
Заголовок Strict Transport Security (HSTS) – это еще одна удобная функция, которая, по сути, заставляет браузеры использовать HTTPS-запрос вместо эквивалентного HTTP-запроса. Включение этой функции относительно безболезненно.
Apache
Если вы используете Apache, сначала включите модуль Apache Headers, выполнив команду «a2enmod headers». После этого нужно всего лишь добавить следующую строку в конфигурацию VirtualHost (в раздел <VirtualHost> </VirtualHost>), которую вы установили ранее для HTTPS:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Перезагрузите сервис Apache и готово!
Nginx
Для Nginx необходимо добавить следующую строку в раздел server{} конфигурационного файла сервера:
add_header Strict-Transport-Security max-age=31536000;
Тестирование
Для того чтобы убедиться, что ваш SSL-сертификат работает правильно, зайдите на SSL Labs, укажите свое доменное имя и посмотрите, какую оценку вы получите.
Перенаправление URL-адресов при переходе с протокола http на https
Для обеспечения правильного перенаправления запросов на URL-адреса HTTPS необходимо добавить дополнительную конфигурацию. Таким образом, трафик, который пытается поступить на ваш сайт через HTTP, автоматически будет перенаправлен на HTTPS.
Apache
В конфигурации VirtualHost, используемой по умолчанию (например, в той, которая используется для HTTP-запросов) добавьте следующие строки, чтобы обеспечить правильное перенаправление (редирект) URL-адресов:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Как и в случае с другими изменениями, которые мы вносили ранее, не забудьте перезагрузить Apache!
Nginx
В Nginx измените конфигурационный файл по умолчанию, который использовался для HTTP-запросов, модифицируйте его следующим образом:
server {
listen 80;
server_name your-site.com www.your-site.com;
return 301 https://your-site.com$request_uri;
}
Не забудьте перезагрузить Nginx перед тестированием внесенных изменений.
Заключение
Нужно ли переключаться на HTTPS? Краткий ответ: «Да». Использование HTTPS гарантирует, что конфиденциальная (пользовательская) информация пересылается через Интернет более безопасным образом. Особенно, если вы имеете дело с финансовыми транзакциями, HTTPS является обязательным.
Какой тип SSL-сертификата вы в конечном итоге выберете, зависит от вашего конкретного варианта использования и бюджета. Обязательно тщательно изучите все возможные варианты.