HTTP

Перенаправление HTTP на HTTPS

Перенаправление HTTP на HTTPS
Независимо от того, используете ли вы самозаверяющие сертификаты или сертификаты от хорошо известного центра сертификации, вам нужен способ интегрировать его с вашими услугами. Один из наиболее типичных вариантов использования HTTP-сервера, это может быть веб-сервер или REST API-сервер, но его необходимо настроить для обеспечения безопасности.

Большинство веб-серверов, таких как nginx и apache, по умолчанию прослушивают порт 80 и требуют некоторой настройки, прежде чем они начнут использовать сертификаты для шифрования трафика. Несмотря на то, что он настроен, веб-сервер может без проблем обслуживать HTTP-трафик. Таким образом, посетители вашего сайта будут просто вводить http: // example.com вместо https: // example.com и весь трафик останется для них незашифрованным. Чтобы обойти эту проблему, нам нужно настроить HTTP-серверы так, чтобы они сами перенаправляли весь HTTP на HTTPS.

В моей настройке используется полное доменное имя с общедоступным IP-адресом, поэтому я буду выпускать сертификат SSL от LetsEncrypt, а не выпускать самозаверяющий. В зависимости от типа используемого веб-сервера вы можете сделать это несколькими способами. Но общий поток такой:

  1. Получите подписанный сертификат от ЦС. В нашем случае это будет LetsEncrypt
  2. Настройте веб-сервер на использование ключа шифрования для шифрования исходящего HTTP-трафика через порт 443. Это порт HTTPS по умолчанию.
  3. Перенаправьте все входящие запросы на порт 80 (незашифрованный HTTP) на порт 443, тем самым разрешив зашифрованные сеансы для всех входящих подключений.

Продемонстрируем различные способы достижения желаемого. Во-первых, это самое простое решение, использующее Certbot.

1. Самый простой способ - использование плагинов Certbot для Nginx или Apache

Я буду использовать Nginx в качестве примера для этого сервера. Если вы используете другой сервер, например Apache или HAProxy, просто посетите официальную страницу Certbot и выберите свою ОС и веб-сервер по своему усмотрению. Для Nginx в Ubuntu 18.04, это команды, которые вам понадобятся.

Сначала обновите индекс репо.

$ sudo apt-get update
$ sudo apt-get install software-properties-common

Вам нужно будет добавить необходимые сторонние репозитории, которые в Ubuntu, возможно, не включены по умолчанию.

Вселенная $ sudo add-apt-repository
$ sudo add-apt-репозиторий ppa: certbot / certbot
$ sudo apt-get update

Затем установите пакет certbot с плагинами Nginx, используя команду ниже.

$ sudo apt-get install certbot python-certbot-nginx

Инструкция будет отличаться для разных платформ и установить плагины для веб-сервера, если они доступны. Плагины делают нашу жизнь намного проще, потому что они могут автоматически редактировать файлы конфигурации на веб-сервере для перенаправления трафика. Обратной стороной может быть то, что если вы используете очень настроенный сервер для уже существующего веб-сайта, то плагин может сломать там некоторые вещи.

Для новых веб-сайтов или очень простых конфигураций, таких как обратный прокси, плагин работает на удивление хорошо. Чтобы получить сертификаты и перенаправить трафик, просто запустите приведенную ниже команду и следуйте различным интерактивным параметрам, когда пакет проведет вас через них.

$ sudo certbot --nginx

Выход:

certbot --nginx
Сохранение журнала отладки в / var / log / letsencrypt / letsencrypt.бревно
Выбранные плагины: Authenticator nginx, Installer nginx
Введите адрес электронной почты (используется для срочного обновления и уведомлений о безопасности) (введите 'c' t
отменить): YOUREMAILHERE @ EXAMPLE.COM
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Пожалуйста, прочтите Условия использования на
https: // letsencrypt.org / documents / LE-SA-v1.2-ноября-15-2017.pdf. Ты должен
соглашайтесь, чтобы зарегистрироваться на сервере ACME по адресу
https: // acme-v02.api.Letsencrypt.org / каталог
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) gree / (C) ancel: A
 

