Vraag Hoe kunnen we Let's Encrypt DNS challenge validation gebruiken?


Let's Encrypt heeft bekend gemaakt zij hebben:

Ondersteuning voor de ACME DNS-uitdaging ingeschakeld

Hoe maak ik het ./letsencrypt-auto een nieuw certificaat genereren met validatie van DNS-uitdagingsdomeinen?

BEWERK
Ik bedoel: hoe vermijd ik http/https poortbinding, door de nieuw aangekondigde functie (2015-01-20) te gebruiken waarmee u het eigendom van het domein kunt bewijzen door een specifiek TXT-record toe te voegen in de DNS-zone van het doeldomein?


122
2018-01-21 22:13


oorsprong


Kanttekening: Certbot (dit is de nieuwe naam voor de letsencrypt-client) staat nu standaard webroot-gebaseerde authenticatie toe. - Pierre Prinetti


antwoorden:


Momenteel is het mogelijk om een ​​DNS-validatie uit te voeren, ook met de certbot LetsControleer client in de handmatige modus. Automatisering is ook mogelijk (zie hieronder).

Handmatige plug-in

U kunt een handmatige verificatie uitvoeren - met de handmatige plug-in.

certbot -d bristol3.pki.enigmabridge.com --manual --preferred-challenges dns certonly

Certbot biedt u vervolgens instructies om een ​​TXT-record voor het domein handmatig bij te werken om door te gaan met de validatie.

Please deploy a DNS TXT record under the name
_acme-challenge.bristol3.pki.enigmabridge.com with the following value:

667drNmQL3vX6bu8YZlgy0wKNBlCny8yrjF1lSaUndc

Once this is deployed,
Press ENTER to continue

Nadat u de DNS-record hebt bijgewerkt, drukt u op Enter, certbot gaat door en als LetsEncrypt CA de uitdaging verifieert, wordt het certificaat normaal verstrekt.

U kunt ook een opdracht met meer opties gebruiken om de interactiviteit te minimaliseren en vragen van certbot te beantwoorden. Merk op dat de handmatige plug-in nog niet de niet-interactieve modus ondersteunt.

certbot --text --agree-tos --email you@example.com -d bristol3.pki.enigmabridge.com --manual --preferred-challenges dns --expand --renew-by-default  --manual-public-ip-logging-ok certonly

De vernieuwing werkt niet met de handmatige plug-in omdat deze in de niet-interactieve modus werkt. Meer info op officiële Certbot documentatie.

Update: handmatige hooks

In de nieuwe Certbot-versie die u kunt gebruiken hakenb.v. --manual-auth-hook, --manual-cleanup-hook. De haken zijn externe scripts die door Certbot worden uitgevoerd om de taak uit te voeren.

Informatie wordt doorgegeven in omgevingsvariabelen - bijvoorbeeld domein om te valideren, uitdagingtoken. Vars: CERTBOT_DOMAIN, CERTBOT_VALIDATION, CERTBOT_TOKEN.

certbot certonly --manual --preferred-challenges=dns --manual-auth-hook /path/to/dns/authenticator.sh --manual-cleanup-hook /path/to/dns/cleanup.sh -d secure.example.com

U kunt uw eigen handler schrijven of al bestaande gebruiken, er zijn er veel beschikbaar, bijvoorbeeld voor Cloudflare DNS.

Meer informatie over officiële Certbot haakt documentatie vast

Automatisering, vernieuwing, scripting

Als u validatie van DNS-uitdagingen wilt automatiseren, is dit momenteel niet mogelijk met vanila certbot. Update: enige automatisering is mogelijk met de Certbot-haken.

We hebben dus een eenvoudige plug-in gemaakt die scripting ondersteunt met DNS-automatisering. Het is beschikbaar als certbot-external-auth.

pip install certbot-external-auth

Het ondersteunt DNS, HTTP, TLS-SNI-validatiemethoden. U kunt het gebruiken in de handler-modus of in de JSON-uitvoermodus.

Handler-modus

In de afhandelingsmodus roept de certbot + plugin externe hooks op (een programma, shell-script, python, ...) om de validatie en installatie uit te voeren. In de praktijk schrijf je een eenvoudig handler / shell-script dat inputargumenten krijgt - domein, token en de wijziging in DNS maakt. Wanneer de handler is voltooid, gaat certbot verder met validatie zoals gebruikelijk.

Dit geeft u een extra flexibiliteit, vernieuwing is ook mogelijk.

Handler-modus is ook compatibel met Gedehydrateerde DNS-hooks (voorheen letsencrypt.sh). Er zijn al veel DNS-hooks voor veelvoorkomende providers (bijv. CloudFlare, GoDaddy, AWS). In de repository is er een README met uitgebreide voorbeelden en voorbeeldhandlers.

Voorbeeld met Gedehydrateerde DNS-haak:

