Let’s Encrypt – Gratis SSL certifikater

SSL Certificate
De seneste år er der med rette, kommet mere og mere fokus på, at man bør kommunikere mere sikkert over Internettet. Bruger man websites der ikke har den lille grønne hængelås foran adressen, så er der mulighed for, at en ondsindet person kan læse trafikken som du sender og modtager fra den pågældende webside. Anvender en webside SSL - hvilket kan ses hvis der står https:// foran web-adressen i stedet for blot http://, så er der tale om at trafikken kører over en sikker forbindelse imellem websiden og dig.

Tidligere har det ofte været en dyr og nogle gange langsommelig affære at købe et certifikat til sit websted, men det har organisationen Let's Encrypt nu valgt at gøre noget ved. Sammen med en lang række af de største spillere på markedet, eksempelvis Mozilla, Akamei, Cisco, Electronic Frontier Foundation og mange andre, har de lavet et projekt der gør det muligt for alle websider, ganske gratis at få et certifikat og dermed tilbyde deres brugere at kommunikere sikkert.

Før du eventuelt kaster dig ud i certifikater fra Let's Encrypt, så skal du være opmærksom på, at de i skrivende stund ikke fungerer på Windows XP. Læs eventuelt mere i deres FAQ her.

Jeg vil i dette blogindlæg, fortælle hvordan man installerer et Let's Encrypt SSL certifikat på henholdsvis Debian og FreeBSD systemerne, som kører Apache. Det er dog ganske nemt, at få det til at virke på andre systemer og webserver-typer.

Let's Encrypt på Debian med Apache

Kører man med et system baseret på Debian og med Apache webserveren, så kan man anvende et automatisk værktøj til at lave alt konfigurationen, inklusive tildelingen af certifikatet. Det hele tager under et minut, afhængigt af hvor mange af de nødvendige afhængigheder du har installeret i forvejen. Eftersom jeg kører en ren Debian, så findes der endnu ikke en 'letsencrypt' pakke, så derfor måtte jeg hente den via Github. Her er installationsproceduren fra start til slut:

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt/
./letsencrypt-auto --help

Den sidste kommando sørger for, automatisk, at hente alle de nødvendige afhængigheder og installere dem. Har man kørt scriptet en gang før, så tjekker den i øvrigt også om der er kommet opdateringer til afhængighederne og sørger for at opdatere dem. Til sidst viser den alle de tilgængelige kommandoer for scriptet. Eftersom jeg kører Debian med Apache, så kan jeg benytte Apache pluginnet til at lave det hele for mig, det gør jeg på følgende måde:

./letsencrypt-auto --apache

Ovenstående kommando fører dig igennem en virtuel guide som sørger for at sætte SSL/HTTPS på den virtuelle host i webserveren som du gerne vil have det slået til på. Der findes lignende et plugin til nginx, som også følger med i pakken.

Let's Encrypt på FreeBSD med Apache

Bruger man et andet operativsystem, eksempelvis FreeBSD, så bliver man nødt til at lave konfigurationen af SSL certifikaterne manuelt, men Let's Encrypt værktøjet hjælper stadig den mest besværlige del af arbejdet, så du kun skal installere certifikaterne i Apache. Herunder kan du se hvordan jeg har gjort det på FreeBSD. Jeg antager at du allerede har installeret 'git', ellers kan du gøre det via ports: cd /usr/ports/devel/git; make install clean - eller via pkg: pkg install git.

Til installationen på FreeBSD brugte jeg --webroot flaget, som gør at verifikationen af om man ejer det pågældende website, sker ved at placere nogle filer i det katalog som man angiver og som altså skal være roden af det domænenavn som man vil have et SSL certifikat til. I roden laver den helt konkret et katalog der hedder .well-known med et underkatalog som hedder acme-challenge. Desværre formår scriptet ikke selv at rydde op igen, så dem skal man evt. lige slette efter certifikatet er installeret. Flaget -d bruges til at angive hvilke domæner indenfor den pågældende webrod certifikatet skal virke for.

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto certonly --debug --webroot -w /home/skou.dk/WWW -d skou.dk -d www.skou.dk

Bemærk at --debug flaget er nødvendigt på FreeBSD, eftersom scriptet, ifølge Let's Encrypt, stadig er meget eksperimentelt. Jeg havde dog absolut ikke nogle problemer med at skifte mit certifikat ud her på Skou.dk med et nyt fra Let's Encrypt.

