---
title:  "Beveilig jouw websites met SSL!"
excerpt: "Let's encrypt is een fantastische tool, volledig gratis, open-source,... Moet ik dit echt verkopen?"
date:   "2023-10-08T06:00:00.000Z"
author: Eli Winderickx
hero_image: /cover_LetsEncrypt.png
category: Linux,Nginx,Websites,Reverse Proxy
---
## Wat doen we vandaag?
Om zeker te zijn dat de verbinding met onze website op een beveiligde manier gebeurt, gebruiken we een SSL certificaat. Hiermee kunnen we namelijk een HTTPS verbinding opzetten. Dit versleutelt de verbinding op een cryptografische manier. Dat houdt in dat het verkeer van en naar jouw server beveiligd is als een soor tunnel over het internet. Iemand die de lijn afluisterd, gaat dus alleen geencrypteerde brabbel terugvinden. Ik moet je dan ook niet uitleggen waarom een geëncrypeerde verbinding belangrijk is. Wachtwoorden of andere gevoelige informatie die je over het internet stuurt, zal nu niet als leesbare tekst te zien zijn.

Omdat dit zo belangrijk is, heeft de [EFF (Electronic Frontier Foundation)](https://www.eff.org/) daarom beslist om de drempel naar zo'n certificaat zo laag mogelijk te maken. In de plaats van een certificaat aan te kopen bij een gekende CA (Certificate Authority) (duur) of zelf een Self-signed certificaat aan te maken (Niet extern vertrouwd en een kleine leercurve), kan je een tool downloaden genaamd Certbot om niet alleen gratis een geldig certificaat aan te maken. Ook de configuratie en vernieuwing kan eenvoudig geautomatiseerd worden.

> Dit houdt hackers niet tegen om jouw website aan te vallen. Enkel hebben we nu een aanval vector minder; de verbinding tussen het toestel van de gebruiker en jouw server.

## Certbot
### Vereisten
[`Let's encrypt!`](https://letsencrypt.org/) Zo is de tool gekend bij de grote meerderheid. Deze tool van de EFF is niet voor niets een hele populaire tool. Meer dan 300 miljoen websites maken er gebruik van. En daar is een goede reden voor. Om hiermee van start te kunnen gaan, moeten we eerst de nodige tools installeren:

```bash
sudo dnf install certbot python3-certbot-nginx
```

> Jouw website moet op het internet bereikbaar zijn. Als het internet niet naar jouw server kan of mag verbinden, ga je Let's encrypt niet kunnen gebruiken. Ook huis en tuin routers ondersteunen portforwarding. Controleer even bij jouw ISP hoe je dat opzet.

Daarnaast hebben we een basis configuratie nodig. Ik ben fan van NGINX dus ik dat gebruik ik hieronder. De configuratie om via poort 80 naar poort 443 te verbinden en zo HTTPS te introduceren. Als je de onderste blok goed kan vertalen zie je dat deze configuratie voor een reverse proxy is en dat de verbinding naar een interne virtuele machine wordt doorgestuurd.

```conf
server {
        listen 80;
        server_name myweb.winderickx.me;
	access_log /var/log/nginx/myweb.winderickx.me.log;
	error_log /var/log/nginx/myweb.winderickx.me.error.log;
	return 301 https://myweb.winderickx.me$request_uri;


}
server {
	listen 443 ssl;
	server_name myweb.winderickx.me;

	access_log /var/log/nginx/myweb.winderickx.me.log;
	error_log /var/log/nginx/myweb.winderickx.me.error.log;

	ssl_prefer_server_ciphers on;

	location / {
		proxy_pass	https://192.168.124.204:443;
	    proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
	    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
	    proxy_set_header        X-Forwarded-Proto $scheme;
	}

}
```

Wijzig de `myweb.winderickx.me` naar jouw webadres en pas de `proxy_pass` aan naar jouw intern IP-adres. Daarna kan je `sudo nginx -t` uitvoeren om jouw configuratie te controleren. Als alles goed gaat, krijg je onderstaande boodschap terug. Anders gaat NGINX je normaal wel vertellen waar het misloopt. Gaat het goed herlaad dan nog even NGINX met `sudo systemctl reload nginx`.

```
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

```

> Als jouw firewall nog niet open staat voor http en https verkeer, is dit het moment om dat even recht te zetten.

```bash
sudo firewall-cmd --add-service=http --add-service=https --permanent
sudo firewall-cmd --reload
```

## Let's Encrypt!
Laten we er nu helemaal invliegen! Je kan `certbot` nu uitvoeren met de `--nginx` vlag om automatisch de configuratie aan te passen. Hoe weet `certbot` welke configuratie? Dat kan die via de `-d` flag waarachter je jouw domein gaat zetten. Als je meerdere subdomeinen aan jouw website wilt koppelen, kan je gewoon extra `-d` flags toevoegen.

De eerste keer dat je Let's encrypt gebruikt, ga je de gebruiksovereenkomst moeten lezen en accepteren en krijg je ook de vraag om jouw e-mailadres aan de [EFF](https://www.eff.org/) te delen. Ik ben een fervente fan van hun werk en kan hen ook enkel toejuichen. Moest het mogelijk zijn voor jou, overweeg dan ook om hen financieel te steunen.

```bash
sudo certbot --nginx -d myweb.winderickx.me
```

Als het goed gelopen is, heb je nu een website die met een HTTPS beveiliging veilig gemaakt is. Goed gedaan! Het internet is nu weer een klein beetje veiliger geworden!

```
Deploying certificate
Successfully deployed certificate for myweb.winderickx.me to /etc/nginx/conf.d/myweb.winderickx.me.conf
Congratulations! You have successfully enabled HTTPS on https://myweb.winderickx.me
```