Hoe u een Let’s Encrypt-certificaat verkrijgt door middel van DNS-validatie met acme-dns-certbot op Ubuntu 18.04

De auteur heeft de COVID-19 Hulpfonds gekozen om een donatie te ontvangen als onderdeel van het Schrijf voor Donaties-programma.

Inleiding

De meerderheid van de Let’s Encrypt-certificaten wordt uitgegeven op basis van HTTP-validatie, wat de gemakkelijke installatie van certificaten op één server toelaat. Echter, is HTTP-validatie niet altijd geschikt voor het uitgeven van certificaten voor gebruik op gelijkmatig geconfigureerde websites, en kan het ook niet worden gebruikt om wildcard-certificaten uit te geven.

DNS-validatie stelt het verwijzen van aanvragen voor het uitgeven van certificaten voor via DNS-records in plaats van door middel van het leveren van inhoud over HTTP. Dit betekend dat certificaten tegelijkertijd kunnen worden uitgegeven voor een cluster van web servers die achter een load balancer draaien, of voor een systeem dat niet direct via het internet toegankelijk is. Wildcard-certificaten worden ook ondersteund met behulp van DNS-validatie.

De acme-dns-certbot-tool wordt gebruikt om Certbot te verbinden met een externe DNS-server waar de certificaatvalidatieschema’s automatisch via een API kunnen worden ingesteld als u een certificaat aanvraagt. Het voordeel hiervan is dat u geen directe integratie nodig hebt tussen Certbot en uw DNS-provideraccount, en u ook geen onbeperkte toegang moet geven tot uw volledige DNS-configuratie, wat voor de veiligheid voordelig is.

Delegeerde DNS-zones worden gebruikt om zoekopdrachten voor de certificaatvalidatieschema’s door te sturen naar de externe DNS-dienst, zodat u na de initiale installatie zoveel certificaten aanvraagt als u wilt zonder handmatige validatie nodig te hebben.

Een ander belangrijk voordeel van acme-dns-certbot is dat het kan worden gebruikt om certificaten uit te geven voor individuele servers die achter een load balancer kunnen draaien of op andere manier niet direct via HTTP toegankelijk zijn. traditionele HTTP-certificaatvalidatie kan in deze gevallen niet worden gebruikt, tenzij u de validatiefiles op elke server instelt. Het acme-dns-certbot-hulpmiddel is ook handig als u een certificaat wilt uitgeven voor een server die niet via het internet toegankelijk is, zoals een interne systeem of een staging-omgeving.

In deze handleiding zult u de acme-dns-certbot-hook voor Certbot gebruiken om een Let’s Encrypt-certificaat uit te geven met DNS-validatie.

Voorwaarden

Om deze handleiding af te maken, heb je het volgende nodig:

  • Een geïnstalleerde Ubuntu 18.04 server volgens de Beginnen met Ubuntu 18.04 handleiding, inclusief een sudo-gebruiker die geen rootrechten heeft.

  • Een domeinnaam waarvoor je een TLS-certificaat kunt aanschaffen, inclusief de mogelijkheid om DNS-records toe te voegen. In dit specifieke voorbeeld zal gebruik worden gemaakt van your-domain en subdomain.your-domain, evenals *.your-domain voor een wildcard-certificaat. Dit kan echter worden aangepast voor andere domeinnamen, subdomeinen of wildcard-domeinen indien nodig.

Zodra je dit gereed hebt, log dan in bij je server als je sudo-gebruiker om te beginnen.

Stap 1 — Certbot installeren

In deze stap zal u Certbot installeren, een programma dat gebruikt wordt om Let’s Encrypt-certificaten uit te geven en te beheren.

Certbot is beschikbaar in de officiële Ubuntu Apt-repositorieën, maar wordt aanbevolen om de repository van de Certbot-ontwikkelaars te gebruiken, aangezien deze altijd de meest actuele versie van het programma bevat.

Begin door de Certbot-repository toe te voegen:

sudo apt-add-repository ppa:certbot/certbot

U dient te drukken op ENTER om de aanroep te accepteren en de nieuwe repository aan uw systeem toe te voegen.

Vervolgens installeert u het Certbot-pakket:

sudo apt install certbot

Nadat de installatie voltooid is, kunt u controleren of Certbot succesvol is geïnstalleerd:

certbot --version

Dit zal iets gelijkaardigs aan het volgende uitgeven:

Output
certbot 0.31.0

