Hoe stel je end-to-end CloudFlare SSL-versleuteling in?

Het opzetten van SSL voor een willekeurige website is een uitdaging. Sitebezoekers, browsers en zoekmachines belonen een correct beveiligde website met Secure Sockets Layer (SSL). Voorheen omvatte dit proces het kopen, installeren en configureren van een SSL-certificaat. Maar met Cloudflare SSL kun je het proces van SSL-configuratie voltooien met slechts een paar klikken!

In dit artikel leer je hoe je je site configureert met SSL-encryptie via Cloudflare. Werk dus aan het opzetten van end-to-end versleutelde SSL-verbindingen!

Vereisten

Om deze tutorial te volgen, zijn enkele vereisten nodig:

  • A Cloudflare account with an existing website and domain pointed to the Cloudflare nameservers.
  • Een Ubuntu Linux-server met NGINX geïnstalleerd en geconfigureerd. Deze tutorial demonstreert het gebruik van Linux en NGINX, maar hetzelfde algemene proces werkt voor IIS of Apache.

Het instellen van Cloudflare Universal SSL: Slechts het Begin

Er zijn verschillende manieren om SSL in te stellen met behulp van Cloudflare. Vaak is de snelste methode om te kiezen voor Universal SSL. Waarom? Met Universal SSL voorziet Cloudflare in een certificaat in plaats van dat je er zelf een moet vinden en kopen. Alle verkeer dat via Cloudflare wordt verzonden, maakt gebruik van dat certificaat.

Na het inschakelen van Universal SSL, presenteert Cloudflare een geldig SSL-certificaat aan zowel bezoekers als zoekmachines. Bovendien is het niet nodig om de server of website te configureren om dat certificaat te gebruiken, handig!

1. Start je webbrowser op en log in op het Cloudflare-dashboard.

2. Ga naar je site vanuit de accountdomeinlijst, zoals hieronder weergegeven.

Choose the site to change options for.

3. Klik nu op SSL/TLS om de versleutelingsopties van je site te bekijken.

The SSL/TLS Encryption mode page

4. Kies de Flexible-optie om Universal SSL in te schakelen. Zodra geselecteerd, wordt de wijziging onmiddellijk van kracht. Je site is nu versleuteld tussen de browser en Cloudflare!

Enabling Universal SSL on Cloudflare

Configuratie van volledige end-to-end SSL-versleuteling

Hoewel Universal SSL een uitstekende optie is om sites te beveiligen, blijft het verkeer tussen de server en Cloudflare onbeveiligd. Gelukkig zijn er twee versleutelingsmodi om het verkeer van Cloudflare naar de server te versleutelen, volledige en volledige (strikt) versleuteling, elk met voornamelijk verschillende vereisten voor certificaatinstallatie.

  • Volledig – Vereist een certificaat op de server, maar dit kan een zelfondertekend certificaat zijn.
  • Full (strikt) – Het geïnstalleerde server-side certificaat moet een geldig certificaat zijn.

Laten we de verschillen tussen deze versleutelingen doornemen en hoe je ze moet instellen.

Het opzetten van volledige SSL/TLS-versleuteling met een zelfondertekend certificaat

In tegenstelling tot Universal SSL vereist volledige SSL/TLS-versleuteling dat je webserver een SSL-certificaat correct serveert om het verkeer van de server naar Cloudflare te versleutelen. Er zijn veel manieren om dit te bereiken, maar deze tutorial toont stappen op een Linux-server met NGINX.

Het genereren van een zelfondertekend certificaat

Om de verbinding tussen Cloudflare en je oorspronkelijke server te versleutelen, heb je een SSL-certificaat nodig. Aangezien de volledige SSL/TLS-versleutelingsmodus geen volledig vertrouwd certificaat vereist, kun je snel aan de slag met een zelfondertekend certificaat.

1. Secure Shell (SSH) in op je Linux-webserver.

2. Ga naar de standaard Ubuntu SSL-map (/etc/ssl) door de onderstaande opdracht uit te voeren. cd /etc/ssl

cd /etc/ssl
Navigating to the /etc/ssl directory

3. Genereer nu zowel de openbare als de privésleutels voor je site met het openssl-commando. Voer hiervoor het onderstaande openssl-commando uit.

