Шифрование. https
Информация, которой обмениваются клиент и сервер, зачастую конфиденциальна, и нужно сделать всё возможное, чтобы у злоумышленников не было к ней доступа. В противном случае злоумышленник может перехватить данные и завладеть, например, вашим токеном или данными банковской карты.
Чтобы избежать таких ситуаций, данные между клиентом и сервером передают в зашифрованном виде.
Из полезной, но необязательной функции шифрование данных становится стандартом в сети.
Поисковые системы понижают в выдаче сайты, которые не работают по защищенному соединению, а браузеры сообщают пользователю «берегись, твои данные будут отправлены без шифрования!» — и пользователи пугаются и не заходят на ваш сайт.
Современные веб-стандарты требуют обязательного шифрования при доступе к определённым сервисам (например, к геолокации пользователя).
Сегодня шифрования трафика — это обязательное правило для любого веб-ресурса.
Шифрование осуществляется при помощи SSL-сертификата.
Что такое сертификат
SSL расшифровывается как Secure Socket Layer (англ. «уровень защищённых сокетов»). Сокет — это соединение между клиентом и сервером.
SSL-сертификат — это уникальный цифровой ключ, он выдаётся Центрами сертификации (Certificate Authority или CA).
Обмен информацией происходит между двумя сторонами: между клиентом и сервером. Центр сертификации — это третья сторона, которой клиент и сервер могут доверять: Центр проверяет домен и (в зависимости от уровня сертификата) владельца домена, после чего выдаёт сертификат.
Помимо ключа шифрования в сертификате хранится информация о том, какой Центр выдал сертификат и до какого момента сертификат действителен (обычно сертификат выдают на год). Если у Центра сертификации отозвано право выдавать SSL-сертификаты, то все сертификаты, выданные им, становятся недействительными.
Информация, передаваемая между клиентом и сервером, шифруется на основе SSL-ключа из сертификата, и если злоумышленник перехватит запросы, он не сможет их расшифровать.
Обычно CA выпускают сертификаты за деньги, но есть и бесплатные сертификаты (срок их действия меньше). Один из самых популярных бесплатных сервисов —
Let's Encrypt. Возьмём сертификат у них.
Получение и настройка SSL-сертификата
SSL-сертификат от Letsencrypt можно получить с помощью специального пакета — certbot.
На сайте certbot есть описание процесса, как получить сертификат и как сконфигурировать
nginx, чтобы трафик шифровался.
Установка certbot
Зайдите на сервер и последовательно выполните команды для установки необходимых пакетов:
Скопировать кодBASH
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
certbot установлен!
Получение сертификата
Чтобы начать процесс получения сертификата, введите команду:
Скопировать код
sudo certbot --nginx
В процессе оформления сертификата вам нужно будет указать свой email и ответить на несколько вопросов.
- Enter email address (англ. «введите почту»). Почта нужна для предупреждений, что сертификат пора обновить.
Please read the Terms of Service; (A)gree/(C)ancel (англ. «прочитайте правила сервиса; принять/отклонить»).
Прочитайте правила по ссылке, введите a и нажмите Enter.
Would you be willing to share your email address with the Electronic Frontier Foundation? (англ. «хотите ли вы поделиться своей почтой с
Фондом электронных рубежей»).
Отметьте на своё усмотрение y (да) или n (нет) и нажмите Enter.
Which names would you like to activate HTTPS for? (англ. «для каких доменных имён вы хотите включить https?»).
Вам будет предложено два варианта: your_domain.ext и www.your_domain.ext — это доменные имена, которые импортируются из поля server_name конфигурации nginx. Ничего не изменяйте и не вводите, просто нажмите Enter: тогда https будет включен для обоих вариантов.
Please choose whether or not to redirect HTTP traffic to HTTPS? 1: No redirect, 2: Redirect (англ. «нужно ли перенаправлять http трафик на https, 1: не перенаправлять, 2: перенаправлять»).
Конечно, нужно! Введите 2 и нажмите Enter.
После этого certbot отправит ваши данные на сервер Let's Encrypt и там будет выпущен сертификат, который автоматически сохранится на вашем сервере. Также будет изменена конфигурация вашего nginx: добавятся нужные настройки и будут прописаны пути к сертификату.
Перезапустите nginx:
Скопировать кодBASH
sudo nginx -s reload
Зайдите через браузер на свой проект. Теперь в адресной строке вместо http будет указан протокол https, а рядом с адресом будет виден символ «замочек». Это значит, что сертификат успешно подключён и информация между клиентом и сервером передаётся в зашифрованном виде. Клик по замочку покажет подробную информацию о сертификате.
Весь трафик, приходящий на порт 443 (порт для https-запросов и ответов) будет шифроваться. А доступ к серверу будет осуществляться через протокол HTTPS (HyperText Transfer Protocol Secure).
Обновление сертификата
Бесплатный сертификат нужно обновлять минимум раз в 3 месяца. Certbot делает это по умолчанию, если вы не меняли стандартных настроек. Убедиться, что всё обновляется, можно с помощью команды:
Скопировать код
sudo certbot renew --dry-run
Если по каким-то причинам автообновление не происходит, то можно выполнить следующую команду:
Скопировать код
sudo certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"
Эта команда обновит сертификат и перезапустит nginx.