Let's Encrypt DNS challenge validation nasıl kullanılır?


160

En Şifrele, sahip olduklarını açıkladı :

ACME DNS mücadelesine destek verildi

./letsencrypt-autoDNS meydan etki alanı doğrulamasını kullanarak nasıl yeni bir sertifika oluşturabilirim?

EDIT
Demek istediğim: http/httpsHedef etki alanının DNS bölgesine belirli bir TXT kaydı ekleyerek etki alanı sahipliğini kanıtlamanıza olanak tanıyan yeni açıklanan özelliğini (2015-01-20) kullanarak bağlantı noktasının bağlanmasını nasıl önleyebilirim ?


3
Yan not: Certbot (bu, letsencrypt istemcisi için yeni addır) şimdi varsayılan olarak webroot tabanlı kimlik doğrulamasına izin veriyor.
Pierre Prinetti

Yanıtlar:


203

Şu anda manuel modda LetsEncrypt müşteri sertifikasıyla da bir DNS doğrulaması yapmak mümkün . Otomasyon da mümkündür (aşağıya bakınız).

Manuel eklenti

Bir manuel doğrulama gerçekleştirebilirsiniz - manuel eklenti ile.

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

Sertifika daha sonra doğrulama işlemine devam etmek için etki alanı için bir TXT kaydını el ile güncellemeniz için bir talimat verecektir.

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

DNS kaydını güncelledikten sonra Enter tuşuna basın, sertifika devam edecek ve LetsEncrypt CA zorluğu doğrularsa, sertifika normal şekilde verilir.

Ayrıca etkileşimi en aza indirmek ve sertifika görevlilerinin sorularını yanıtlamak için daha fazla seçenek içeren bir komut kullanabilirsiniz. Manuel eklentinin henüz etkileşimli olmayan modu desteklemediğini unutmayın.

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

Yenileme, etkileşimli olmayan modda çalıştığı için manuel eklenti ile çalışmaz. Resmi Certbot belgelerinde daha fazla bilgi .

Güncelleme: manuel kancalar

Yeni Certbot sürümünde kullanabileceğiniz kancaları örneğin --manual-auth-hook, --manual-cleanup-hook. Kancalar Certbot tarafından görevi yerine getirmek için yürütülen harici komut dosyalarıdır.

Bilgi ortam değişkenlerinde iletilir - örneğin, doğrulanacak etki alanı, belirteç belirleme. 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

Kendi işleyicinizi yazabilir veya zaten mevcut olanı kullanabilirsiniz; örneğin, Cloudflare DNS için mevcut olan birçok şey vardır.

Resmi Certbot kanca belgeleri hakkında daha fazla bilgi

Otomasyon, Yenileme, Komut Dosyası

DNS zorluklarının onaylanmasını otomatikleştirmek istiyorsanız, vanila certbot ile şu anda mümkün değildir. Güncelleme: Certbot kancalarıyla bazı otomasyon mümkündür.

Böylece DNS otomasyonuyla komut dosyası çalıştırmayı destekleyen basit bir eklenti oluşturduk. Sanki kullanılabilir certbot-dış-auth .

pip install certbot-external-auth

DNS, HTTP, TLS-SNI doğrulama yöntemlerini destekler. İşleyici modunda veya JSON çıkış modunda kullanabilirsiniz.

İşleyici modu

İşleyici modunda, certbot + eklentisi doğrulama ve kurulum için harici kancaları (bir program, kabuk betiği, python, ...) çağırır. Uygulamada girdi argümanlarını alan basit bir işleyici / kabuk betiği yazıyorsunuz - domain, token ve DNS'de değişiklik yapan. İşleyici bittiğinde, certbot her zamanki gibi doğrulamaya devam eder.

Bu size ekstra bir esneklik sağlar, yenilenmesi de mümkündür.

İşleyici modu, Susuzlaştırılmış DNS kancalarıyla da uyumludur (eski letsencrypt.sh). Ortak sağlayıcılar için zaten birçok DNS kancası var (örneğin, CloudFlare, GoDaddy, AWS). Depoda geniş örneklere ve örnek işleyicilere sahip bir README vardır.

Susuz DNS kancası ile örnek :

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 modu

Başka bir eklenti modu JSON modudur. Satır başına bir JSON nesnesi üretir. Bu daha karmaşık bir entegrasyon sağlar - örneğin, Ansible veya bazı dağıtım yöneticileri sertifika görevlisini çağırıyor. İletişim STDOUT ve STDIN ile yapılır. Cerbot, doğrulamayı gerçekleştirmek için veri içeren JSON nesnesi üretir, örn.

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

DNS güncellendiğinde, arayan doğrulama işlemine devam edebileceğini belirtmek için sertifikanın STDIN'sine yeni satır karakteri gönderir.

