Безопасный и быстрый сайт: SSL и HTTP/2

Опубликовано 0 комментариев 224 просмотра
Безопасный и быстрый сайт: SSL и HTTP/2

Привет.

Сегодня, когда казалось бы установка SSL сертификата не занимает много времени, а его стоимость упала до нуля, довольно странно встречать в интернете сайты, до сих пор работающие по протоколу HTTP. Тем не менее я постоянно натыкаюсь на такие ресурсы.

SSL сертификат возволяет безопасно обмениваться данными между сервером и клиентом путем шифрования оных. Все общение происходит по протоколу HTTPS. Перехват зашифрованного сообщения не даст злоумышленнику абсолютно никакого преимущества.

Так что сегодня я расскажу о том, как правильно установить SSL сертификат на сервер Ubuntu 16.04. Воспользуемся замечательным, бесплатным Let’s Encrypt - крупным центром, выдающим бесплатные сертификаты и поддерживаемым крупнейшими интернет-компаниями, такими как Google, Mozilla, Facebook и др.

Это что касается безопасности. Касательно скорости. HTTP/2 - новая версия протокола HTTP. Его ключевое отличие от прошлой версии - поддержка многопоточности. Проще говоря, открывая сайт, работающий на протоколе HTTP/1.1 вы загружали все стили, скрипты, изображения и прочие файлы по очереди. Внедрение HTTP/2 позволит загружать все их одновременно, что в некоторых случаях может привести к увеличению скорости загрузки страниц сайта в 2 раза.

Различия между HTTP/1.1 и HTTP/2

SSL и HTTP/2 тесно связаны, так как по ряду причин сайт, у которого отсутствует сертификат не сможет работать на современном протоколе.

Под все это дело будет настроен NGINX.

Получение сертификата

Certbot - небольшая утилита, с помощью которой мы будет устанавливать новые и продлевать старые сертификаты. Установим

$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx

...и запустим ее.

$ sudo certbot

Утилита найдет все доступные домены, указанные в конфиге NGINX и предложит нам выбрать необходимый. Найдите домен и введите в консоли его номер в списке.

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: gtxtymt.xyz
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1

После верификации вы получите сертификат. Напоследок утилита предложить настроить автоматический редирект с HTTP на HTTPS. Согласитесь (2) или откажитесь (1).

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Во время первого запуска будут присутствовать и другие пункты, например пункт в котором необходимо указать контактный email.

На этом утилита завершит свою работу. В процессе она так же изменит конфиги веб-сервера, так что ваш сайт сразу станет доступен по протоколу HTTPS.

Срок действия сертификата - 3 месяца. Обещают его увеличить, но если мне не изменяет память это общание было дано еще несколько лет назад. Для продления сертификата необходимо будет запустить certbot командой

$ certbot renew

Переход на HTTP/2

Как я уже говорил ранее, без сертификата сайт не будет доступен по данному протоколу.

Необходимо немного отредактировать конфиг сайта в NGINX. Откроем его и найдем строки, добавленные certbot:

listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/gtxtymt.xyz/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/gtxtymt.xyz/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

И заменим первую строку на

listen 443 ssl http2;

Все. Осталось только перезагрузить NGINX

$ service nginx restart

И изменения вступят в силу. Откройте сайт, заменив протокол на https. Убедитесь, что сертификат валиден увидев в верхнем баре слева от адреса сайта зеленую иконку замка. Откройте Инструменты разработчика, перейдите во вкладку Сеть и обновите страницу. Затем нажмите ПКМ по названиям столбцов таблицы и включите отображение столбца Протокол. Его значение у файлов, загруженных с вашего сайта должно отображаться как h2.

В ответ на сообщение

Доступна разметка Markdown. А еще вы можете использовать крутой пак эмоций.

Нажимая на кнопку «Отправить» вы даете свое согласие на обработку персональных данных в соответствии с законом №152-ФЗ «О персональных данных» от 27.07.2006 и принимаете условия Политики конфеденциальности.