【Let's Encrypt】さくらのクラウドのDNSで「DNS-01 Challenge」を使ってみた

 last update 2020年7月28日

すでにネット上に情報が溢れてるネタなんですが、保守的なウチでもようやく有料のTLS証明書じゃなく、無料のLet's Encrypt なんぞを使ってみようか、と思い始めまして。

で、本番系のドメイン認証の方法は「HTTP-01 challenge」で良いかな、と思ってるんですが、本番系の初回の証明書取得やテスト系の証明書をどうしようか、と調べてみたら、DNS の TXT レコードでドメイン認証できる「DNS-01 challenge」なんて方法を知ったので試してみました。

今回は、CentOS 7.8 向けの自分用メモになります。

さくらのクラウドでAPIキーを作成する

うちでは「さくらのクラウド」のDNSを使っているので、まず最初に、さくらのクラウド側で API キーを作成しておきます。

この API キーは、certbot が DNS の TXT レコードに書き込みをするのに必要なものです。

「DNS の TXT レコードに書き込めるなら、確かにそのドメインの所有者やろ」という認証方法ですね。

さくらのクラウドでAPIキーを発行するには、「さくらのクラウド ホーム」画面 → 左の「APIキー」から対象アカウントを選択 → APIキーを「追加」します。

APIキー編集画面では、APIキーの種類を「リソース操作APIキー」に、アクセスレベルを「設定編集」にして「作成」します。

APIキーを作成すると、画面上に「アクセストークン」と「アクセストークンシークレット」が表示されるので、控えておきます。

次にサーバー側に certbot と、certbot-dns-sakuracloud パッケージをインストールします。(※ epel が有効になっていない場合は別途有効にしてください。)

$ sudo yum -y --enablerepo=epel install certbot
$ sudo yum -y --enablerepo=epel install certbot-dns-sakuracloud

さくらのクラウドのAPIキーをファイルに書いておきます。

$ sudo vi .sakura

書き方は以下のとおり。

dns_sakuracloud_api_token = 'ここにアクセストークン'
dns_sakuracloud_api_secret = 'ここにアクセストークンシークレット'Code language: JavaScript (javascript)

権限を固くしておきます。

$ sudo chmod 600 .sakura

certbot + DNS-01 Challenge で証明書を取得します。

$ sudo certbot certonly --dns-sakuracloud \
  --dns-sakuracloud-credentials ~/.sakura \
  -d www.example.com \
  -d example.com \
  -m contact@example.com \
  --manual-public-ip-logging-ok \
  --agree-tosCode language: PHP (php)

あとは、DNS の TXT レコードにトークンを書く → DNS の伝播を待つ → 証明書を取得、までを自動で行ってくれます。

取得した証明書は、以下のパスに格納されます。

/etc/letsencrypt/live/www.example.com

また、次回以降は以下のコマンドで証明書の更新が可能です。

$ sudo certbot renew

renew が使えるのは、以下のパスに certbot の設定ファイルが出来ている前提になりますが、これは、先の手動実行時に自動で作成されるので便利。

/etc/letsencrypt/renewal/www.example.com.conf

適切な権限設定をするとは言え、API キーを配置して DNS 情報を書き換える「DNS-01 Challenge」を本番系のWEBサーバーで直接扱うのはセキュリティ的にどうかと思いますが、この方法であれば DNS の A レコードが向いていない端末・サーバー上でも Let's Encrypt の証明書を入手できる、ということで、シーンによっては大変便利と思います。

Aレコードが向いていて、かつ、まだ WEB サーバー起動前なら Standalone モードを使えばいいとは思うんですが。

ちなみに、どうしても本番系で使いたい場合は、証明書インストール予定のWEBサーバー以外で別途、証明書を取得しておいて、WEBサーバーへ証明書を移送するのが良いんじゃないでしょうか。

Hatena Pocket Line

コメントを記入