Frage Wie verwende ich Let's Encrypt DNS-Challenge-Validierung?


Let's Encrypt hat angekündigt Sie haben:

Unterstützung für die ACME-DNS-Herausforderung aktiviert

Wie mache ich ./letsencrypt-auto Generieren eines neuen Zertifikats mithilfe der DNS-Challenge-Domain-Validierung?

BEARBEITEN
Ich meine: Wie vermeide ich http/https Portbindung, indem Sie die neu angekündigte Funktion (2015-01-20) verwenden, mit der Sie den Besitz der Domain nachweisen können, indem Sie einen bestimmten TXT-Eintrag in der DNS-Zone der Zieldomäne hinzufügen?


122
2018-01-21 22:13


Ursprung


Randnotiz: Certbot (Dies ist der neue Name für den Letsencrypt-Client.) Erlaubt nun standardmäßig die Webroot-basierte Authentifizierung. - Pierre Prinetti


Antworten:


Zur Zeit ist es möglich, eine DNS - Validierung auch mit dem certbot LetsEncrypt Client im manuellen Modus. Eine Automatisierung ist ebenfalls möglich (siehe unten).

Manuelles Plugin

Sie können entweder eine manuelle Überprüfung durchführen - mit dem manuellen Plugin.

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

Certbot stellt Ihnen dann eine Anleitung zur Verfügung, um einen TXT-Datensatz für die Domäne manuell zu aktualisieren, um mit der Validierung fortzufahren.

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

Sobald Sie den DNS-Eintrag aktualisiert haben, drücken Sie die Eingabetaste. Certbot wird fortgesetzt. Wenn LetsEncrypt CA die Anfrage überprüft, wird das Zertifikat wie gewohnt ausgestellt.

Sie können auch einen Befehl mit mehr Optionen verwenden, um Interaktivität zu minimieren und certbot Fragen zu beantworten. Beachten Sie, dass das manuelle Plugin den nicht interaktiven Modus noch nicht unterstützt.

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

Die Erneuerung funktioniert nicht mit dem manuellen Plugin, da es im nicht interaktiven Modus läuft. Mehr Infos beim offiziellen Certbot Dokumentation.

Update: manuelle Haken

In der neuen Certbot-Version können Sie verwenden Haken, z.B. --manual-auth-hook, --manual-cleanup-hook. Die Hooks sind externe Skripte, die von Certbot zur Ausführung der Aufgabe ausgeführt werden.

Informationen werden in Umgebungsvariablen übergeben - z. B. zu validierende Domäne, Abfrage-Token. 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

Sie können Ihren eigenen Handler schreiben oder bereits vorhandene verwenden, es sind viele verfügbar, z. B. für Cloudflare-DNS.

Mehr Infos zum offiziellen Certbot Haken Dokumentation

Automatisierung, Erneuerung, Skripting

Wenn Sie die DNS-Challenge-Validierung automatisieren möchten, ist dies derzeit mit vanila certbot nicht möglich. Update: Eine gewisse Automatisierung ist mit den Certbot Hooks möglich.

Wir haben daher ein einfaches Plugin erstellt, das Scripting mit DNS-Automatisierung unterstützt. Es ist verfügbar als certbot-external-auth.

pip install certbot-external-auth

Es unterstützt DNS, HTTP, TLS-SNI-Validierungsmethoden. Sie können es entweder im Handler-Modus oder im JSON-Ausgabemodus verwenden.

Handler-Modus

Im Handler-Modus ruft das certbot + -Plugin externe Hooks (ein Programm, Shell-Skript, Python, ...) auf, um die Validierung und Installation durchzuführen. In der Praxis schreiben Sie ein einfaches Handler / Shell-Skript, das Eingabeargumente - Domäne, Token und die Änderung in DNS erhält. Wenn der Handler fertig ist, fährt certbot wie üblich mit der Validierung fort.

Dies gibt Ihnen eine zusätzliche Flexibilität, Erneuerung ist auch möglich.

Handler-Modus ist auch kompatibel mit Dehydriert DNS-Hooks (früher letsencrypt.sh). Es gibt bereits viele DNS-Hooks für gängige Anbieter (z. B. CloudFlare, GoDaddy, AWS). Im Repository befindet sich eine README mit umfangreichen Beispielen und Beispielhandlern.

Beispiel mit Dehydriert DNS-Hook:

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

Ein weiterer Plugin-Modus ist der JSON-Modus. Es erzeugt ein JSON-Objekt pro Zeile. Dies ermöglicht eine kompliziertere Integration - z. B. ruft Ansible oder irgendein Deployment Manager certbot auf. Die Kommunikation erfolgt über STDOUT und STDIN. Cerbot erzeugt ein JSON-Objekt mit Daten, um die Validierung durchzuführen, z.

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"}

Sobald der DNS aktualisiert ist, sendet der Aufrufer ein neues Zeilenzeichen an STDIN des Zertifikats, um zu signalisieren, dass es mit der Validierung fortfahren kann.

Dies ermöglicht die Automatisierung und Zertifikatsverwaltung vom zentralen Management-Server aus. Zur Installation können Sie Zertifikate über SSH bereitstellen.

