Let’s Encrypt の SSL 証明書を DNS-01 で取得する方法

本記事では、Let’s Encrypt、CloudFlare、DNS-01(DNS による認証)についての説明は一切ありません。また、インフラ初心者が執筆している(覚書)のでご注意ください。

通常、Let’s Encrypt の SSL 証明書を取得する場合、Certbot(旧 letsencrypt)というコマンドラインツールを使用します。ググッて出てくる情報も、Certbot を使用した方法の方が多いと思います。Certbot でも DNS-01 を使用して証明書を取得することは可能ですが、初回のみ手動で DNS レコードを変更しないといけない、またはサードパーティ製のプラグインを使用するなど若干面倒です。

そこで、Certbot の代わりに、dehydrated(旧 letsencrypt.sh)というスクリプトを使用します。dehydrated は Let’s Encrypt の SSL 証明書を取得するサードパーティ製のコマンドラインツールです。Certbotとは全くの別物なので注意してください。また、DNS-01 を使用して SSL 証明書を取得する場合、別途フックスクリプト(プラグイン)が必要です。

DNS-01 を使用できる DNS サービスは、外部から API などで DNS レコードの書き換えが可能な DNS サービスであれば、DNS-01 を使用した SSL 証明書の取得は可能です。本記事では CloudFlare を使用した方法を紹介しますが、AWS Route53 などでも可能です。詳しくは Examples for DNS 01 hooks をご覧ください。

CloudFlare の API Key を取得する

CloudFlare の My Account ページにアクセスします。そのままページをスクロールすると API Key という項目があり、右側に View API Key というボタンがあるのでクリックします。表示された API Key をメモしておいてください。

dehydrated のインストール

フックスクリプト(プラグイン)のインストール

インストールされている Python のバージョンを確認します。

インストールされている Python のバージョンに合った方を実行します。

設定ファイルを作成する

dehydrated の各種設定ファイルを作成します。

本体の設定ファイルを作成する

変更前 変更後
#CHALLENGETYPE=”http-01″ CHALLENGETYPE=”dns-01″
#BASEDIR=$SCRIPTDIR BASEDIR=/usr/local/letsencrypt.sh
#HOOK= HOOK=”${BASEDIR}/hooks/cloudflare/hook.py”
#CONTACT\_EMAIL= CONTACT\_EMAIL=”[email protected]

1番下に以下を追加します。

SSL 証明書を発行するドメインリストを作成する

ドメイン毎に改行し、サブドメインは半角スペースで区切って入力します。

DHPARAM を生成する

DHPARAM の生成は結構時間が掛かります。コーヒーでも飲みながら、一休みしているのがいいと思います(笑)

ルート証明書とクロスルート証明書を取得する

Root Certificates

OCSP Stapling に使用するパラメータファイルを作成する

Nginx では ssl_trusted_certificate ディレクティブに指定するファイルです。

TLS Session Ticket に使用する鍵を作成する

Nginx では ssl_session_ticket_key ディレクティブに指定するファイルです。

SSL 証明書の自動更新のために Cron 登録をする

Let’s Encrypt の証明書の有効期間は、発行から90日間です。90日毎に手作業で証明書を再発行するのは手間なので、Cron を使って自動更新させます。

スクリプトを作成する

以下をコピペします。

スクリプトに実行権限を付与する

crontabでJobを登録する

以下は、毎月1日の午前4時に実行されるようにする例です。

各種証明書

内容 ファイル
サーバー証明書 /usr/local/dehydrated/certs/example.com/cert.pem
中間証明書 /usr/local/dehydrated/certs/example.com/chain.pem
サーバ証明書 + 中間証明書 /usr/local/dehydrated/certs/example.com/fullchain.pem
秘密鍵 /usr/local/dehydrated/certs/example.com/privkey.pem
ルート証明書 + クロスルート証明書 https://letsencrypt.org/certificates/

参考サイト

この記事が気に入ったら
いいね ! しよう

Twitter で

Written by くっくる

WordPressを使ったウェブサイトの構築・HTMLコーディングの受託案件を中心に埼玉県にて活動中。バイラルメディア風にFacebook pageのいいね!ボタンを設置できるVA Social Buzzをはじめ、複数のWordPressプラグインを公開している。共著書として「エンジニアのためのWordPress開発入門」がある。

View all author posts →

コメントを残す