In deze stap heeft u Certbot geïnstalleerd. Volgend zal u de acme-dns-certbot-hook downloaden en installeren.

Stap 2 — acme-dns-certbot installeren

Nu het basisprogramma Certbot is geïnstalleerd, kunt u acme-dns-certbot downloaden en installeren, wat Certbot toestaat om in DNS-validatie-modus te werken.

Begin met het downloaden van een kopie van het script:

Opmerking: Als een best practice, zorg ervoor dat je deze Github repository en het script bekijkt voordat je het uitvoert. Je kunt ook eerst deze repository forken en dan gebruik maken van het acme-dns-certbot.py script. Deze fork biedt een extra beveiligingslaag, zodat het script onder onze controle blijft en minder vatbaar is voor niet-geverifieerde wijzigingen.

wget https://github.com/joohoi/acme-dns-certbot-joohoi/raw/master/acme-dns-auth.py

Zodra de download is voltooid, markeer het script als uitvoerbaar:

chmod +x acme-dns-auth.py

Vervolgens, bewerk het bestand met je favoriete teksteditor en pas de eerste regel aan om te forceren dat het Python 3 gebruikt:

nano acme-dns-auth.py

Voeg een 3 toe aan het einde van de eerste regel:

acme-dns-certbot.py
#!/usr/bin/env python3
. . .

Dit is nodig om ervoor te zorgen dat het script de nieuwste ondersteunde versie van Python 3 gebruikt, in plaats van de verouderde Python versie 2.

Wanneer dit voltooid is, sla het bestand op en sluit het.

Verplaats tenslotte het script naar de Certbot Let’s Encrypt directory zodat Certbot het kan laden:

sudo mv acme-dns-auth.py /etc/letsencrypt/

In deze stap heb je de acme-dns-certbot hook gedownload en geïnstalleerd. Vervolgens kun je beginnen met het opzetten en werken aan het uitgeven van je eerste certificaat.

Stap 3 — Acme-dns-certbot instellen

Om aan te beginnen met acme-dns-certbot moet u een eerste setproces voltooien en minimaal één certificaat uitgeven.

Start met het uitvoeren van Certbot om een certificaat uit te lenen met DNS validatie. Dit zal het acme-dns-certbot-script aanroepen en de startproces aansturen:

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.your-domain -d your-domain

U gebruikt het argument --manual om alle geautomatiseerde integratiefuncties van Certbot uit te schakelen. In dit geval kiest u gewoon een ruw certificaat uit, in plaats van het automatisch op een dienst te installeren.

U configureert Certbot om de acme-dns-certbot-hook te gebruiken via het argument --manual-auth-hook. U roept het argument --preferred-challenges aan zodat Certbot de voorkeur geeft aan DNS validatie.

U moet ook Certbot vertellen te pauzeren voordat het probeert het certificaat te valideren, wat u doet met het argument --debug-challenges. Dit om u tijd te geven om de DNS CNAME-record(s) nodig voor acme-dns-certbot in te stellen, die later in deze stap wordt besproken. Zonder het argument --debug-challenges zou Certbot niet pauzeren, dus zou u geen tijd hebben om de noodzakelijke DNS wijziging te maken.

Onthoud om elke van de domeinnamen die u wilt gebruiken te vervangen door argumenten met -d. Als u een wildcard-certificaat wilt uitgeven, zorg ervoor dat u het sterretje (*) escapet met een backslash (\).

Nadat u de standaard stappen van Certbot heeft gevolgd, zal u uiteindelijk een bericht krijgen dat lijkt op het volgende:

Output
... Output from acme-dns-auth.py: Please add the following CNAME record to your main DNS zone: _acme-challenge.your-domain CNAME a15ce5b2-f170-4c91-97bf-09a5764a88f6.auth.acme-dns.io. Waiting for verification... ...

U moet de vereiste DNS CNAME-record toevoegen aan de DNS-configuratie voor uw domein. Dit zal de controle over de subdomein _acme-challenge toewijzen aan het ACME DNS-service, wat acme-dns-certbot toestaat om de vereiste DNS-records in te stellen om de certificaatverzoeken te valideren.

Als u DigitalOcean gebruikt als uw DNS-provider, kunt u het DNS-record binnen uw controlpanel instellen:

Wordt aangeraden om de TTL (time-to-live) op ongeveer 300 seconden in te stellen om te helpen waarborgen dat elke wijziging in het record snel wordt doorgevoerd.