Für weitere Informationen lesen Sie bitte die Readme und Beispiele auf certbot-external-auth GitHub.

EDIT: Es gibt auch ein neues Blogeintrag Beschreibung des DNS-Validierungsproblems und der Verwendung des Plugins.

EDIT: wir arbeiten derzeit an Ansible 2-Schritt-Validierung, wird bald aus sein.


154
2017-10-29 13:00



Wenn Sie eine Website auf einen anderen Server migrieren, möchten Sie möglicherweise ein neues Zertifikat, bevor Sie den A-Datensatz wechseln. Sie können die manuelle Methode (certbot certonly --preferred-challenges dns -d example.com) für die erste Anfrage. Verwenden Sie nach dem Testen und Wechseln des A-Datensatzes die allgemeine Webroot-Methode (certbot certonly webroot -d example.com -w /path/to/webroot) Verwenden Sie genau die gleichen Domain-Namen wie zuvor. Wenn dies korrekt ausgeführt wird, erkennt certbot das vorhandene Zertifikat / Konfiguration und aktualisiert die Erneuerungseinstellungen, sodass das Zertifikat in Zukunft automatisch erneuert wird. - marcovtwout
Es funktioniert, Vorsicht vor AWS Firewall auf EC2-Ebene - jruzafa
Ich bin sicher, dass ich gerne wissen möchte, was --manual-public-ip-logging-ok heißt ... die Dokumentation ist kryptisch und alle Beispiele, die es benutzen, erklären das nicht ... einschließlich dieses. - Rondo
Erfordert der Erneuerungsprozess jedes Mal einen neuen TXT-Datensatz? - Old Geezer
@OldGeezer Anscheinend tut es das. Ich habe den Prozess gestartet und mich gebeten, einen TXT-Datensatz mit anderen Inhalten als beim letzten Mal zu erstellen. - Dario Fumagalli


Ich konnte das benutzen dehydrated Client, um ein Zertifikat mithilfe der DNS-Validierung zu erhalten.

https://github.com/lukas2511/dehydrated

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

Sie müssen den richtigen DNS-Validierungs-Hook für Ihre Domain verwenden, es stehen jedoch einige Optionen als Beispiele zur Verfügung:

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


37
2018-02-18 21:45



Das hat sehr gut für mich funktioniert. Der einzige Vorbehalt, den ich hinzufügen würde, ist, dass ich ein paar der in der route53.rb Haken Skript. - jmreicha


Ab heute unterstützt der offizielle Client den Abfragetyp DNS-01 (noch) nicht.

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

Ich habe mir das nicht angesehen, also weiß ich es nicht wirklich. Mein High-Level-Verständnis war nur "keine Unterstützung in unserem Python-Client für die DNS-Herausforderung noch".

Sie können den Fortschritt bei verfolgen diese PR. Alternativ gibt es einige Kunden das unterstützt es schon.


10
2018-01-28 11:34





Ich schrieb ein Haken Skript für die letsencrypt.sh Client Damit können Sie DNS-Verifizierung von Lets Encrypt für DNS-Provider verwenden, die keine API zur Verwendung bereitstellen (auch manuelle Eingabe und Verifizierung ist erforderlich).

Sie können es hier überprüfen: https://github.com/jbjonesjr/letsencrypt-manual-hook


5
2018-05-22 16:55





Wie in den vorherigen Antworten erwähnt, können Sie eine Domain einfach nach DNS mit folgenden Kriterien überprüfen:

  1. installiere benötigte Anwendungen (unter 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. Zertifikat mit manueller DNS-Abfragebestätigung für www.example.com erstellen (durch Ihre Domain ersetzen): ./dehydrated/dehydrated -c -t dns-01 -d www.example.com -k ./dehydrated/hooks /manual/manual_hook.rb

3
2017-12-16 10:36





Nachdem ich verschiedene Kombinationen ausprobiert hatte, funktionierte das für mich dehydriert und letsencrypt-manual-hook Git-Repositories. Wenn die folgenden Schritte für Sie funktionieren, vergessen Sie nicht Star diese Repositories

HINWEIS: Dies ist zusätzlich zu den Antworten von panticz.de und 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...

Sie erhalten einen Hash (nachdem Sie den obigen Befehl ausgeführt haben), erstellen Sie ein TXT zeichne in deinem DNS auf. Stellen Sie sicher, dass es funktioniert, indem Sie den folgenden Befehl ausführen oder GSuite Toolbox

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

Jetzt drücken eingeben bei der Aufforderung. Dies funktionierte nicht für mich, obwohl der TXT-Datensatz aktualisiert wurde. Ich musste Strg + C drücken und den Befehl erneut ausführen.

~$ ./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!
~$

Jetzt sind Ihre öffentlichen und privaten Zertifikate hier anwesend.

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

Um zu erneuern (Mindestwartezeit ist 30 Tage), einfach denselben Befehl wiederholen.

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

2
2018-02-02 13:44





Hugo Landau schrieb einen ACME-Client in Go (https://github.com/hlandau/acme) die DNS-Herausforderungen unterstützt (mit dem Nsupdate-Protokoll von BIND). Es funktioniert seit mindestens 18 Monaten einwandfrei für mich.


0
2017-07-03 18:07