certbot \
    --text --agree-tos --email you@example.com \
    --expand --renew-by-default \
    --configurator certbot-external-auth:out \
    --certbot-external-auth:out-public-ip-logging-ok \
    -d "bristol3.pki.enigmabridge.com" \
    --preferred-challenges dns \
    --certbot-external-auth:out-handler ./dehydrated-example.sh \
    --certbot-external-auth:out-dehydrated-dns \
    run 

JSON-modus

Een andere plug-inmodus is de JSON-modus. Het produceert één JSON-object per regel. Dit maakt een meer gecompliceerde integratie mogelijk - bijv. Ansible of een of andere deployment manager roept certbot op. Communicatie vindt plaats via STDOUT en STDIN. Cerbot produceert JSON-object met gegevens om de validatie uit te voeren, bijvoorbeeld

certbot \
    --text --agree-tos --email you@example.com \
    --expand --renew-by-default \
    --configurator certbot-external-auth:out \
    --certbot-external-auth:out-public-ip-logging-ok \
    -d "bristol3.pki.enigmabridge.com" \
    --preferred-challenges dns \
    certonly 2>/dev/null

{"cmd": "perform_challenge", "type": "dns-01", "domain": "bs3.pki.enigmabridge.com", "token": "3gJ87yANDpmuuKVL2ktfQ0_qURQ3mN0IfqgbTU_AGS4", "validation": "ejEDZXYEeYHUxqBAiX4csh8GKkeVX7utK6BBOBshZ1Y", "txt_domain": "_acme-challenge.bs3.pki.enigmabridge.com", "key_auth": "3gJ87yANDpmuuKVL2ktfQ0_qURQ3mN0IfqgbTU_AGS4.tRQM98JsABZRm5-NiotcgD212RAUPPbyeDP30Ob_7-0"}

Nadat de DNS is bijgewerkt, stuurt de beller een nieuwe regel naar STDIN van de certbot om aan te geven dat deze kan doorgaan met validatie.

Dit maakt automatisering en certificaatbeheer mogelijk vanaf de centrale beheerserver. Voor installatie kunt u certificaten over SSH gebruiken.

Zie voor meer informatie de readme en voorbeelden op certbot-external-auth GitHub.

EDIT: Er is ook een nieuw blogpost beschrijving van het DNS-validatieprobleem en het gebruik van plug-ins.

EDIT: we werken momenteel aan de tweevoudige validatie van Ansible, we zullen snel af zijn.


154
2017-10-29 13:00



Wanneer u een website naar een andere server migreert, wilt u mogelijk een nieuw certificaat voordat u de A-record omschakelt. U kunt de handmatige methode gebruiken (certbot certonly --preferred-challenges dns -d example.com) voor het eerste verzoek. Na het testen en omschakelen van het A-record, gebruikt u de algemene webroot-methode (certbot certonly webroot -d example.com -w /path/to/webroot) met exact dezelfde domeinnaam (en) als voorheen. Als het goed wordt gedaan, erkent certbot het bestaande certificaat / config en worden de verlengingsinstellingen bijgewerkt, zodat het certificaat in de toekomst automatisch wordt verlengd. - marcovtwout
Het werkt, Pas op voor AWS Firewall op EC2-niveau - jruzafa
Ik weet zeker wat --manual-public-ip-logging-ok betekent ... de documentatie is cryptisch en alle voorbeelden die er zijn, leggen het niet uit ... inclusief deze. - Rondo
Heeft het vernieuwingsproces telkens een nieuw TXT-record nodig? - Old Geezer
@OldGeezer Blijkbaar wel. Ik startte het proces en vroeg me een TXT-record te maken met andere inhoud dan de vorige keer. - Dario Fumagalli


Ik was in staat om de dehydrated client om een ​​certificaat te verkrijgen met behulp van DNS-validatie.

https://github.com/lukas2511/dehydrated

./dehydrated --cron --domain my.domain.example.com --hook ./hook.route53.rb --challenge dns-01

U moet de juiste DNS-validatiehaak voor uw domein gebruiken, maar er zijn een paar opties beschikbaar als voorbeelden:

https://github.com/lukas2511/dehydrated/wiki/Examples-for-DNS-01-hooks


37
2018-02-18 21:45



Dit werkte heel goed voor mij. Het enige voorbehoud dat ik zou toevoegen is dat ik een paar van de edelsteenafhankelijkheden moest installeren zoals gedefinieerd in de route53.rb haak script. - jmreicha


Vanaf vandaag ondersteunt de officiële client het DNS-01 challenge-type (nog) niet.

Zien https://community.letsencrypt.org/t/status-of-official-letsencrypt-clients-dns-01-challenge-support/9427

Ik heb hier niet naar gekeken, dus ik weet het niet echt. Mijn begrip op hoog niveau was gewoon "nog geen ondersteuning in onze Python-client voor de DNS-uitdaging".

