HTTP

Пренасочване на HTTP към HTTPS

Пренасочване на HTTP към HTTPS
Независимо дали използвате самоподписани сертификати или сертификати от добре познат CA, имате нужда от начин да го интегрирате с вашите услуги. Един от най-типичните случаи на използване на HTTP сървър, това може да е уеб сървър или REST API сървър, но той трябва да бъде конфигуриран, за да бъде сигурен.

Повечето уеб сървъри като nginx и apache слушат на порт 80 по подразбиране и се нуждаят от доста конфигурация, преди да започнат да използват сертификатите за криптиране на трафика. Въпреки че е конфигуриран, уеб сървърът все още може да обслужва HTTP трафик без проблем. Така че посетителите на вашия уебсайт просто ще напишат http: // example.com вместо https: // пример.com и целият трафик ще остане некриптиран за тях. За да заобиколим този проблем, трябва да конфигурираме HTTP сървърите така, че те сами да пренасочват всички HTTP към HTTPS.

Настройката, която имам, използва FQDN с публичен IP, така че ще издавам SSL сертификат от LetsEncrypt, вместо да издавам самоподписан. В зависимост от вида на уеб сървъра, който използвате, можете да направите това по няколко начина. Но общият поток от него е следният:

  1. Вземете подписан сертификат от CA. В нашия случай това ще бъде 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 инсталиране на софтуер-свойства-общи

Ще трябва да добавите необходимите хранилища на трети страни, които Ubuntu може да не са активирали по подразбиране.

$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa: certbot / certbot
$ sudo apt-get update

И след това инсталирайте пакета certbot с плъгини Nginx, като използвате командата по-долу.

$ sudo apt-get инсталирайте certbot python-certbot-nginx

Инструкциите ще бъдат различни за различните платформи и инсталирайте плъгини за уеб сървъра, ако са налични. Причината, поради която приставките улесняват живота ни много, е, че те могат автоматично да редактират конфигурационните файлове на уеб сървъра, за да пренасочат и трафика. Недостатъкът може да бъде, че ако използвате много персонализиран сървър за вече съществуващ уебсайт, тогава приставката може да счупи някои неща там.

За нови уебсайтове или много прости конфигурации, като обратен прокси, приставката работи изненадващо добре. За да получите сертификатите и да пренасочите трафика, просто изпълнете командата по-долу и следвайте различните интерактивни опции, докато пакетът ви превежда през тях.

$ sudo certbot --nginx

Изход:

certbot --nginx
Запазване на регистрационния файл за отстраняване на грешки в / var / log / letsencrypt / letsencrypt.дневник
Избрани приставки: Удостоверител nginx, Инсталатор nginx
Въведете имейл адрес (използван за спешни обновления и известия за сигурност) (Въведете 'c' t
отмяна): YOUREMAILHERE @ ПРИМЕР.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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ВАЖНИ БЕЛЕЖКИ:
- Честито! Вашият сертификат и верига са запазени на адрес:

/ etc / letsencrypt / live / ПОДДОМЕН.ИМЕ НА ДОМЕЙН.TLD / пълна верига.пем

Вашият ключов файл е запазен на:

/ etc / letsencrypt / live / ПОДДОМЕН.ИМЕ НА ДОМЕЙН.TLD / privkey.пем

Както е показано в горния пример, трябва само да предоставите валиден имейл адрес и името на вашия домейн, за да получите сертификата. Този сертификат е посочен в / etc / letsencrypt / live / ПОДДОМЕН.ИМЕ НА ДОМЕЙН.TLD. Последната директория ще бъде наречена след вашето FQDN.

Най-важният аспект е изборът на опцията за пренасочване и той ще свърши работата по пренасочване на целия HTTP трафик към HTTPS. Ако сте любопитни какви са тези промени, можете да проверите конфигурационните файлове в / и т.н. / nginx / за да разберете същността му.

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

Ако искате ръчно да конфигурирате сървъра си да използва сертификатите. За да получите сертификатите с помощта на certbot, изпълнете:

$ sudo certbot certonly

Както и преди, сертификатите се записват в директорията / etc / letsencrypt / live / yourdomainname.com /

Сега можем да конфигурираме Nginx да използва файловете в тази директория. Първо, ще се отърва от специфичното оформление на директорията на Debian. Конфигурационният файл на сайта по подразбиране е / etc / nginx / sites-available / default поддиректория със символна връзка към / etc / nginx / site-enabled.

Просто ще изтрия символната връзка и ще преместя конфигурационния файл в / etc / nginx / conf.г с a .conf разширение, само за да поддържа нещата по-обобщени и приложими и за други дистрибуции.

$ sudo rm / etc / sites-enabled / default
$ sudo mv / etc / nginx / sites-available / default / etc / nginx / conf.г / по подразбиране.конф
$ sudo service nginx рестартиране

Ще модифицирам този конфигурационен файл по подразбиране, за да покажа как е активиран TLS.

По-долу са съдържанието във вашия конфигурационен файл по подразбиране, без коментираните раздели. Откроените раздели са този, който трябва да добавите към конфигурацията на вашия сървър, за да активирате TLS и последният блок в този конфигурационен файл открива дали схемата използва TLS или не. Ако TLS не се използва, той просто връща код за пренасочване 301 на клиента и променя URL адреса, за да използва https вместо това. По този начин няма да пропуснете потребителите

сървър
слушайте 80 default_server;
слушайте [::]: 80 сървър по подразбиране;
слушайте 443 ssl;
ssl_certificate / etc / letsencrypt / live / SUBDOMAIN.ДОМЕН.TLS / пълна верига.пем;
ssl_certificate_key / etc / letsencrypt / live / SUBDOMAIN.ДОМЕН.TLD / privkey.пем;
ssl_session_cache споделено: le_nginx_SSL: 1 м;
ssl_session_timeout 1440м; 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 ";
root / var / www / html;
индекс индекс.html индекс.htm индекс.nginx-debian.html;
Име на сървъра _;
местоположение /
try_files $ uri $ uri / = 404;

if ($ схема != "https")
връщане 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 или вижте официалната им документация.

Най-добрите игри за команден ред за Linux
Командният ред не е само най-големият ви съюзник при използване на Linux - той може да бъде и източник на забавление, защото можете да го използвате, ...
Най-добрите приложения за картографиране на геймпад за Linux
Ако искате да играете игри на Linux с геймпад вместо типична система за въвеждане на клавиатура и мишка, има някои полезни приложения за вас. Много ко...
Полезни инструменти за геймърите на Linux
Ако искате да играете игри на Linux, има вероятност да сте използвали приложения и помощни програми като Wine, Lutris и OBS Studio, за да подобрите иг...