Pertanyaan Bagaimana cara menggunakan Let's Encrypt DNS challenge validation?


Let's Encrypt memiliki diumumkan mereka memiliki:

Mengaktifkan dukungan untuk tantangan DNS ACME

Bagaimana saya membuatnya ./letsencrypt-auto menghasilkan sertifikat baru menggunakan validasi domain tantangan DNS?

EDIT
Maksud saya: Bagaimana saya menghindari http/https pengikatan port, dengan menggunakan fitur yang baru diumumkan (2015-01-20) yang memungkinkan Anda membuktikan kepemilikan domain dengan menambahkan data TXT tertentu di zona DNS dari domain target?


122
2018-01-21 22:13




Catatan sampingan: Certbot (ini adalah nama baru untuk klien letsencrypt) sekarang memungkinkan otentikasi berbasis webroot secara default. - Pierre Prinetti


Jawaban:


Saat ini dimungkinkan untuk melakukan validasi DNS juga dengan certbot LetsEncrypt client dalam mode manual. Otomasi juga mungkin (lihat di bawah).

Plugin manual

Anda dapat melakukan verifikasi manual - dengan plugin manual.

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

Certbot kemudian akan memberi Anda instruksi untuk memperbarui catatan TXT untuk domain secara manual agar dapat melanjutkan validasi.

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

Setelah Anda memperbarui catatan DNS, tekan Enter, certbot akan melanjutkan dan jika LetsEncrypt CA memverifikasi tantangan, sertifikat dikeluarkan seperti biasanya.

Anda juga dapat menggunakan perintah dengan lebih banyak opsi untuk meminimalkan interaktivitas dan menjawab pertanyaan certbot. Perhatikan bahwa plugin manual belum mendukung mode non-interaktif.

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

Pembaruan tidak bekerja dengan plugin manual karena berjalan dalam mode non-interaktif. Info lebih lanjut di Certbot resmi dokumentasi.

Perbarui: pengait manual

Dalam versi Certbot baru Anda dapat menggunakan kait, mis. --manual-auth-hook, --manual-cleanup-hook. Kait adalah skrip eksternal yang dijalankan oleh Certbot untuk melakukan tugas.

Informasi diteruskan dalam variabel lingkungan - misalnya, domain untuk memvalidasi, token tantangan. 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

Anda dapat menulis handler Anda sendiri atau menggunakan yang sudah ada, ada banyak tersedia, misalnya, untuk Cloudflare DNS.

Info lebih lanjut tentang Certbot resmi dokumentasi kait

Otomatisasi, Pembaruan, Pembuatan Skrip

Jika Anda ingin mengotomatiskan validasi tantangan DNS, saat ini tidak mungkin dengan certbot vanila. Pembaruan: beberapa otomatisasi dimungkinkan dengan kait Certbot.

Kami menciptakan sebuah plugin sederhana yang mendukung scripting dengan otomatisasi DNS. Ini tersedia sebagai certbot-external-auth.

pip install certbot-external-auth

Ini mendukung metode validasi DNS, HTTP, TLS-SNI. Anda dapat menggunakannya dalam mode handler atau mode keluaran JSON.

Modus pawang

Dalam mode handler, plugin certbot + memanggil kait eksternal (program, skrip shell, python, ...) untuk melakukan validasi dan instalasi. Dalam prakteknya Anda menulis skrip sederhana handler / shell yang mendapat argumen input - domain, token dan membuat perubahan dalam DNS. Ketika handler selesai, certbot melanjutkan dengan validasi seperti biasa.

Ini memberi Anda fleksibilitas ekstra, pembaruan juga dimungkinkan.

Mode handler juga kompatibel dengan Kering sekali Kait DNS (sebelumnya letsencrypt.sh). Sudah ada banyak kait DNS untuk penyedia umum (mis., CloudFlare, GoDaddy, AWS). Di repositori ada README dengan contoh yang luas dan contoh handler.

Contoh dengan Kering sekali Kait DNS:

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 

Mode JSON

Mode plugin lain adalah mode JSON. Ini menghasilkan satu objek JSON per baris. Ini memungkinkan integrasi yang lebih rumit - mis., Ansible atau beberapa manajer penerapan memanggil certbot. Komunikasi dilakukan melalui STDOUT dan STDIN. Cerbot menghasilkan objek JSON dengan data untuk melakukan validasi, mis.,

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

Setelah DNS diperbarui, pemanggil mengirim karakter baris baru ke STDIN dari certbot untuk menandakannya dapat dilanjutkan dengan validasi.

Ini memungkinkan otomatisasi dan manajemen sertifikat dari server manajemen pusat. Untuk instalasi, Anda dapat menyebarkan sertifikat melalui SSH.

Untuk info lebih lanjut silakan merujuk ke readme dan contoh di certbot-external-auth GitHub.

