HTTP

Omdirigerar HTTP till HTTPS

Omdirigerar HTTP till HTTPS
Oavsett om du använder certifierade certifikat eller certifikat från välkända CA behöver du ett sätt att integrera det med dina tjänster. Ett av de vanligaste användningsfallet för en HTTP-server, det kan vara en webbserver eller en REST API-server men den måste konfigureras för att vara säker.

De flesta webbservrar som nginx och apache lyssnar på port 80 som standard och behöver en hel del konfiguration innan de börjar använda certifikaten för att kryptera trafiken. Trots att den har konfigurerats kan webbservern fortfarande betjäna HTTP-trafik inga problem. Så besökarna på din webbplats skriver bara http: // exempel.com istället för https: // exempel.com och hela trafiken kommer att förbli okrypterad för dem. För att kringgå detta problem måste vi konfigurera HTTP-servrarna så att de själva omdirigerar alla HTTP till HTTPS.

Den inställning jag har använder en FQDN med en offentlig IP, så jag kommer att utfärda ett SSL-certifikat från LetsEncrypt snarare än att utfärda ett självsignerat. Beroende på vilken typ av webbserver du använder kan du göra detta på flera sätt. Men det allmänna flödet av det är så här:

  1. Få ett signerat certifikat från en CA. I vårt fall kommer detta att vara LetsEncrypt
  2. Konfigurera webbservern så att den använder krypteringsnyckeln för att kryptera den utgående HTTP-trafiken på port 443. Detta är standard HTTPS-port.
  3. Omdirigera alla inkommande förfrågningar på port 80 (som är okrypterad HTTP) till port 443, vilket möjliggör krypterade sessioner för alla inkommande anslutningar.

Låt oss visa olika sätt att uppnå vad vi vill. Först är den enklaste lösningen som använder Certbot.

1. Enklaste sättet - Använda Certbot-plugins för Nginx eller Apache

Jag kommer att använda Nginx som ett exempel för den här servern. Om du kör en annan, som Apache eller HAProxy, besök bara Certbots officiella sida och välj ditt operativsystem och din webbserver som du väljer. För Nginx på Ubuntu 18.04, det här är de kommandon du behöver.

Uppdatera först ditt repoindex.

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

Du måste lägga till nödvändiga tredjepartsförvar, som Ubuntu kanske inte har aktiverat som standard.

$ sudo add-apt-repository-universum
$ sudo add-apt-repository ppa: certbot / certbot
$ sudo apt-get-uppdatering

Och installera sedan certbot-paketet med Nginx-plugins med kommandot nedan.

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

Instruktionen kommer att vara annorlunda för olika plattformar och installera plugins för webbservern om det finns. Anledningen till att plugins gör våra liv så mycket enklare är att de automatiskt kan redigera konfigurationsfilerna på webbservern för att också omdirigera trafiken. Nackdelen kan vara att om du kör en mycket anpassad server för befintlig webbplats, kan pluginet bryta några saker där inne.

För nya webbplatser, eller mycket enkla konfigurationer, som en omvänd proxy, fungerar pluginet förvånansvärt bra. För att skaffa certifikaten och för att omdirigera trafiken, kör du bara kommandot nedan och följ de olika interaktiva alternativen när paketet går igenom dem.

$ sudo certbot --nginx

Produktion:

certbot --nginx
Sparar felsökningsloggen till / var / log / letsencrypt / letsencrypt.logga
Insticksprogram valda: Authenticator nginx, Installer nginx
Ange e-postadress (används för brådskande förnyelse och säkerhetsmeddelanden) (Ange 'c' t
avbryt): YOUREMAILHERE @ EXEMPLE.COM
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Läs användarvillkoren på
https: // letsencrypt.org / dokument / LE-SA-v1.2 november-15-2017.pdf. Du måste
godkänna för att registrera dig hos ACME-servern på
https: // acme-v02.api.letsencrypt.org / katalog
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) gree / (C) ancel: A
 
..
Inga namn hittades i dina konfigurationsfiler. Ange din domän
namn (kommatecken och / eller mellanslag åtskilda) (Ange 'c' för att avbryta): SUBDOMÄN.DOMÄN NAMN.TLD
..
 
Välj om du vill omdirigera HTTP-trafik till HTTPS eller ta bort HTTP-åtkomst.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Ingen omdirigering - Gör inga ytterligare ändringar i webbserverns konfiguration.
2: omdirigering - Gör alla begäranden omdirigera för att säkerställa HTTPS-åtkomst. Välj detta för
nya webbplatser, eller om du är säker på att din webbplats fungerar på HTTPS. Du kan ångra detta
ändra genom att redigera din webbservers konfiguration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Välj lämpligt nummer [1-2] och sedan [enter] (tryck på 'c' för att avbryta): 2
Omdirigerar all trafik på port 80 till ssl i / etc / nginx / sites-enabled / default
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Grattis! Du har aktiverat https: // SUBDOMAIN.DOMÄN NAMN.TLD
 
Du bör testa din konfiguration på:
https: // www.ssllabs.com / ssltest / analys.html?d = Underdomän.DOMÄN NAMN.TLD
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

