web-dev-qa-db-ja.com

certbotとDNSチャレンジを使用してドメインを更新する

スタンドアロン方式を使用して、いくつかのドメイン用にいくつかのSSL証明書を作成しました。サーバー統合なしで、証明書のみに関心があります。

彼らは今更新のためです。だから、私は走った:

certbot -d example.com --manual --preferred-challenges dns certonly

そして、各ドメインの指示に従いました(各ドメインに必要なDNSエントリを追加します)。このようにして、サーバーを停止して新しい証明書を取得する必要がなくなりました。

私の(漠然とした)すべてについての理解は、DNSチャレンジを使用して証明書を自動的に更新する現在の方法がないことです。または、「手動」の方法で証明書を自動的に更新できないのでしょうか?

とにかく、私はこのスクリプトを書きました。

#!/bin/bash

for i in renewal/*;do
  n=${i:8:-5};
  echo $n;
  # echo "\n" | certbot --text --agree-tos -d $n --manual --preferred-challenges dns --expand --renew-by-default  --manual-public-ip-logging-ok certonly;
done

この時点で、renewalディレクトリには、すべてのドメインが次のようになっています。

オーセンティケーター=手動

そして:

pref_challs = dns-01

質問:

  • さて...「certbot renew」を実行すると、スクリプトを使用せずにすべて自動的に更新されますか?

  • DNSチャレンジを使用して新しい証明書を実際に作成するにはどうすればよいですか?

9
Merc

更新された回答(以下の元の回答を参照)

私の元の回答では、renewコマンドを使用するときに、指定したスクリプトは必要ないという事実に焦点を当てました。ただし、renewコマンドがこのシナリオに実際に適用できるかどうかは確認していません。

コメントのcdhowieとbobpaulのように、certbot renewは非インタラクティブモードであり、dnsチャレンジと組み合わせて、--manual-auth-hookパラメータを介してスクリプトを提供する必要があります。このスクリプトは、TXTレコードを設定できる必要があります。 --manual-cleanup-hookパラメータを使用して、後でクリーンアップする別のスクリプトを提供することもできます。

これらのパラメーターを指定すると、プロセス全体が対話なしで自動的に実行されます。

これらのパラメーターを指定しない場合、certbotは失敗します。

/opt/certbot # certbot renew --force-renewal
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/foobar.w9f.de.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Could not choose appropriate plugin: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',)

手動モードで証明書を更新する場合は、証明書の取得に使用したコマンドを再実行する必要があります。この場合、certonlyコマンドは現在の証明書/構成を調べず、代わりに-dパラメーターまたは対話モードでドメイン名を指定する必要があるため、スクリプトは素晴らしいオプションです。 。


「certbot renew」を実行すると、スクリプトを使用せずにすべて自動的に更新されますか?

TL; DR:はい、そうです。

certbotのドキュメント を見てみましょう。

バージョン0.10.0以降、Certbotは、インストールされているすべての証明書の期限切れが近いかどうかを確認し、更新を試みる更新アクションをサポートしています。最も単純な形式は単純です

certbot更新

ここまでは順調ですね。

このコマンドは、30日以内に期限が切れる、以前に取得した証明書を更新しようとします。

これはあなたの質問に答えるはずです。注意:証明書を別のディレクトリに移動する状況でcertbotがどれだけうまく処理できるかはわかりません。

同じ段落の後半:

他のプラグインまたはオプションを指定しない限り、証明書が最初に発行されたときに使用されたものと同じプラグインとオプションが更新の試行に使用されます。 certonlyとは異なり、renewは複数の証明書に作用し、それぞれが有効期限が近いかどうかを常に考慮します。

あ、はい; certbotは、スクリプトを使用せずにすべての証明書を更新する必要があります。


最初にDNSチャレンジを使用して実際に新しい証明書を作成するにはどうすればよいですか?

投稿の最初に投稿したコマンドの何が問題になっていますか? certbot -d example.com --manual --preferred-challenges dns certonlyは、dnsチャレンジを使用してexample.comの証明書を取得します。

証明書を作成する手順は次のとおりです。

  • 投稿したcertbotコマンドを実行します
  • コマンドがDNSを表示するまで待ちますTXTレコード
  • TXTレコードを作成する
  • certbotコマンドを続行します
  • 指定したドメインの証明書を取得します
  • TXTレコードを削除します(作成にのみ必要であり、更新には新しいレコードが必要であるため)

その完全なプロセスを自動化する場合は、いくつかの DNSプロバイダー をサポートする lego のようなツールを確認することをお勧めします。

4
malte