Når kommandoen køres, så kommer man igen ind i en guidet dialog, hvor man skal indtaste sin e-mail adresse og bekræfte at det er OK at man kommunikerer med Let's Encrypts ACME server (Automated Certificate Management Enviroment). Når man er færdig, så kan man finde de genererede certifikater i /etc/letsencrypt/live/domænenavn.dk/*.pem

Nu mangler man kun at tilføje certifikaterne til Apaches konfiguration (eller hvilken webserver du nu vælger at anvende certifikaterne med). I Apache gøres dette ved at tilføje følgende to linjer til SSL konfigurationen - du skal selvfølgelig lige huske også at sætte SSLEngine On og gennemgå de øvrige konfigurationer i Apache der er nødvendige for at kunne køre SSL.

SSLCertificateFile /etc/letsencrsypt/live/skou.dk/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/skou.dk/privkey.pem

SSL-testen af Let's Encrypt certifikaterne

En fin måde at teste sine SSL certifikater og ligeledes den SSL-konfiguration man har på sin webserver, er ved at anvende SSLlabs.com's SSL-test. Du kan se resultatet fra den pågældende test på skou.dk herunder:

https://www.ssllabs.com/ssltest/analyze.html?d=skou.dk

Udfaldet af ovenstående test, er selvfølgelig ikke udelukkende et udtryk for kvaliteten af de enkelte certifikater, men også hvordan SSL-konfigurationen på webserveren er sat op. Højeste rating er A+.

Let's Encrypt rating A+
Her er de ekstraindstillinger som har fået mig op på A+-ratingen:

SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA 3DES !RC4 !aNULL !eNULL !LOW !MD5 !EXP
!PSK !SRP !DSS"

Derudover har jeg sat følgende header i den virtuelle host som det domænenavn jeg har SSL på anvender:

Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"

Headeren fortæller browseren at der ALTID skal kommunikeres via SSL med dette website.

Udløbstiden for Let's Encrypt certifikater

En af de ting man skal vide omkring de gratis SSL certifikater fra Let's Encrypt er, at de udløber efter 90 dage. Det er der selvfølgelig både fordele og ulemper ved, men heldigvis er det ret nemt at forny certifikaterne, man skal nemlig bare køre samme kommando igen som da man oprettede dem første gang. Ved at angive de nødvendige parametre direkte på kommandolinjen, så kan man faktisk også automatisere det ved at tilføje det til crontab. Man skal bare være sikker på, at alle de nødvendige parametre er der, så guiden som vi da vi lavede certifikaterne, ikke kommer op. Nedenstående eksempel bruger jeg til at køre fornyelsen fra crontab.

./letsencrypt-auto certonly --debug --email blah@skou.dk --text --agree-tos --renew-by-default --webroot -w /home/skou.dk/WWW -d skou.dk -d www.skou.dk

Brug ./letsencrypt-auto --help all for at se alle parametre.

Endelig er der også mulighed for, at man kan give alle parametrene via en configurations fil. Det kan du læse mere om i dokumentationen her.

En lille overvejelse

Som udgangspunkt skal letsencrypt* scriptsne fra Let's Encrypt køres som 'root' brugeren. Dette er nødvendigt for at de kan skrive til /etc kataloget og for at de automatisk kan lave ændringer til webserver konfigurationen. Det betyder selvfølgelig, at du skal have tillid til at scriptsne ikke gør noget de ikke må på din server. Er du ikke synderligt begejstret for, at Let's Encrypt scriptet skal køres som root, så kan det være en ide at kigge lidt på en alternativ løsning, hvor du selv har mere kontrol over det hele: letsencrypt-sudo. Det kan du læse mere om her.

Yderligere information

Let's Encrypts hjemmeside
Dokumentationen til Let's Encrypt

Om forfatteren

Morten Skou

Morten Skou har mange års erfaring med blandt andet Sikkerhed, PHP, MySQL, Apache, FreeBSD, problemløsning og systemadministration. Er blevet tildelt Microsoft MVP prisen siden 2009 på grund af arbejdet med Xboxlife.dk, som har stået på siden 2004.

Besøg hjemmesiden

Kommentarer

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

*