Deze opdracht volbrengt een aantal dingen:

  • Vraagt een X.509-certificaat aan dat wordt geleverd door de parameter -x509.
  • Wanneer door NGINX aangeroepen, stelt het NGINX in staat om het certificaat bij het opstarten te lezen met de parameter -nodes.
  • Specificeert het aantal dagen dat het certificaat geldig is.
  • Creëert een nieuwe openbare en private sleutel met -newkey via 2048-bit RSA-encryptie (rsa:2048).
  • Slaat de private sleutel op naar /etc/ssl/private/nginx-selfsigned.key met de parameter -keyout.
  • Slaat de openbare sleutel op naar /etc/ssl/certs/nginx-selfsigned.crt met de parameter -out.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Als openssl een onschuldige fout retourneert van Can't load /root/.rnd into RNG, moet je de regel #RANDFILE = $ENV::HOME/.rnd in /etc/ssl/openssl.cnf uitcommentariëren. Alle moderne versies van openssl vallen terug op het gebruik van het systeemapparaat /dev/urandom voor willekeurige entropiegegevens en hebben geen specifiek bestand nodig voor het initialiseren.

4. Nadat het commando succesvol is uitgevoerd, zal openssl je om wat informatie vragen. Hieronder vind je alle waarden die in deze handleiding worden verstrekt.

  • Landnaam: US
  • Staat of Provincienaam: Illinois
  • Locatienaam: Bloomington
  • Organisatienaam: Test Company, LLC
  • Organisatie-eenheid Naam: <blank>
  • Algemene Naam: test.adamlistek.me
  • E-mailadres: [email protected]
Generating a self-signed certificate

5. Controleer tot slot of het certificaat bestaat met behulp van het test-commando. Als het test-commando (echo $?) 0 retourneert, dan bestaat het bestand zoals verwacht. Zoals te zien is in de volgende schermafbeelding, heeft elk commando een 0-waarde geretourneerd.

test -f /etc/ssl/private/nginx-selfsigned.key; echo $?
 test -f /etc/ssl/certs/nginx-selfsigned.crt; echo $?
Verifying that the certificate files exist

Configureren van NGINX

Nu het certificaat is gegenereerd en opgeslagen in de locaties voor sleutelbestanden /etc/ssl/certs en /etc/ssl/private, moet NGINX geconfigureerd worden om het certificaat toe te passen en de inhoud van de site te serveren.

NGINX-siteconfiguraties worden gedefinieerd in server-blokken die typisch in virtuele hostbestanden zijn opgenomen. In het onderstaande voorbeeld wordt de basisconfiguratie van de site opgeslagen in het bestand test.adamlistek.me.conf en opgenomen in het hoofdbestand nginx.conf.

1. Maak eerst een nieuw virtueel hostbestand aan met de naam van uw keuze, maar voor dit voorbeeld noemen we het test.adamlistek.me.conf in de map /etc/nginx/vhosts.d. Kopieer vervolgens de onderstaande inhoud naar het virtuele hostbestand en sla het op.

Vervang de domeinnaam test.adamlistek.me door uw eigen domeinnaam, aangezien dit slechts ter illustratie is. En als de /etc/nginx/vhosts.d map niet bestaat, maak dan de map aan door mkdir /etc/nginx/vhosts.d uit te voeren.

server {
   # Luister op poort 80 voor IPv4 en IPv6
   listen 80;
   listen [::]:80;
 server_name test.adamlistek.me;
 # Voer een 301-omleiding uit met eventuele parameters naar het SSL-serverblok hieronder
   return 301 https://test.adamlistek.me$request_uri;
 }
 server {
   # Luister op poort 443 voor IPv4 en IPv6 met HTTP2 ingeschakeld (vereist SSL)
   listen 443 ssl http2;
   listen [::]:443 ssl http2;
 server_name test.adamlistek.me;
 # De locatie van het openbare en privécertificaat
   ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
   ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
 # De locatie van de webbestanden om te laden, dit is de standaard NGINX-locatie
   root /usr/share/nginx/html;
 # Het standaardbestand om te serveren bij een verzoek van de hoofddomein
   index index.html;
 }

2. Controleer of uw primaire NGINX-configuratiebestand, /etc/nginx/nginx.conf, de vereiste include-regel bevat binnen het http-blok, dat zich aan het einde van het blok bevindt.