VIKTIGA ANTECKNINGAR:
- Grattis! Ditt certifikat och kedja har sparats på:

/ etc / letsencrypt / live / SUBDOMAIN.DOMÄN NAMN.TLD / fullkedja.pem

Din nyckelfil har sparats på:

/ etc / letsencrypt / live / SUBDOMAIN.DOMÄN NAMN.TLD / privkey.pem

Som visas i exemplet ovan behöver du bara ange en giltig e-postadress och ditt domännamn för att få certifikatet. Detta certifikat är sotred i / etc / letsencrypt / live / SUBDOMAIN.DOMÄN NAMN.TLD. Den sista katalogen kommer att namnges efter din FQDN.

Den viktigaste aspekten är att välja omdirigeringsalternativet och det kommer att göra jobbet med att omdirigera all HTTP-trafik till HTTPS. Om du är nyfiken på vad dessa ändringar är kan du inspektera konfigurationsfilerna i / etc / nginx / för att få kärnan i det.

2. Redigera Config-filerna

Om du vill konfigurera servern manuellt för att använda certifikaten. För att få certifikaten med certbot, kör:

$ sudo certbot certonly

Som tidigare sparas certifikaten i katalogen / etc / letsencrypt / live / ditt domännamn.com /

Nu kan vi konfigurera Nginx för att använda filerna i den här katalogen. Först och främst kommer jag att bli av med den Debianspecifika kataloglayouten. Standardsidens konfigurationsfil för webbplatsen är / etc / nginx / sites-available / default underkatalog med en symlänk till / etc / nginx / site-enabled.

Jag tar bara bort symlänken och flyttar konfigurationsfilen till / etc / nginx / conf.d med en .conf-förlängning bara för att hålla sakerna mer generaliserade och tillämpliga på andra distros också.

$ sudo rm / etc / sites-enabled / default
$ sudo mv / etc / nginx / sites-available / default / etc / nginx / conf.d / standard.konf
$ sudo service nginx starta om

Jag kommer att ändra den här standardkonfigurationsfilen för att visa hur TLS är aktiverad.

Följande är innehållet i din standardkonfigurationsfil utan de kommenterade avsnitten. De markerade sektionerna är de som du borde lägga till i din serverkonfiguration för att aktivera TLS och det sista blocket i denna konfigurationsfil upptäcker om schemat använder TLS eller inte. Om TLS inte används, returnerar det helt enkelt en 301-omdirigeringskod till klienten och ändrar webbadressen för att använda https istället. På det här sättet kommer du inte att missa användarna

server
lyssna 80 default_server;
lyssna [::]: 80 default_server;
lyssna 443 ssl;
ssl_certificate / etc / letsencrypt / live / SUBDOMAIN.DOMÄN.TLS / fullkedja.pem;
ssl_certificate_key / etc / letsencrypt / live / SUBDOMAIN.DOMÄN.TLD / privkey.pem;
ssl_session_cache delade: le_nginx_SSL: 1m;
ssl_session_timeout 1440m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
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;
indexindex.html-index.htm-index.nginx-debian.html;
server namn _;
plats /
try_files $ uri $ uri / = 404;

if ($ schema != "https")
returnera 301 https: // $ host $ request_uri;

 

Det finns några extra parametrar som läggs till i denna konfigurationsfil. Inkluderar parametrar som deklarerar timeout, TLS-versionen du borde använda och vilka krypteringskoder som servern kommer att använda. Detta lånades från Certbots rekommenderade (men valfria) konfigurationer för Nginx.

Kontrollera nu om konfigurationsfilen är giltig och starta om servern.

$ sudo nginx -t
nginx: konfigurationsfilen / etc / nginx / nginx.conf syntax är ok
nginx: konfigurationsfil / etc / nginx / nginx.conf test är framgångsrikt
$ sudo service nginx starta om

Slutsats

Du kan använda samma tillvägagångssätt för mer komplicerade webbappar och tjänster som behöver HTTPS. Letsencrypt låter dig utfärda certifikat för flera domännamn samtidigt, och du kan vara värd för flera webbplatser bakom din nginx-webbserver ganska enkelt. Om du följde exemplet ovan kan du försöka nå din webbplats med http (http: // SUBDOMAIN.DOMÄN.TLD) och du kommer att omdirigeras till HTTPS automatiskt.

För andra webbservrar, som Apache, använd lämpligt certbot-plugin eller hänvisa till deras officiella dokumentation.

Gratis och öppen källkodsmotorer för utveckling av Linux-spel
Den här artikeln kommer att täcka en lista över gratis motorer med öppen källkod som kan användas för att utveckla 2D- och 3D-spel på Linux. Det finns...
Shadow of the Tomb Raider for Linux Tutorial
Shadow of the Tomb Raider är det tolfte tillskottet till Tomb Raider-serien - en action-äventyrsspelfranchise skapad av Eidos Montreal. Spelet mottogs...
Hur man förbättrar FPS i Linux?
FPS står för Bildrutor per sekund. FPS: s uppgift är att mäta bildfrekvensen i videouppspelningar eller spelprestanda. Med enkla ord betecknas antalet...