EDIT: Ada juga yang baru posting blog menjelaskan masalah validasi DNS dan penggunaan plugin.

EDIT: saat ini kami mengerjakan Ansible 2-step validation, akan segera dinonaktifkan.


154
2017-10-29 13:00



Saat memigrasikan situs web ke server lain, Anda mungkin menginginkan sertifikat baru sebelum mengganti A-record. Anda dapat menggunakan metode manual (certbot certonly --preferred-challenges dns -d example.com) untuk permintaan awal. Setelah menguji dan mengganti A-record, gunakan metode webroot umum (certbot certonly webroot -d example.com -w /path/to/webroot) menggunakan nama domain yang sama persis seperti sebelumnya. Jika dilakukan dengan benar, certbot akan mengenali sertifikat / konfigurasi yang ada dan akan memperbarui pengaturan perpanjangan, sehingga sertifikat akan secara otomatis diperbarui di masa mendatang. - marcovtwout
Berhasil, Waspadai AWS Firewall di level EC2 - jruzafa
Saya yakin ingin tahu apa - manual-publik-ip-logging-ok berarti .... dokumentasi sangat rahasia tentang hal itu dan semua contoh di luar sana yang menggunakannya tidak menjelaskan ... termasuk yang satu ini. - Rondo
Apakah proses pembaruan memerlukan catatan TXT baru setiap waktu? - Old Geezer
@OldGeezer Ternyata, ya. Saya memulai proses dan meminta saya untuk membuat catatan TXT dengan konten yang berbeda dari yang terakhir kali. - Dario Fumagalli


Saya bisa menggunakan dehydrated klien untuk memperoleh sertifikat menggunakan validasi DNS.

https://github.com/lukas2511/dehydrated

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

Anda harus menggunakan hook validasi DNS yang benar untuk domain Anda, tetapi ada beberapa opsi yang tersedia sebagai contoh:

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


37
2018-02-18 21:45



Ini bekerja sangat baik untuk saya. Satu-satunya peringatan yang akan saya tambahkan adalah bahwa saya harus menginstal beberapa dependensi permata yang didefinisikan dalam route53.rb skrip kait. - jmreicha


Mulai hari ini, klien resmi tidak mendukung jenis tantangan DNS-01 (belum).

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

Saya belum melihat ini jadi saya tidak benar-benar tahu. Pemahaman tingkat tinggi saya hanya "tidak ada dukungan pada klien Python kami untuk tantangan DNS".

Anda dapat mengikuti perkembangannya di PR ini. Atau, ada beberapa klien yang sudah mendukungnya.


10
2018-01-28 11:34





Saya menulis a skrip kait Untuk klien letsencrypt.sh yang memungkinkan Anda menggunakan Lets Encrypt DNS verification untuk penyedia DNS yang tidak menyediakan api untuk digunakan (alias, entri manual dan verifikasi diperlukan).

Anda dapat memeriksanya di sini: https://github.com/jbjonesjr/letsencrypt-manual-hook


5
2018-05-22 16:55





Seperti yang disebutkan dalam jawaban sebelumnya, Anda dapat dengan mudah memverifikasi domain dengan DNS dengan ini:

  1. instal aplikasi yang diperlukan (di bawah 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. menghasilkan sertifikat dengan konfirmasi tantangan DNS manual untuk www.example.com (ganti dengan domain Anda): ./dehydrated/dehydrated -c -t dns-01 -d www.example.com -k ./dehydrated/hooks /manual/manual_hook.rb

3
2017-12-16 10:36





Setelah mencoba berbagai kombinasi, inilah yang berhasil untuk saya gunakan kering sekali dan letsencrypt-manual-hook repositori git. Jika langkah-langkah di bawah ini bekerja untuk Anda, jangan lupa bintang repositori ini

CATATAN: Ini merupakan tambahan untuk jawaban dari panticz.de dan 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...

Anda akan mendapatkan hash (setelah menjalankan perintah di atas), buat a txt rekam di DNS Anda. Pastikan berfungsi dengan menjalankan perintah di bawah atau GSuite Toolbox

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

Sekarang, tekan memasukkan pada prompt. Ini tidak bekerja untuk saya meskipun catatan TXT telah diperbarui. Saya harus menekan Ctrl + C dan menjalankan perintah lagi.

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

Sekarang, sertifikat publik dan pribadi Anda ada di sini.

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

Untuk memperbarui (waktu tunggu minimum adalah 30 hari), hanya perintah yang sama lagi.

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

2
2018-02-02 13:44





Hugo Landau menulis klien ACME di Go (https://github.com/hlandau/acme) yang mendukung tantangan DNS (dengan protokol nsupdate BIND). Sudah bekerja dengan sempurna untuk saya selama setidaknya 18 bulan.


0
2017-07-03 18:07