環境 CentOS Stream release 9 Apache/2.4.57 (CentOS Stream) Xserver VPS
certbotコマンドの実行(DNS登録前提)
certbotコマンドを利用してLet’s Encryptのサーバー証明書を発行します。
certbot certonly \ --server https://acme-v02.api.letsencrypt.org/directory \ --preferred-challenges dns \ -d newsite.com \ -d *.newsite.com \ --agree-tos \ --manual-public-ip-logging-ok \ -m info@newsite.com
上のコマンド実行で newsite.com のみならず、site1.newsite.com や site2.newsite.com 等のサブドメインにも有効な証明書を取得できる。
一つ一つのサイトドメイン毎に証明書を取得するなど七面倒くさいことなどやってられないのでこのコマンド内容さえ覚えておけば事足りる。
Yes/No の問いかけに y Enter で応えて進んでいくと Please deploy a DNS TXT record under the name: と with the following value: が表示される。
これらの値をサイトデータを置いているサーバーの DNS に設定する。
Please deploy a DNS TXT record under the name: _acme-challenge.newsite.com. // サーバーの DNS に設定 with the following value: **************-****************** // TXT の値に設定 Before continuing, verify the TXT record has been deployed. Depending on the DNS provider, this may take some time, from a few seconds to multiple minutes. You can check if it has finished deploying with aid of online tools, such as the Google Admin Toolbox: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.webrydays.net. Look for one or more bolded line(s) below the line ';ANSWER'. It should show the value(s) you've just added. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Press Enter to Continue
重要なのは Press Enter to Continue が表示されて Enter キーを押すタイミングで、DNS を設定したからといっても実際に設定内容が反映されるには時間が掛かる。つまり反映された頃合いを見て実行しなければならない。https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.newsite.com でDNS TXT の設定が反映されているか確認しろとあるが、反映されているにも関わらず Enter したらドメインの認証に失敗した旨を示すメッセージが表示され、証明書の取得に失敗したので、たいして役に立たない。
厄介なのは TXT の値はコマンドを実行する度に新しく生成される点で、失敗する度にDNS TXT の値を設定し直さなければならないというループに陥ってしまうことだ。
多少、多めに間を置いてから実行するのが無難。
使用しているターミナルソフトによっては無操作時間に応じて勝手にログオフする機能を無効にするか延長するかの処理が必要かも。それが出来なければ定期的にスクロールするなど、何らかの操作をする必要があるかも。
結局、20分位経ってから Enter で無事、証明書を取得できた。
Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/newsite.com/fullchain.pem Key is saved at: /etc/letsencrypt/live/newsite.com/privkey.pem This certificate expires on 2024-11-10. These files will be updated when the certificate renews.
ssl.comfの設定
<VirtualHost *:443> SSLEngine on SSLProtocol All -SSLv2 -SSLv3 -TLSv1 ServerName newsite.com DocumentRoot "/var/www/html/newsite" SSLCertificateFile /etc/letsencrypt/live/newsite.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/newsite.com/privkey.pem <Directory "/var/www/html/newsite"> AllowOverride All Allow from all </Directory> ErrorLog logs/newsite-ssl_error_log CustomLog logs/newsite-ssl_access_log combined </VirtualHost>
httpd リスタート
systemctl restart httpd
https でアクセスできれば成功
証明書の更新を定期実行させる
crontab -e
定期実行コマンドを貼り付ける
0 1 1 * * certbot renew --post-hook systemctl restart httpd
:wq Enter で保存 (上記は毎月1日の 1:00 に証明書を更新させる設定)