見出し画像

Let's Encrypt でワイルドカード証明書の発行と更新(※2021.12.27追記)

以下の条件で自社の開発用サーバーに無料のSSLを導入した方法を残しておきます。

・AWS EC2(AmazonLinux2)+Apache2系+OpenSSL
・ViertuarlHostで複数サブドメインのマルチドメイン運用
・サブドメインは今後もどんどん追加される。なのでワイルドカードでSSLを取得したい。

無料のSSLといえば、ACMかLet'sEncryptがあげられますが、この開発サーバーを設定した時点ではACMはELBもしくはnginxでないと対応していなかったと思うので対象外となりました。ということでLet'sEncryptの証明書をインストールしていきます。

1. 開発サーバーにcertbotをインストール

certbotはLet'sEncryptのSSL証明書を取得するためのソフトウェアです。EPELリポジトリにありますのでEPELをインストールしてからcertbotをインストールします。

# amazon-linux-extras install -y epel
# yum install certbot

2. certbotで証明書の取得コマンド

# certbot certonly --manual --server https://acme-v02.api.letsencrypt.org/directory --preferred-challenges dns -d *.example.com -d example.com -m suzuki.reiko@xxx.xx --agree-tos

3. DNS認証用のレコードが返ってくるので、お使いのサービスでDNSレコードに設定して待つ。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:

_acme-challenge.example.com TXT [指定された文字列]

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

この時絶対にEnterを急いではいけない。絶対に。なんなら丸一日忘れていたっていい。ちなみにこのチャレンジは、接続が切れても有効なので、ルータに切断されても、コンソールを閉じてしまっても、同じコマンドを再度たたけば同じTXTレコードで応答してきます。決して急いでエンターを押してDNSレコード設定し直しにならないようにご注意ください。

お名前.comのDNSレコード反映って、年々遅くなりませんか?私の場合はたっぷり1時間待ってもチャレンジ失敗!となったので、最低2時間、と思って寝かせたんですがそれでもだめで4時間くらい放置しましたが駄目だったので悔しすぎて地団駄を踏みました。
DNSの反映状況は以下のコマンドをLinux上で叩いて確認します。

$ dig -t TXT _acme-challenge.example.com @8.8.8.8

ちなみに8.8.8.8はGoogleが無償で提供している「Google Public DNS」のIPアドレスです。あくまで目安で、ここでレコードが確認できてもLet'sEncryptのサーバーがそれを参照してるかどうかはわからないので長めに時間を置いてください。

※追記2021.12.27
DNSチャレンジが2回出るようになっていました。

------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:

Tm0zQ0rOxxxxxxxTqj1wH7Vlzvpk0rSForfac3lc2IA

Before continuing, verify the record is deployed.
(This must be set up in addition to the previous challenges; do not remove,
replace, or undo the previous challenge tasks yet. Note that you might be
asked to create multiple distinct TXT records with the same name. This is
permitted by DNS standards.)
-------------------------------------------------------
Press Enter to Continue

Enterキーを押すと、もう一つチャレンジのテキストが出現します。これは、どうやら *.example.comと、example.comの2つあるから2つ設定しろってことらしいです。この場合、先に設定したTXTを削除するのではなくて、追加で指定されたTXTレコードを設定します。そしてまたしばし待ちます。

4. Enterキーを押して証明書発行完了

Enterキーを押して、チャレンジ成功するとなんやかや英語で出ますが「Congratulations!」の文字を発見したら成功です。

(略)
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
(略)

下記ディレクトリに証明書が保存されす。
/etc/letsencrypt/live/example.com

# ls /etc/letsencrypt/live/example.com/
cert.pem  chain.pem  fullchain.pem  privkey.pem  README

5. Apacheの「ssl.conf」に証明書を設定する。

SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

6. Apacheを再起動する

# systemctl restart httpd.service

証明書の更新について

ワイルドカード・マルチドメインの認証についてはDNSレコード設定が絡むため自動化できません。DNSレコード設定がコマンドで自動化ができるようなDNSサービスをお使いでしたらすべてのステップをシェルプログラムにしてcronで実行できるようです。

お名前.comのDNSサービスの場合、設定を自動化できないので3ヶ月に1回手動で上記の2.3.4.6.のステップを同じように実行すればオーケーです。

最後に

この記事のサムネイルが野生動物なのは「ワイルド」にひっかけている為です。

この記事が気に入ったらサポートをしてみませんか?