CentOS7の無料ワイルドカード証明書の発行

https://letsencrypt.org/

Let's Encryptを使ったワイルドカード証明書について

【Let's Encrypt 総合ポータル】さんの
[ACME v2 とワイルドカード証明書の技術情報]を参考にワイルドカード証明書取得に必要な要件は
  • Certbotクライアントは[Version 0.22.0以上]
  • 本番環境の接続サーバーは
    [https://acme-v02.api.letsencrypt.org/directory]
  • テスト環境の接続サーバーは
    [https://acme-staging-v02.api.letsencrypt.org/directory]
  • DNSのTXTレコードを作成できること
となります。

Certbotのインストール

リポジトリの追加

yum -y install epel-release
コマンドで[epel]リポジトリをインストールします。
通常時に[epel]リポジトリを使いたくないのでenabled=0に変更します。

Certbotのインストール

yum --enablerepo=epel install certbot
コマンドで導入される[Certbot]のバージョンを確認します。
[Certbot]のバージョンが条件の0.22以上であることを確認する。
※上記では0.23.0-1.el7
[y]を入力しインストールを続行する。
パッケージ検証をするために[GPG署名]を使用します。その為に必要な鍵を取得することの許可を求められるので
[y]を入力しインストールを続行する。

Certbotの使い方

※最終的なオプションは末尾の「Certbotで使用するオプション(本番)」を確認ください。

Certbotのヘルプ

certbot -h
コマンドでcertbotのヘルプを確認します。
上記の簡易的なヘルプを見た感じ使うオプションは
[certonly]・[-d *.example.com,*.test.example.com]・[--manual]・[--test-cert(テスト環境)]・[-m example@example.com]
必要な要件のサーバー情報等が足りないので
certbot --help all
コマンドでcertbotの全ヘルプを確認します。
※長いのでかなり省略しています。
テスト環境の接続サーバーは
 [https://acme-staging-v02.api.letsencrypt.org/directory]
と記載がされているので[--test-cert]を使えば問題なしです。
しかし、本番環境の接続サーバーは
 [https://acme-v01.api.letsencrypt.org/directory]
と記載がありますのでデフォルトのサーバーでは証明書の取得ができません。
その為[--server https://acme-v02.api.letsencrypt.org/directory]と接続サーバーを指定する必要があります。
説明の順序が変わりましたが[--preferred-challenges]の説明を記載の通り[https://certbot.eff.org/docs/using.html#plugins]で確認すると
DNS pluginsを使用するときはChallenge typesに[dns-01]を指定すると記載があるため[--preferred-challenges dns-01]を指定します。
上記以外で必要と思われるオプションとして(default: Ask)と書かれている部分がいくつかありますが、実際にテストして必要なオプションのみ設定したいと思います。

Certbotで使用するオプション(テスト前)

Certbotのヘルプで確認したオプションをテスト環境サーバーで試してみます。
 certbot certonly -d *.example.com,*.test.example.com --manual -m example@example.com --preferred-challenges dns-01 --test-cert
コマンドの実行
登録時に承認を求められたのでキャンセルして、ログの確認すると規約の同意を求められたので[--agree-tos]オプションを追加し再実行する。
 certbot certonly -d *.example.com,*.test.example.com --manual -m example@example.com --preferred-challenges dns-01 --test-cert --agree-tos
コマンドの実行
予定外に証明書ができてしまいました(汗)
作成過程において省略可能な問い合わせは2つです。
ひとつ目は『Electronic Frontier』にメールアドレスを共有するか否か?
拒否権があります。[--no-eff-email]オプションを使用することで[N]と同じ効果がありそうです。
ふたつ目はサーバーのIPのログをとることを承認するか否か?
拒否権があるの試していませんが[--manual-public-ip-logging-ok]オプションを使用することで[Y]と同じ効果がありそうです。
最後にDNSレコードの作成を行います。
[_acme-challenge.test.example.com]に対し、TXTレコードを作成します。データ(value)は指示されたものを入力してください。
[_acme-challenge.example.com]に対し、TXTレコードを作成します。データ(value)は指示されたものを入力してください。
契約しているDNSサーバーによって時間は異なりますが、登録が完了すれば証明書が
 /etc/letsencrypt/live/example.com/
配下に作られます。

Certbotで使用するオプション(本番)

証明書発行テストを行う場合はテスト環境サーバーに接続します。
 certbot certonly -d *.example.com,*.test.example.com --manual -m example@example.com --preferred-challenges dns-01 --agree-tos --no-eff-email --manual-public-ip-logging-ok --test-cert
本物の証明書発行する場合は発行サーバーを指定して接続します。
 certbot certonly -d *.example.com,*.test.example.com --manual -m example@example.com --preferred-challenges dns-01 --agree-tos --no-eff-email --manual-public-ip-logging-ok --server https://acme-v02.api.letsencrypt.org/directory
※テスト証明書を発行→本物の証明書を発行の手順をする場合はテスト証明書を削除または退避させてください。本説明では削除いたします。
 rm -Rf /etc/letsencrypt/*
 certbot certonly -d *.example.com,*.test.example.com --manual -m example@example.com --preferred-challenges dns-01 --agree-tos --no-eff-email --manual-public-ip-logging-ok --server https://acme-v02.api.letsencrypt.org/directory ワイルド証明書を2つ含んだ証明書の発行に成功しました!
なお、証明書の更新は[certbot renew]コマンドで行います。cronを使って定期的(1週間ごとで十分)に実行すれば便利ですね。(2018年7月28日削除)

---2018年7月28日追記ここから---
証明書の更新を行う前に[certbot]の更新を行いましょう。
 yum --enablerepo=epel -y update certbot
次に、証明書の更新を行うのですが、DNS-01を使用して取得した証明書の場合は[TXTレコードを更新しなくてはならないため]証明書発行時のコマンドを使用します。
ちなみにTXTレコードを更新する方法があれば完全自動化も可能です。
参考にされた方ごめんなさい。検証時に[certbot renew --force-renewal]を行うべきでした。m(_~_)m
---2018年7月28日追記ここまで---

今更の告知ですが、証明書を作った機器はブロードバンドルータ配下(NAT)でプライベートIPで動作しています。
DNSレコードへの登録だけで証明書を発行できるというのは実サーバーにCertbotの導入をしなくてよいと言ったメリットもあります。
特にワイルドカード証明書の場合複数のサーバーに同一の証明書を更新する仕組みを別途作成することで利便性もあがると考えられます。

0 件のコメント :

コメントを投稿