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レコードに設定して待つ。
この時絶対に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回出るようになっていました。
Enterキーを押すと、もう一つチャレンジのテキストが出現します。これは、どうやら *.example.comと、example.comの2つあるから2つ設定しろってことらしいです。この場合、先に設定したTXTを削除するのではなくて、追加で指定されたTXTレコードを設定します。そしてまたしばし待ちます。
4. Enterキーを押して証明書発行完了
Enterキーを押して、チャレンジ成功するとなんやかや英語で出ますが「Congratulations!」の文字を発見したら成功です。
下記ディレクトリに証明書が保存されす。
/etc/letsencrypt/live/example.com
# ls /etc/letsencrypt/live/example.com/
cert.pem chain.pem fullchain.pem privkey.pem README
5. Apacheの「ssl.conf」に証明書を設定する。
6. Apacheを再起動する
# systemctl restart httpd.service
証明書の更新について
ワイルドカード・マルチドメインの認証についてはDNSレコード設定が絡むため自動化できません。DNSレコード設定がコマンドで自動化ができるようなDNSサービスをお使いでしたらすべてのステップをシェルプログラムにしてcronで実行できるようです。
お名前.comのDNSサービスの場合、設定を自動化できないので3ヶ月に1回手動で上記の2.3.4.6.のステップを同じように実行すればオーケーです。
最後に
この記事のサムネイルが野生動物なのは「ワイルド」にひっかけている為です。
この記事が気に入ったらサポートをしてみませんか?