В ваших файлах конфигурации не найдено имен. Пожалуйста, введите свой домен
имя (а) (через запятую и / или пробел) (для отмены введите 'c'): ПОДДОМЕН.ДОМЕННОЕ ИМЯ.TLD

 
Пожалуйста, выберите, следует ли перенаправлять HTTP-трафик на HTTPS, удаляя HTTP-доступ.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Без перенаправления - больше не вносите изменений в конфигурацию веб-сервера.
2: Перенаправление - сделайте все запросы перенаправленными для безопасного доступа HTTPS. Выберите это для
новые сайты, или если вы уверены, что ваш сайт работает по HTTPS. Вы можете отменить это
изменить, отредактировав конфигурацию вашего веб-сервера.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Выберите соответствующий номер [1-2], затем [введите] (нажмите 'c' для отмены): 2
Перенаправление всего трафика с порта 80 на ssl в / etc / nginx / sites-enabled / default
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Поздравления! Вы успешно включили https: // SUBDOMAIN.ДОМЕННОЕ ИМЯ.TLD
 
Вы должны протестировать свою конфигурацию по адресу:
https: // www.ssllabs.com / ssltest / анализировать.html?d = ПОДДОМЕН.ДОМЕННОЕ ИМЯ.TLD
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ВАЖНЫЕ ЗАМЕТКИ:
- Поздравления! Ваш сертификат и цепочка сохранены по адресу:

/ и т.д. / letsencrypt / live / ПОДДОМЕН.ДОМЕННОЕ ИМЯ.TLD / полная цепочка.pem

Ваш ключевой файл сохранен по адресу:

/ и т.д. / letsencrypt / live / ПОДДОМЕН.ДОМЕННОЕ ИМЯ.TLD / privkey.pem

Как показано в приведенном выше примере, вам нужно только предоставить действующий адрес электронной почты и свое доменное имя, чтобы получить сертификат. Этот сертификат размещен в / и т.д. / letsencrypt / live / ПОДДОМЕН.ДОМЕННОЕ ИМЯ.TLD. Последний каталог будет назван в честь вашего полного доменного имени.

Наиболее важным аспектом является выбор параметра «Перенаправить», и он выполняет работу по перенаправлению всего HTTP-трафика на HTTPS. Если вам интересно, что это за изменения, вы можете проверить файлы конфигурации в / и т.д. / nginx / чтобы понять суть этого.

2. Редактирование файлов конфигурации

Если вы хотите вручную настроить сервер для использования сертификатов. Чтобы получить сертификаты с помощью certbot, запустите:

$ sudo certbot Certonly

Как и раньше, сертификаты сохраняются в каталоге / и т.д. / letsencrypt / live / yourdomainname.com /

Теперь мы можем настроить Nginx для использования файлов в этом каталоге. Перво-наперво, я избавлюсь от специфической структуры каталогов Debian. Конфигурационный файл сайта страницы по умолчанию: / и т.д. / nginx / сайты-доступные / по умолчанию подкаталог с символической ссылкой на / и т. д. / nginx / с поддержкой сайта.

Я просто удалю символическую ссылку и перенесу файл конфигурации в / etc / nginx / conf.d с .conf, чтобы сделать вещи более обобщенными и применимыми к другим дистрибутивам.

$ sudo rm / etc / сайты-включен / по умолчанию
$ sudo mv / etc / nginx / сайты-доступные / по умолчанию / и т.д. / nginx / conf.d / по умолчанию.conf
$ sudo service nginx перезапуск

Я буду модифицировать этот файл конфигурации по умолчанию, чтобы продемонстрировать, как включен TLS.

Ниже приводится содержимое вашего конфигурационного файла по умолчанию без закомментированных разделов. Выделенные разделы - это те, которые вы должны добавить в конфигурацию вашего сервера, чтобы включить TLS, и последний блок в этом файле конфигурации определяет, использует ли схема TLS или нет. Если TLS не используется, он просто возвращает клиенту код перенаправления 301 и изменяет URL-адрес, чтобы вместо этого использовать https. Таким образом, вы не упустите пользователей