Bu merkezi yönetim sunucusundan otomasyon ve sertifika yönetimi sağlar. Kurulum için sertifikaları SSH üzerinden dağıtabilirsiniz.

Daha fazla bilgi için lütfen certbot-external-auth GitHub hakkındaki benioku ve örneklere bakın .

EDIT: DNS doğrulama problemini ve eklenti kullanımını tanımlayan yeni bir blog yazısı var .

EDIT: şu anda Ansible 2 adımlı doğrulama üzerinde çalışıyoruz, yakında kapanacak.


Bir web sitesini başka bir sunucuya geçirirken, A kaydını değiştirmeden önce yeni bir sertifika isteyebilirsiniz. certbot certonly --preferred-challenges dns -d example.comİlk istek için manuel yöntemi ( ) kullanabilirsiniz . A kaydını test ettikten ve değiştirdikten sonra, certbot certonly webroot -d example.com -w /path/to/webrootdaha önce olduğu gibi aynı etki alanı adlarını kullanarak ortak webroot yöntemini ( ) kullanın. Doğru yapılırsa, sertifika sahibi mevcut sertifikayı / konfigürasyonu tanır ve yenileme ayarlarını günceller, böylece sertifika gelecekte otomatik olarak yenilenir.
marcovtwout

Çalışır, EC2 düzeyinde AWS Güvenlik Duvarı sakının
jruzafa

- manüel-public-ip-logging-ok'un ne anlama geldiğini bilmek istiyorum… belgeler bununla ilgili şifreli ve orada açıklayan tüm örnekleri açıklamıyor ... bunun da dahil olduğu.
Rondo

Yenileme işlemi her seferinde yeni bir TXT kaydı gerektiriyor mu?
Old Geezer

1
@Rondo Manuel modu etkileşimli olarak kullanarak bir sertifika talep ettiğinizde, bu bilgi istemi "NOT: Bu makinenin IP'si bu sertifikanın isteğiyle halka açık olarak kaydedilecektir. sunucunuz, lütfen bunun için iyi olduğunuzdan emin olun. " Bu seçenek bu bilgi istemi için evet diyor.
muru

39

dehydratedİstemciyi DNS doğrulamasını kullanarak bir sertifika almak için kullanabildim .

https://github.com/lukas2511/dehydrated

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

Etki alanınız için doğru DNS doğrulama kancasını kullanmanız gerekir, ancak örnek olarak kullanılabilen birkaç seçenek vardır:

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


Bu benim için gerçekten iyi çalıştı. Ekleyeceğim tek uyarı route53.rbkanca kodunda tanımlanan mücevher bağımlılıklarından birkaçını kurmak zorunda olduğum .
jmreicha

10

Bugün itibariyle, resmi müşteri (henüz) DNS-01 meydan okuma türünü desteklemiyor.

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

Buna hiç bakmadım, bu yüzden gerçekten bilmiyorum. Benim üst düzey anlayışım yalnızca "Python istemcimizde henüz DNS mücadelesi için destek olmadı" idi.

İlerlemeyi bu PR'da takip edebilirsiniz . Alternatif olarak, onu zaten destekleyen bazı müşteriler var.




3

Önceki cevaplarda da belirtildiği gibi, bir etki alanını DNS ile aşağıdaki şekilde kolayca doğrulayabilirsiniz:

  1. Gerekli uygulamaları kurun (Ubuntu altında): 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. www.example.com için manuel DNS sorgulama onayına sahip sertifika oluşturun (etki alanınızla değiştirin): ./dehydrated/dehydrated -c -t dns-01 -d www.example.com -k ./dehydrated/hooks /manual/manual_hook.rb

3

Farklı kombinasyonlar denedikten sonra, bu benim için dehidrate ve letsencrypt-manual-hook git depolarını kullanarak işe yaradı . Aşağıdaki adımlar sizin için işe yararsa, bu havuzlara yıldız eklemeyi unutmayın

NOT: Bu panticz.de ve alexcline cevaplarına ek olarak verilmiştir.

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

Bir karma alırsınız (yukarıdaki komutu çalıştırdıktan sonra), DNS'inizde bir TXT kaydı oluşturun . Aşağıdaki komutu çalıştırarak ya da GSuite Toolbox'ı çalıştırarak çalıştığından emin olun.

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

Şimdi, istemde enter tuşuna basın . TXT kaydı güncellendiğinde bu benim için işe yaramadı. Ctrl + C tuşlarına basmalı ve komutu tekrar çalıştırmalıydım.

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

Şimdi, kamu ve özel bütçeleriniz burada mevcut.

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

Yenilemek (minimum bekleme süresi 30 gündür), yine aynı komut.

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

1

Hugo Landau Go’da bir ACME istemcisi yazdı ( https://github.com/hlandau/acme ), DNS zorluklarını destekleyen (BIND'in başlangıç ​​protokolü ile). En az 18 aydır benim için kusursuz çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.