U kunt de voortgang volgen op deze PR. Als alternatief zijn er sommige klanten die het al ondersteunen.


10
2018-01-28 11:34





Ik schreef een haak script voor de letsencrypt.sh-client waarmee u Lets Encrypt DNS verificatie kunt gebruiken voor DNS-providers die geen api gebruiken (alias, handmatig invoeren en verificatie is vereist).

Je kunt het hier bekijken: https://github.com/jbjonesjr/letsencrypt-manual-hook


5
2018-05-22 16:55





Zoals vermeld in de vorige antwoorden, kunt u eenvoudig een domein verifiëren door DNS met dit:

  1. installeer de vereiste applicaties (onder Ubuntu): apt-get install -y git ruby letsencrypt git clone https://github.com/lukas2511/dehydrated.git git clone https://github.com/jbjonesjr/letsencrypt-manual-hook.git dehydrated/hooks/manual
  2. certificaat genereren met handmatige DNS-challenge-bevestiging voor www.example.com (vervangen door uw domein): ./dehydrated/dehydrated -c -t dns-01 -d www.example.com -k ./dehydrated/hooks /manual/manual_hook.rb

3
2017-12-16 10:36





Na het proberen van verschillende combinaties, is dit wat voor mij werkte uitgedroogd en letsencrypt-manual-hook git repositories. Als de onderstaande stappen voor u werken, vergeet dan niet ster deze repositories

OPMERKING: Dit is een aanvulling op de antwoorden van panticz.de en alexcline

~$ git clone https://github.com/lukas2511/dehydrated.git
~$ git clone https://github.com/jbjonesjr/letsencrypt-manual-hook.git dehydrated/hooks/manual
~$ cd dehydrated
~$ ./dehydrated --register --accept-terms
~$ ./dehydrated --cron --challenge dns-01 --domain your.domain.com --hook ./hooks/manual/manual_hook.rb
#
# !! WARNING !! No main config file found, using default config!
#
Processing your.domain.com
 + Signing domains...
 + Creating new directory /Users/vikas/dehydrated/certs/your.domain.com ...
 + Creating chain cache directory /Users/vikas/dehydrated/chains
 + Generating private key...
 + Generating signing request...
 + Requesting authorization for your.domain.com...
 + 1 pending challenge(s)
 + Deploying challenge tokens...
Checking for pre-existing TXT record for the domain: '_acme-challenge.your.domain.com'.
Create TXT record for the domain: '_acme-challenge.your.domain.com'. TXT record:
'gkIxxxxxxxIcAESmjF8pjZGQrrZxxxxxxxxxxx'
Press enter when DNS has been updated...

Je krijgt een hash (na het uitvoeren van de bovenstaande opdracht), maak een tekst opnemen in uw DNS. Controleer of het werkt door de onderstaande opdracht of uit te voeren GSuite Toolbox

~$ dig TXT _acme-challenge.your.domain.com. +short @8.8.8.8
"gkIxxxxxxxIcAESmjF8pjZGQrrZxxxxxxxxxxx"
~$

Druk nu op invoeren op de vraag. Dit werkte niet voor mij hoewel het TXT-record werd bijgewerkt. Ik moest op Ctrl + C drukken en de opdracht opnieuw uitvoeren.

~$ ./dehydrated --cron --challenge dns-01 --domain your.domain.com --hook ./hooks/manual/manual_hook.rb
#
# !! WARNING !! No main config file found, using default config!
#
Processing your.domain.com
 + Signing domains...
 + Generating private key...
 + Generating signing request...
 + Requesting authorization for your.domain.com...
 + 1 pending challenge(s)
 + Deploying challenge tokens...
Checking for pre-existing TXT record for the domain: '_acme-challenge.your.domain.com'.
Found gkIxxxxxxxIcAESmjF8pjZGQrrZxxxxxxxxxxx. match.
 + Responding to challenge for your.domain.com authorization...
Challenge complete. Leave TXT record in place to allow easier future refreshes.
 + Challenge is valid!
 + Requesting certificate...
 + Checking certificate...
 + Done!
 + Creating fullchain.pem...
 + Walking chain...
 + Done!
~$

Nu zijn uw openbare en privé-certificaten hier aanwezig.

$ ls certs/your.domain.com/privkey.pem certs/your.domain.com/fullchain-1517576424.pem

Vernieuwen (minimale wachttijd is 30 dagen), gewoon hetzelfde commando opnieuw.

~$ ./dehydrated --cron --challenge dns-01 --domain your.domain.com --hook ./hooks/manual/manual_hook.rb

2
2018-02-02 13:44





Hugo Landau schreef een ACME-klant in Go (https://github.com/hlandau/acme) die DNS-uitdagingen ondersteunt (met het nsupdate-protocol van BIND). Het werkt al minstens 18 maanden foutloos voor mij.


0
2017-07-03 18:07