server
слушаем 80 default_server;
слушать [::]: 80 default_server;
слушайте 443 ssl;
ssl_certificate / etc / letsencrypt / live / ПОДДОМЕН.ДОМЕН.TLS / полная цепочка.пем;
ssl_certificate_key / etc / letsencrypt / live / ПОДДОМЕН.ДОМЕН.TLD / privkey.пем;
ssl_session_cache общий: le_nginx_SSL: 1 м;
ssl_session_timeout 1440m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers на;
ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-POLY1305: ECDHE-
ECDSA-AES128-GCM-SHA256: ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDSA-AES256
-GCM-SHA384: ECDHE-RSA-AES256-GCM-SHA384: DHE-RSA-AES128-GCM-SHA256: DHE-RSA-AES256
-GCM-SHA384: ECDHE-ECDSA-AES128-SHA256: ECDHE-RSA-AES128-SHA256: ECDHE-ECDSA-AES128
-SHA: ECDHE-RSA-AES256-SHA384: ECDHE-RSA-AES128-SHA: ECDHE-ECDSA-AES256-SHA384: ECDHE
-ECDSA-AES256-SHA: ECDHE-RSA-AES256-SHA: DHE-RSA-AES128-SHA256: DHE-RSA-AES128-SHA: DHE
-RSA-AES256-SHA256: DHE-RSA-AES256-SHA: ECDHE-ECDSA-DES-CBC3-SHA: ECDHE-RSA-DES-CBC3
-SHA: EDH-RSA-DES-CBC3-SHA: AES128-GCM-SHA256: AES256-GCM-SHA384: AES128-SHA256: AES256
-SHA256: AES128-SHA: AES256-SHA: DES-CBC3-SHA:!DSS »;
корень / вар / www / html;
индекс индекс.html-индекс.индекс htm.nginx-debian.html;
имя сервера _;
место расположения /
try_files $ uri $ uri / = 404;

если ($ схема != "https")
return 301 https: // $ host $ request_uri;

 

В этот файл конфигурации добавлено несколько дополнительных параметров. Включая параметры, объявляющие тайм-аут, версию TLS, которую вы должны использовать, и какие шифры шифрования сервер будет использовать. Это было заимствовано из рекомендуемых (но необязательных) конфигураций Certbot для Nginx.

Теперь проверьте, действителен ли файл конфигурации, и перезапустите сервер.

$ sudo nginx -t
nginx: файл конфигурации / etc / nginx / nginx.conf синтаксис в порядке
nginx: файл конфигурации / etc / nginx / nginx.conf тест прошел успешно
$ sudo service nginx перезапуск

Заключение

Вы можете применить тот же подход для более сложных веб-приложений и сервисов, которым требуется HTTPS. Letsencrypt позволяет вам выдавать сертификаты для нескольких доменных имен одновременно, и вы можете легко разместить несколько веб-сайтов за веб-сервером nginx. Если вы следовали приведенному выше примеру, попробуйте обратиться к своему веб-сайту с помощью http (http: // SUBDOMAIN.ДОМЕН.TLD), и вы будете автоматически перенаправлены на HTTPS.

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

Установите последнюю версию эмулятора Dolphin для Gamecube и Wii в Linux
Эмулятор Dolphin позволяет вам играть в выбранные вами игры Gamecube и Wii на персональных компьютерах (ПК) Linux. Являясь свободно доступным игровым...
Как использовать чит-движок GameConqueror в Linux
В статье содержится руководство по использованию чит-движка GameConqueror в Linux. Многие пользователи, играющие в игры на Windows, часто используют п...
Лучшие эмуляторы игровой консоли для Linux
В этой статье будет перечислено популярное программное обеспечение для эмуляции игровых консолей, доступное для Linux. Эмуляция - это уровень совмести...