Let's Encryptが以下を発表しました:
ACME DNSチャレンジのサポートを有効にしました
./letsencrypt-auto
DNSチャレンジドメイン検証を使用して新しい証明書を生成するにはどうすればよいですか?
編集
私が意味する:http/https
ターゲットドメインのDNSゾーンに特定のTXTレコードを追加してドメイン所有権を証明できる新しく発表された機能(2015-01-20)を使用して、ポートバインディングを回避するにはどうすればよいですか?
Let's Encryptが以下を発表しました:
ACME DNSチャレンジのサポートを有効にしました
./letsencrypt-auto
DNSチャレンジドメイン検証を使用して新しい証明書を生成するにはどうすればよいですか?
編集
私が意味する:http/https
ターゲットドメインのDNSゾーンに特定のTXTレコードを追加してドメイン所有権を証明できる新しく発表された機能(2015-01-20)を使用して、ポートバインディングを回避するにはどうすればよいですか?
回答:
現在、手動モードのcertbot LetsEncryptクライアントでもDNS検証を実行できます。自動化も可能です(以下を参照)。
手動プラグインを使用して、手動検証を実行できます。
certbot -d bristol3.pki.enigmabridge.com --manual --preferred-challenges dns certonly
その後、Certbotは、検証を続行するために、ドメインのTXTレコードを手動で更新する指示を提供します。
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レコードを更新したら、Enterキーを押します。certbotは続行し、LetsEncrypt CAがチャレンジを検証すると、証明書は通常どおり発行されます。
また、対話性を最小限に抑え、certbotの質問に答えるために、より多くのオプションを備えたコマンドを使用することもできます。手動プラグインは、非インタラクティブモードをまだサポートしていないことに注意してください。
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
手動プラグインは非インタラクティブモードで実行されるため、更新は機能しません。詳細については、Certbotの公式ドキュメントを参照してください。
新しいCertbotのバージョンでは、使用することができますフックを、例えば--manual-auth-hook
、--manual-cleanup-hook
。フックは、タスクを実行するためにCertbotによって実行される外部スクリプトです。
情報は、検証するドメイン、チャレンジトークンなどの環境変数で渡されます。バール: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
独自のハンドラーを作成するか、既存のハンドラーを使用できます。たとえば、Cloudflare DNSの場合など、多くのハンドラーを使用できます。
Certbotの公式フックドキュメントの詳細
DNSチャレンジの検証を自動化する場合、現在、vanila certbotでは不可能です。更新:Certbotフックを使用すると、一部の自動化が可能です。
このようにして、DNSオートメーションを使用したスクリプトをサポートするシンプルなプラグインを作成しました。certbot-external-authとして利用可能です。
pip install certbot-external-auth
DNS、HTTP、TLS-SNI検証方法をサポートしています。ハンドラーモードまたはJSON出力モードで使用できます。
ハンドラーモードでは、certbot +プラグインは外部フック(プログラム、シェルスクリプト、pythonなど)を呼び出して検証とインストールを実行します。実際には、入力引数(ドメイン、トークン、DNSの変更)を取得する単純なハンドラー/シェルスクリプトを記述します。ハンドラーが終了すると、certbotは通常どおり検証を続行します。
これにより、柔軟性が向上し、更新も可能です。
ハンドラモードもと互換性のある脱水 DNSフック(前者letsencrypt.sh)。一般的なプロバイダー(CloudFlare、GoDaddy、AWSなど)には既に多くのDNSフックがあります。リポジトリには、広範な例とハンドラーの例を含むREADMEがあります。
脱水 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
別のプラグインモードはJSONモードです。1行に1つのJSONオブジェクトを生成します。これにより、より複雑な統合が可能になります。たとえば、Ansibleやいくつかのデプロイメントマネージャーがcertbotを呼び出しています。通信は、STDOUTおよびSTDINを介して実行されます。Cerbotは、検証を実行するデータを含むJSONオブジェクトを生成します。たとえば、
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が更新されると、呼び出し側はcertbotのSTDINに改行文字を送信して、検証を続行できることを通知します。
これにより、中央管理サーバーからの自動化と証明書管理が可能になります。インストールのために、SSH経由で証明書を展開できます。
詳細については、certbot-external-auth GitHub のreadmeおよび例を参照してください。
編集:DNS検証の問題とプラグインの使用法を説明する新しいブログ投稿もあります。
編集:私たちは現在、Ansible 2ステップ検証に取り組んでいますが、まもなく終了します。
certbot certonly --preferred-challenges dns -d example.com
最初の要求には手動の方法()を使用できます。Aレコードをテストして切り替えた後certbot certonly webroot -d example.com -w /path/to/webroot
、以前とまったく同じドメイン名を使用して一般的なwebrootメソッド()を使用します。正しく行われた場合、certbotは既存の証明書/構成を認識し、更新設定を更新するため、証明書は将来自動的に更新されます。
dehydrated
クライアントを使用して、DNS検証を使用して証明書を取得できました。
https://github.com/lukas2511/dehydrated
./dehydrated --cron --domain my.domain.example.com --hook ./hook.route53.rb --challenge dns-01
ドメインに対して正しいDNS検証フックを使用する必要がありますが、例として使用可能なオプションがいくつかあります。
https://github.com/lukas2511/dehydrated/wiki/Examples-for-DNS-01-hooks
route53.rb
フックスクリプトで定義されたいくつかのgem依存関係をインストールする必要があったことです。
現在、公式クライアントはDNS-01チャレンジタイプをサポートしていません(まだ)。
https://community.letsencrypt.org/t/status-of-official-letsencrypt-clients-dns-01-challenge-support/9427を参照してください
私はこれを見ていないので、私は本当に知りません。私の高度な理解は、「DNSチャレンジに対するPythonクライアントでのサポートはまだありません」でした。
私が書いたフックスクリプトのためのletsencrypt.shクライアント使用することができます(別名、手動入力と検証が必要です)を使用するためのAPIを提供していないDNSプロバイダの暗号化DNS検証できるようにします。
ここで確認できます:https : //github.com/jbjonesjr/letsencrypt-manual-hook
前の回答で述べたように、次のようにしてDNSでドメインを簡単に確認できます。
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
./dehydrated/dehydrated -c -t dns-01 -d www.example.com -k ./dehydrated/hooks /manual/manual_hook.rb
さまざまな組み合わせを試した後、これが脱水およびletsencrypt-manual-hook gitリポジトリを使用してうまくいきました。以下の手順で問題が解決した場合は、これらのリポジトリにスターを付けることを忘れないでください
注:これはpanticz.deおよび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...
ハッシュを取得し(上記のコマンドを実行した後)、DNSにTXTレコードを作成します。以下のコマンドまたはGSuite Toolboxを実行して、動作することを確認してください
~$ dig TXT _acme-challenge.your.domain.com. +short @8.8.8.8
"gkIxxxxxxxIcAESmjF8pjZGQrrZxxxxxxxxxxx"
~$
次に、プロンプトでEnterキーを押します。TXTレコードは更新されましたが、これはうまくいきませんでした。Ctrl + Cを押して、コマンドを再度実行する必要がありました。
~$ ./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!
~$
これで、パブリック証明書とプライベート証明書がここにあります。
$ ls certs/your.domain.com/privkey.pem certs/your.domain.com/fullchain-1517576424.pem
更新するには(最小待機時間は30日です)、同じコマンドを再度実行します。
~$ ./dehydrated --cron --challenge dns-01 --domain your.domain.com --hook ./hooks/manual/manual_hook.rb
Hugo LandauはGo(https://github.com/hlandau/acme)でDNSチャレンジ(BINDのnsupdateプロトコルを使用)をサポートするACMEクライアントを作成しました。少なくとも18か月間、私にとって完璧に機能していました。