# Serverconfiguraties komen hier
 …
 http {
     # Extra configuraties komen hier# Virtuele hosts includeren
     include /etc/nginx/vhosts.d/*.conf;
 }

3. Herstart NGINX met de volgende opdracht als u systemd gebruikt, wat een moderne systeem- en servicemanager is voor Linux.

service nginx restart

4. Terug naar Cloudflare, controleer of het zelfondertekende certificaat werkt. Om dat te doen, schakelt u de “orange-cloud” uit voor het DNS-record onder Proxy-status, zoals hieronder getoond. Het uitschakelen van de “orange-cloud”-optie omzeilt Cloudflare en bedient verzoeken rechtstreeks vanaf de webserver.

Disabling Cloudflare proxying via Proxy Status.

5. Zorg ervoor dat de site het nieuw gemaakte zelfondertekende certificaat retourneert door naar de website te gaan in je webbrowser. Dit zal resulteren in een waarschuwingspagina, zoals hieronder weergegeven.

Displaying the self-signed certificate error.

6. Schakel tot slot volledige TLS/SSL-versleuteling in op Cloudflare. Om dat te doen, heractiveer je de “oranje wolk” Cloudflare Proxy Status op het DNS-record dat je eerder hebt uitgeschakeld. Ga vervolgens naar het SSL/TLS-tabblad en klik op de Volledig-optie zoals hieronder weergegeven.

Enabling Full SSL/TLS encryption on Cloudflare.

Genereren van Origin Certificaten voor volledige (strikt) SSL/TLS-versleuteling

Het Volledige versleutelingsmodus garandeert niet dat het certificaat dat door de webserver wordt gepresenteerd, daadwerkelijk een geldige certificaatketen heeft. Ga daarom in plaats daarvan voor niet-strikte versleuteling, en Cloudflare zal elk certificaat accepteren dat door de server wordt gepresenteerd.

Cloudflare biedt de mogelijkheid om een gratis TLS-certificaat te genereren om de verbinding met je oorspronkelijke server te beveiligen. Maar er zijn twee nadelen aan het gebruik van een door Cloudflare geleverd oorspronkelijk certificaat. Een daarvan is dat je het certificaat handmatig moet genereren en installeren. Het tweede is dat het certificaat eruitziet als een zelfondertekend certificaat dat geen enkele browser anders dan Cloudflare zou vertrouwen.

Het is mogelijk om certificaatgeneratie te automatiseren met behulp van de Origin CA Create Certificate API-eindpunt, maar dat valt buiten de reikwijdte van deze tutorial.

1. Ga naar de Origin Server door naar het SSL/TLS-tabblad te gaan —> Oorspronkelijke Server, zoals je hieronder ziet, en klik op de Certificaat Maken-knop.

Navigating to the Origin Server page.

2. Zoals je hieronder kunt zien, zijn de standaardopties al ingesteld om een wildcard-certificaat te genereren voor het domein met een geldigheid van 15 jaar – geweldig! Laat de standaardopties staan en genereer het certificaat door op de Create-knop rechtsonder op de pagina te klikken.

A wildcard certificate, shown as *.domain.com, means that any subdomain will also be covered by this certificate including www.

Creating a Cloudflare-provided origin server certificate.

3. Voeg het nieuw gemaakte certificaat toe aan je Linux-systeem door eerst de privé- en publieke sleutels op te slaan met de GNU nano teksteditor. Omdat er twee sleutels zijn om op te slaan, moet je de sleutelbestanden één voor één opslaan.

Zorg ervoor dat je de Private Key opslaat, omdat deze alleen beschikbaar is op het moment dat je een Origineel Certificaat hebt gegenereerd. Als je per ongeluk deze sleutel verliest, herroep dan het certificaat en vraag een nieuw certificaat aan.

Open een terminal, maak vervolgens het publieke sleutelbestand (nginx-test.adamlistek.me.crt) aan in nano door de eerste opdracht hieronder uit te voeren.

Ga vervolgens terug naar Cloudflare en kopieer de Origin Certificate-sleutel (publieke sleutel) door op de Click to copy-optie te klikken, zoals hieronder getoond. Plak vervolgens (Ctrl+U) de gekopieerde publieke sleutel in het publieke sleutelbestand dat is geopend in nano. Sla de wijzigingen op (Ctrl+O) en verlaat (Ctrl+X) nano.

Na het opslaan van het publieke sleutelbestand herhaal je hetzelfde proces om het sleutelbestand te maken, de sleutel van Cloudflare te kopiëren en op te slaan in het sleutelbestand. Maar deze keer maak je het privésleutelbestand (nginx-test.adamlistek.me.key).

1. Het openbare sleutel, onder de sectie Origin Certificiate
 nano /etc/ssl/certs/nginx-test.adamlistek.me.crt
De privésleutel, onder de sectie met dezelfde naam
 nano /etc/ssl/private/nginx-test.adamlistek.me.key
Copying the public/private certificate key information.

4. Nu u de openbare en privésleutels hebt aangemaakt, wijst u NGINX naar de locatie van de certificaten. Doe dit door het bestand test.adamlistek.me.conf aan te passen met de onderstaande regels, aangepast om uw domein te ondersteunen.

 ssl_certificate /etc/ssl/certs/nginx-test.adamlistek.me.crt;
 ssl_certificate_key /etc/ssl/private/nginx-test.adamlistek.me.key;

5. Om de nieuwe certificaten toe te passen, herstart u NGINX met de volgende opdracht.

service nginx restart

6. Nu terug naar het tabblad SSL/TLS in Cloudflare, update de SSL/TLS-versleutelingsmodus door te klikken op Volledig (strikt), zoals u hieronder ziet.

Setting the Encryption mode to Full (strict).

Het inschakelen van Volledige (strikte) SSL/TLS-versleuteling met LetsEncrypt

Het grootste nadeel van het gebruik van een Cloudflare oorspronkelijk certificaat is dat het alleen door Cloudflare wordt vertrouwd. Als u een volledig door de browser vertrouwd certificaat nodig heeft, als back-up of voor meer controle, biedt LetsEncrypt de mogelijkheid om een passend certificaat te genereren.

Hoewel u elk geldig certificaat kunt gebruiken, is LetsEncrypt een veelvoorkomende keuze om een geldig certificaat te genereren. Er zijn meerdere LetsEncrypt-cliënten beschikbaar, maar deze handleiding demonstreert de acme.sh-cliënt.

Aangezien u al op Cloudflare bent, is een van de beste methoden voor DNS-provisionering met LetsEncrypt via de DNS-optie.

1. Open eerst uw terminal en installeer acme.sh via het curl-commando.

curl https://get.acme.sh | sh
Installing the acme.sh client.

2. Het volgende is om het bestand account.conf te maken of aan te passen dat zich bevindt in de installatiemap om de opgeslagen Cloudflare API-sleutels toe te voegen. Deze sleutels kunnen worden gevonden in het gedeelte Profiel -> API-tokens van het Cloudflare-dashboard.

Hoewel u een specifiek beperkt toestemmingstoken kunt maken, pas in dit zelfstudie voorbeeld de Global API-sleutel toe zoals hieronder weergegeven.

SAVED_CF_Key='cloudflareglobalapikey'
 SAVED_CF_Email='[email protected]'

3. Genereer het certificaat via de volgende opdracht. Let op, de onderstaande opdracht vertelt de acme.sh client om Cloudflare (dns_cf) te gebruiken om eigenaarschap van het certificaat te verifiëren (--dns). Stel vervolgens de wachttijd in (--dnsslep) op 20 seconden voordat het certificaat wordt uitgegeven (--issue) aan (-d) het domein (test.adamlistek.me).

Wanneer de opdracht is voltooid, ziet u hieronder de paden waar u uw certificaat, certificaatsleutel, tussenliggend CA-certificaat en volledige keten-certificaten kunt vinden.

acme.sh --issue --dns dns_cf --dnssleep 20 -d test.adamlistek.me
Generating the LetsEncrypt certificate.

4. Zoals eerder, pas de NGINX-siteconfiguratie aan om de locatie van het ssl_certificate en ssl_certificate_key te wijzigen. Zorg ervoor dat /home/user wordt vervangen door de locatie waar uw acme.sh installatie zich bevindt.

ssl_certificate /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.csr;
 ssl_certificate_key /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.key;

5. Pas de nieuwe configuratie toe door NGINX opnieuw te starten met de volgende opdracht.

service nginx restart

6. Werk ten slotte uw Cloudflare SSL/TLS-versleutelingsmodus bij door naar het tabblad SSL/TLS te gaan en vervolgens te klikken op Volledig (strikt).

Setting the Encryption mode to Full (strict).

Conclusie

Gedurende deze tutorial heb je geleerd hoe je je site kunt beveiligen met de verschillende door Cloudflare geleverde SSL/TLS-opties. Het toevoegen van LetsEncrypt aan je Cloudflare SSL-configuratie voegt ook een flexibele en door de gebruiker beheerde oorspronkelijke certificaatoptie toe!

Met de kennis van verschillende opties om de verbinding met de bezoeker van de site te beveiligen, werk je toe naar een volledig beveiligde verbinding met je server met Cloudflare SSL?

Source:
https://adamtheautomator.com/cloudflare-ssl/