Let's Encrypt DNS-01 challenge med GleSYS API och Dehydrated

Inledning

Let's Encrypt har släppt en typ av challenge för att verifiera att du verkligen är ägare av den domän som du har skapat ett certifikat för. Denna challenge kräver inte att du använder en webbserver för att verifiera dig, utan den är helt baserad på att du har åtkomst till att skapa pekare för domänen.

Den här guiden visar hur du kan använda GleSYS API för detta.

Instruktioner

  1. För att kunna följa guiden behöver du installera Curl och XMLStarlet om du inte har dessa paketen sedan tidigare.

För Debian och Ubuntu använder du följande kommando:

apt-get install curl xmlstarlet

För CentOS (kräver EPEL) använder du följande kommando:

yum install curl xmlstarlet

Information om EPEL finns här.

  1. Gå in i arbetskatalogen nedan:
cd /etc/ssl/private/

Om katalogen inte finns skapar du den med följande kommando:

mkdir /etc/ssl/private && chmod 700 /etc/ssl/private

Med chmod 700 ovan sätts rättigheter på mappen. I det här fallet ger du ägaren rätt att läsa, skriva och exekvera från den.

  1. Nästa steg är att skapa miljövariabler (envvars) som innehåller API-referenser. Logga in i GleSYS Cloud och klicka på din profil i det övre högra hörnet. Välj Hantera API-åtkomst, och klicka sedan på Skapa-knappen. I fönstret Skapa API-nyckel som öppnas väljer vi vilket projekt nyckeln ska skapas för och ger den ett namn. I det här fallet får den beskrivningen letsencrypt.

KB lets encrypt punkt 3 hantera API-åtkomst

I bilden nedan kan du se att en API-nyckel, utan några rättigheter, har skapats med ID 0JSmAiYu3l0ZGCNAOa15jWOP7OXKFIidk47RVElQ. Den är unik för oss och du kommer att få en annan nyckel som du ska använda längre fram i guiden.

  1. För att ange vilket IP-nummer eller vilken domän som ska få använda API-nyckeln, klickar du på Funktioner, och väljer Åtkomst

KB Lets encrypt punkt 4 åtkomst av API-nyckel

När du klickar på Lägg till är förändringarna aktiva omedelbart. Tryck på Stäng när du är färdig.

KB Lets encrypt punkt 4.1 lägg till åtkomst

  1. Därefter ska vi ge API-nyckeln tillåtelse att få redigera domäner. Klicka på Funktioner och välj Rättigheter.

KB Lets encrypt punkt 5 rättigheter

I fönstret Rättigheter för API-nyckel som öppnas väljer du Tillåten på raden domain. Avsluta med Spara.

KB Lets encrypt punkt 5.2 tillåt alla

  1. Nu är det dags att börja använda den API-nyckel som du har skapat och det gör du genom köra kommandot:
echo "export USER=CL12345" > /etc/ssl/private/.glesys-credentials
echo "export KEY=ABCDE12345" >> /etc/ssl/private/.glesys-credentials
  • Ersätt CL12345 med identifieraren för det projekt som du har skapat nyckeln för.
  • Ersätt ABCDE12345 med den KEY som du har genererat. I vårt fall 0JSmAiYu3l0ZGCNAOa15jWOP7OXKFIidk47RVElQ.
  1. Ladda ner Dehydrated med exempel-config samt vårt Hook-skript från GitHub:
wget https://raw.githubusercontent.com/lukas2511/dehydrated/master/dehydrated
wget https://raw.githubusercontent.com/glesys/api-docs/master/BASH/LetsencryptGlesysHook/glesys-dns-01-hook.sh
wget https://raw.githubusercontent.com/glesys/api-docs/master/BASH/LetsencryptGlesysHook/config
  1. Editera config och skriv in uppgifterna enligt nedan. Glöm inte att ta bort brädgårdarna framför respektive rad.
CHALLENGETYPE="dns-01"
HOOK="${BASEDIR}/glesys-dns-01-hook.sh"
CONTACT_EMAIL=user@example.com

Dehydrated använder som standard domains.txt för att hantera vilka domäner som den ska skapa eller uppdatera certifikat för.

Syntax för att visa vad filen innehåller är cat domains.txt. Det skulle till exempel kunna se ut så här:

example.net www.example.net
example.se dev.example.se

Det här skapar två certifikat och domänerna efter initiala domänen på samma rad blir alternative names.

  1. I vårt exempel vill vi lägga till domänen example.com. Med följande kommando skriver vi till domains.txt:
echo "example.com www.example.com" > domains.txt
  1. Vi måste även sätta rättigheter på filerna vi skapat så att de bara går att nå via root. Det gör du med följande kommando:
chmod 700 glesys-dns-01-hook.sh dehydrated
chmod 600 domains.txt config .glesys-credentials
  1. Avslutningsvis kör vi Dehydrated med flaggan -c för att skapa certifikaten för vår domän:
./dehydrated -c
# INFO: Using main config file /etc/ssl/private/config.sh
+ Generating account key...
+ Registering account key with letsencrypt...
Processing example.com with alternative names: www.example.com
 + Signing domains...
 + Creating new directory /etc/ssl/private/certs/example.com ...
 + Generating private key...
 + Generating signing request...
 + Requesting challenge for example.com...
 + Requesting challenge for www.example.com...
 + Responding to challenge for example.com...
 + Challenge is valid!
 + Responding to challenge for www.example.com...
 + Challenge is valid!
 + Requesting certificate...
 + Checking certificate...
 + Done!
 + Creating fullchain.pem...
 + Done!

Nu är det klart och certifikaten hittar du i katalogen /etc/ssl/private/certs/.

Ett konkret exempel

För att använda certifikaten till din webbserver som kör apache2 lägger du till följande i konfigurationen:

SSLEngine on
SSLCertificateFile /etc/ssl/private/certs/example.com/cert.pem
SSLCertificateKeyFile /etc/ssl/private/certs/example.com/privkey.pem
SSLCertificateChainFile /etc/ssl/private/certs/example.com/chain.pem

Tips!

Ett kostnadsfritt SSL-certifikat från Let's Encrypt är endast giltigt i 90 dagar. För att autoförnya certifikatet klockan 24:00 varje söndag i månaden, kan du använda dig av följande cronjob:

crontab -e
00 00 * * 06 /etc/ssl/private/dehydrated -c &>/dev/null

Läs mer om cronjob här.

Hittar du inte det du söker?

Kontakta oss gärna för mer information. Vi hjälper dig att komma fram till den bästa lösningen för dina behov.

Skicka e-post Ring 0200-23 88 00