Ubuntu20.04でcertbot-dns-digitaloceanを使用してDNS検証を使用してLet’sEncrypt証明書を取得する方法
序章
Let’s Encrypt 証明書の大部分は、HTTP検証を使用して発行されます。これにより、単一のサーバーに証明書をインストールできます。 ただし、HTTP検証は、負荷分散されたWebサイトで使用する証明書の発行に常に適しているとは限りません。また、この検証を使用してワイルドカード証明書を発行することもできません。
DNS検証では、HTTPを介してコンテンツを提供するのではなく、DNSレコードを使用して証明書発行要求を検証できます。 これは、ロードバランサーの背後で実行されているWebサーバーのクラスター、またはインターネット経由で直接アクセスできないシステムに対して、証明書を同時に発行できることを意味します。
このチュートリアルでは、Certbotの certbot-dns-digitalocean フックを使用して、DigitalOceanAPIを介したDNS検証を使用してLet’sEncrypt証明書を発行します。
certbot-dns-digitaloceanツールを使用して、CertbotをDigitalOceanのDNS管理APIと統合し、証明書を要求したときに証明書検証レコードをオンザフライで自動的に構成できるようにすることができます。
certbot-dns-digitaloceanのもう1つの重要な利点は、ロードバランサーの背後で実行されている可能性がある、またはHTTP経由で直接アクセスできない個々のサーバーの証明書を発行するために使用できることです。 このような場合、すべてのサーバーに検証ファイルを設定しない限り、従来のHTTP証明書検証を使用することはできません。これは、不便な場合があります。 certbot-dns-digitaloceanツールは、内部システムやステージング環境など、インターネット経由でアクセスできないサーバーに対して証明書を発行する場合にも役立ちます。
certbot-dns-digitaloceanは、DNS検証を使用してのみ発行できるワイルドカード証明書も完全にサポートしています。
前提条件
このチュートリアルを完了するには、次のものが必要です。
-
Ubuntu 20.04を使用した初期サーバーセットアップに従ってセットアップされたUbuntu20.04サーバー(sudo非rootユーザーを含む)。
-
DigitalOceanアカウントを介して管理される、つまりDNSレコードを管理するためのドメイン名。 この特定の例では、
your_domain
とsubdomain.your_domain
、 としても*.your_domain
ただし、ワイルドカード証明書の場合は、必要に応じて他のドメインまたはサブドメイン用にこれを調整できます。 -
読み取りおよび書き込み権限を持つDigitalOceanAPIキー(パーソナルアクセストークン)。 作成するには、パーソナルアクセストークンの作成方法にアクセスしてください。
これらの準備ができたら、root以外のユーザーとしてサーバーにログインして開始します。
ステップ1—Certbotをインストールする
このステップでは、Let’sEncrypt証明書を発行および管理するプログラムであるCertbotをインストールします。
Certbotは公式のUbuntuAptリポジトリ内で利用できるため、デフォルトのシステムパッケージマネージャーを使用してインストールできます。
- sudo apt update
- sudo apt install certbot
インストールが完了したら、次のコマンドで確認できます。
- certbot --version
これにより、次のようなものが出力されます。
Outputcertbot 0.40.0
このステップでは、Certbotをインストールしました。 次に、acme-dns-certbotフックをダウンロードしてインストールします。
ステップ2—certbot-dns-digitaloceanのインストールと設定
基本のCertbotプログラムをインストールしたので、certbot-dns-digitaloceanをダウンロードしてインストールできます。これにより、CertbotはDigitalOceanDNS管理APIを使用してDNS検証モードで動作できるようになります。
手順1でインストールしたCertbot自体と同様に、certbot-dns-digitaloceanユーティリティはUbuntuのデフォルトリポジトリ内で利用できます。 ただし、Certbotリポジトリには、より確実に更新されたバージョンが含まれているため、可能な場合は常にこれを使用することをお勧めします。
certbot-dns-digitaloceanのパッケージをインストールして続行します。
- sudo apt install python3-certbot-dns-digitalocean
インストールが完了したら、前提条件の一部として生成したDigitalOceanAPIキー/パーソナルアクセストークンを含む構成ファイルを設定する必要があります。
を作成することから始めます creds.ini
プライベートな場所にあるファイル:
- touch ~/certbot-creds.ini
次に、サーバー上の他のユーザーがファイルを読み取れないようにするために、ファイルのアクセス許可を制限します。
- chmod go-rwx ~/certbot-creds.ini
最後に、テキストエディタを使用してファイルを開き、DigitalOceanアクセストークンを追加します。
- nano ~/certbot-creds.ini
ファイルの内容は次のようになります。
dns_digitalocean_token = your_digitalocean_access_token
完了したら、ファイルを保存して閉じます。
警告: DigitalOceanアクセストークンはDigitalOceanアカウントへのアクセスを許可するため、パスワードと同じように保護する必要があります。 誰とも共有したり、公開コードリポジトリにチェックインしたりしないでください。
この手順では、certbot-dns-digitaloceanユーティリティをダウンロードしてインストールし、APIクレデンシャルを含む構成ファイルを作成しました。
ステップ3—証明書の発行
このステップでは、CertbotとDigitalOceanAPIを使用して証明書を発行します。
最初の証明書を発行するには、次の引数を使用してCertbotを実行し、資格情報ファイルとドメインへの正しいパスを指定してください。
- sudo certbot certonly --dns-digitalocean --dns-digitalocean-credentials ~/certbot-creds.ini -d your_domain -d subdomain.your_domain
注: unsafe permissions on credentials configuration file
警告、これはファイルのアクセス許可が正しく制限されていないことを示しているため、サーバー上の他のユーザーがトークンにアクセスできます。 で再確認してください chmod
手順2のコマンド。
Certbotは、証明書を要求するのに数秒かかります。 次に、証明書が発行されたことを確認するメッセージが表示されます。
Output...
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your_domain/privkey.pem
...
証明書の発行に失敗した場合は、DNSの変更が反映されるのに十分な時間がなかったことが原因である可能性があります。 オプションで、DNS伝播遅延を増やして、検証DNSレコードが伝播し、Let’sEncryptによって取得される時間を増やすことができます。 遅延はデフォルトで10秒ですが、これを使用してこれを増やすことができます。 --dns-digitalocean-propagation-seconds
口論:
- sudo certbot certonly --dns-digitalocean --dns-digitalocean-credentials ~/certbot-creds.ini --dns-digitalocean-propagation-seconds 30 -d your_domain -d subdomain.your_domain
最後に、certbot-dns-digitaloceanを使用して、ドメインのワイルドカード証明書を発行することもできます。
- sudo certbot certonly --dns-digitalocean --dns-digitalocean-credentials ~/certbot-creds.ini -d \*.your_domain
注:場合によっては、同じホスト名に対して短期間に複数の証明書を要求すると、発行が失敗し始める可能性があります。 これは、レート制限とDNS存続時間(TTL)値が原因であり、新しいDNS変更の伝播に遅延が発生する場合があります。
これを軽減するには、TTLの期間を待つか、調整を検討することをお勧めします。 --dns-digitalocean-propagation-seconds
このステップの前半で詳しく説明したオプション。
このステップでは、certbot-dns-digitaloceanでCertbotを初めて使用し、最初の証明書を発行しました。
ステップ4—証明書の更新
この最後のステップでは、Certbotとcertbot-dns-digitaloceanを使用して証明書を更新します。
証明書の有効期限が近づくと、Certbotは自動的に証明書を更新できます。
- sudo certbot renew
更新プロセスは、ユーザーの操作なしで最初から最後まで実行できます。 また、初期セットアップ中に指定した構成オプションも記憶されます。
デフォルトでは、Certbotはこれを自動スケジュールシステムタスクとして実行します。つまり、証明書にそれ以上のメンテナンスは必要ありません。 関連するシステムサービスのステータスを印刷することで、スケジュールされたタスクが正しくインストールされていることを確認できます。 certbot.timer
:
- sudo systemctl status certbot.timer
これにより、次のようなものが出力されます。これは、ロードされたタスクが1日に2回実行されるようにスケジュールされていることを示しています。
Output● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Sun 2020-11-22 18:18:40 UTC; 2 weeks 6 days ago
Trigger: Sun 2020-12-13 7:17:57 UTC; 11h left
Nov 22 18:18:40 droplet1 systemd[1]: Started Run certbot twice daily.
ただし、証明書の有効期限が近づくまで待たずにこれが機能していることをテストするには、「ドライラン」をトリガーできます。 これにより、構成に実際の変更を加えることなく、更新プロセスがシミュレートされます。
標準を使用してドライランをトリガーできます renew
コマンドですが、 --dry-run
口論:
- sudo certbot renew --dry-run
これにより、次のようなものが出力され、更新プロセスが正しく機能していることが保証されます。
Output...
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator dns-digitalocean, Installer None
Renewing an existing certificate
Performing the following challenges:
dns-01 challenge for your_domain
dns-01 challenge for subdomain.your_domain
Waiting 10 seconds for DNS changes to propagate
Waiting for verification...
Cleaning up challenges
...
この最後のステップでは、Certbot内の自動更新プロセスをテストしました。
結論
このチュートリアルでは、certbot-dns-digitaloceanを使用してCertbotを設定し、DigitalOceanDNS管理APIでDNS検証を使用して証明書を発行します。
certbot-dns-digitaloceanについて詳しく知りたい場合は、ユーティリティの公式ドキュメントを確認してください。
または、DigitalOceanを使用してDNSレコードを管理していない場合は、 Ubuntu18.04でacme-dns-certbotを使用してDNS検証を使用してLet’sEncrypt証明書を取得する方法を確認してください。 certbot-dns-digitaloceanのプロバイダーに依存しない代替手段。
最後に、さらに技術的な読み物が必要な場合は、プロセスがどのように機能するかを概説している公式RFCドキュメントの関連セクションを確認して、ACMEDNS検証の詳細を掘り下げることができます。