Nginx and SSL HTTPS

SSL certificaat installeren in Nginx

In een eerdere post legde ik al uit hoe je een SSL certificaat aanvragen (gratis) kan. Gebruik je Nginx op je Linux server en heb je toegang tot deze server via SSH, dan kan je van deze tutorial gebruik maken om HTTPS in te schakelen voor je domein.

Poort 443 openen voor SSL/HTTPS verkeer

Eerst en vooral zorg je er voor dat je poort 443 opent op je server. HTTPS (SSL_Slotje_Google) werkt namelijk niet over poort 80 zoals bij HTTP het geval is en het is goed mogelijk dat deze poort gesloten is. Open terminal en voer volgende commando’s uit om verkeer op poort 443 toe te laten.

iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
/etc/init.d/iptables save
/etc/init.d/iptables restart

Certificate chain genereren

Om HTTPS in te schakelen op je Nginx server, heb je vervolgens een geldig certificaat nodig. Je webserver gebruikt een ‘certificate chain’, deze ‘ketting’ bestaat uit je certificaat en een intermediary certificate. Dit intermediary certificate kan je vrij downloaden van de website waar je je SSL hebt aangevraagd. In het geval van StartSSL:

wget https://www.startssl.com/certs/sub.class1.server.ca.pem

Gebruik je bijvoorbeeld Comodo, zoek dan even op Google: “Comodo Intermediate Certificate” en download het desbetreffende bestand. Uiteraard kijk je dan best ook even of het certificaat wel degelijk van Comodo komt en niet van een nep website.

Je hebt nu twee bestanden, een .crt bestand (jouw certificate) en een . pem bestand (de intermediate certificate) van je SSL provider. Deze willen we nu samenvoegen tot 1 .crt bestand. Vervang uiteraard de bestandsnamen door jouw eigen bestandsnamen.

cat vanhoutte.be.crt sub.class1.server.ca.pem > samengevoegd.crt

Nginx configuratie aanpassen

Je web server luistert ondertussen naar poort 443, maar nu moet je Nginx ook nog vertellen over je samengevoegd certificaat en je ontsleutelde private key. Het is waarschijnlijk dat je nginx.conf configuratiebestand zich bevind in /etc/nginx/nginx.conf of /opt/nginx/conf/.

server {
#alle HTTP traffic op poort 80
listen 80;
#servernaam
server_name vanhoutte.be;
#HTTP redirecten naar HTTPS via een 301 omleiding
return 301 https://$host$request_uri;
}

server {
#alle traffic op poort 443
listen 443 ssl;
#servernaam
server_name vanhoutte.be;

#ssl expliciet aanzetten
ssl on;
#aanduiden waar de certificaten zich bevinden
ssl_certificate /home/gebruiker/samengevoegd.crt;
ssl_certificate_key /home/gebruiker/mijn-private-decrypted.key;
}

Verder kan je aan deze configuratie nog heel wat toevoegen, maar deze configuratie zou alvast HTTPS werkend moeten krijgen.

Vergeet het bestand niet op te slaan en om te kijken of de configuratie ‘werkt’, voer je volgend commando uit:

sudo nginx -t

Indien er geen fouten zijn, is het tijd om Nginx te herstarten zodat de nieuwe configuratie wordt ingeladen.

sudo service nginx restart

Na deze herstart van Nginx, zou je het groene HTTPS icoontje (SSL_Slotje_Google) moeten zien! Misschien liep er iets mis en dan laat de browser dit ook wel weten via een doorstreep icoontje (https_waarschuwing). Dan is het tijd alle stappen nog eens na te kijken en eventueel fouten te achterhalen.

BEAST aanvallen vermijden

Eenmaal je een werkende HTTPS verbinding tot stand hebt kunnen bregen met je server, is het tijd om wat kleine aanpassingen in het configuratie bestand door te voeren. Bijvoorbeeld om BEAST aanvallen te vermijderen kan je volgende twee lijnen aan je conf bestand toevoegen:

ssl_prefer_server_ciphers On;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;

One thought on “SSL certificaat installeren in Nginx”

  1. Pingback: Schakel je website nu over naar HTTPS, gratis | Thomas Vanhoutte

Leave a Reply

Your email address will not be published. Required fields are marked *