Als u de DNS-record hebt ingesteld, keer terug naar Certbot en druk op ENTER om het certificaatverzoek te valideren en het uitgeven proces te voltooien.

Dit zal enkele seconden duren, en u zult dan een bericht zien dat bevestigt dat het certificaat is uitgegeven:

Output
... Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your-domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your-domain/privkey.pem ...

U heeft acme-dns-certbot voor het eerst gelopen, de vereiste DNS-records ingesteld en een certificaat succesvol uitgegeven. Nu zal u de automatische vernieuwing van uw certificaat instellen.

Stap 4 — Acme-dns-certbot gebruiken

In deze laatste stap zult u acme-dns-certbot gebruiken om meer certificaten uit te geven en bestaande certificaten te vernieuwen.

Eerstens, nu u minstens één certificaat met acme-dns-certbot succesvol uitgegeven heeft, kunt u certificaten voor dezelfde DNS-namen uitgeven zonder een ander DNS CNAME-record te moeten toevoegen. Echter, als u een certificaat voor een andere subdomein of een volledig nieuwe domeinnaam wilt kopen, zal u gevraagd worden om nog een CNAME-record voor het subdomein toe te voegen.

Bijvoorbeeld, u kunt een ander losstaand wildcard-certificaat uitgeven zonder het verificatieproces opnieuw uit te voeren:

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.your-domain

Hetzelfde geldt, als u probeert een certificaat uit te geven voor een subdomein, zal u gevraagd worden om een CNAME-record voor het subdomein toe te voegen:

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d subdomain.your-domain

Dit zal een uitvoer geven die vergelijkbaar is met de initiale installatie uit Stap 3:

Output
... Please add the following CNAME record to your main DNS zone: _acme-challenge.subdomain.your-domain CNAME 8450fb54-8e01-4bfe-961a-424befd05088.auth.acme-dns.io. Waiting for verification... ...

Nu u in staat bent acme-dns-certbot te gebruiken om certificaten uit te geven, is het waard om ook aan de vernieuwingsproces te denken.

Als uw certificaten bijna aan verval zijn, kan Certbot ze automatisch voor u vernieuwen:

sudo certbot renew

Het vernieuwingsproces kan van begin tot einde worden uitgevoerd zonder gebruikersinteractie en zal alle configuratieopties onthouden die u tijdens de initiale installatie gespecificeerde heeft.

om te testen of dit werkt zonder te wachten tot bij de vervaldatum, kun je een testrun aansteken. Dit zal het verlengingsproces simuleren zonder enige actuele wijzigingen aan uw configuratie te maken.

U kunt een testrun activeren door de standaard renew commando te gebruiken, maar met het argument --dry-run:

sudo certbot renew --dry-run

Dit zal iets gelijkaardigs aan het volgende afgeven, wat uwzekerheid biedt dat het verlengingsproces correct functioneert:

Output
... Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator manual, Installer None Renewing an existing certificate Performing the following challenges: dns-01 challenge for your-domain dns-01 challenge for your-domain Waiting for verification... Cleaning up challenges ...

In deze laatste stap heeft u een ander certificaat uitgegeven en de automatische verlengingsproces binnen Certbot getest.

Conclusie

In dit artikel heeft u Certbot geinstalleerd met acme-dns-certbot om certificaten uit te geven met behulp van DNS-validatie. Dit ontvouwt de mogelijkheid om ook wildcard-certificaten te gebruiken en het beheren van een grote portie van verschillende web servers die achter een load balancer zitten.

Zorg ervoor dat u de acme-dns-certbot-bronnen op de hoogte blijft van eventuele updates van het script, aangezien het altijd aanbevolen is om de nieuwste ondersteunde versie uit te voeren.

Als u meer wilt leren over acme-dns-certbot, zou u misschien de documentatie voor het acme-dns-project willen bekijken, die het serverside-element van acme-dns-certbot is:

Het acme-dns-software kan ook zelf gehost worden, wat mogelijk voordelen biedt als u in een hoogbeveiligde of complexe omgeving werkt.

Of u kiest om de technische details van de ACME DNS-validatie in te diepen door het relevante gedeelte van het officiële RFC-document te bestuderen, dat uitlegt hoe het proces werkt:

Source:
https://www.digitalocean.com/community/tutorials/how-to-acquire-a-let-s-encrypt-certificate-using-dns-validation-with-acme-dns-certbot-on-ubuntu-18-04