新年あけましておめでとうございます。
旧年中はお世話になりました
本年もよろしくお願いいたします。
新年一本目の記事を投稿します。
そして自宅サーバ勢の皆様こんにちわ。
自宅のWebサーバをLet's Encryptでhttps化している諸兄にとっては既に既知の技術だと思いますが、私自身がちょくちょく使うので自分用にメモしました。
経緯
年の瀬も押し迫ったある日、自宅内のWebサーバにアクセスするとこんな画面が出てきました。

「あっ...(察し)」
ですよね。
そうなんです。
証明書の期限が切れたんです。
宅内なのでこのWebサーバはローカルIPアドレスで運用していますが、念のためhttpsで暗号化しています。
宅内なので無料でhttps化したくて表題にもある通りLet's Encryptを使っています。
宅内なのでWebサイト内の特定のファイルを外部から確認するhttp-01では穴開けたり面倒なのでDNS-01で証明書を発行しています。
ですのでDNS-01での証明書更新の手順です。
またしても前置きが長かったですが実際の作業は以下の通り2つのコマンドでおしまいです。
DNSサーバのレコード更新を含めてもとっても簡単です。
証明書更新のコマンド
certbotコマンドが実行できる場所であれば対象のWebサーバでなくてもOKですが、証明書ファイルがcertbotコマンドを実行したサーバ内に作成されるので証明書ファイルの移動が面倒であれば対象のWebサーバで実行した方が無難です。
sudo certbot certonly --manual --preferred-challenges dns -d "宅内WebサーバのFQDN"
このコマンドを実行すると実行したプロンプト画面で以下のような内容が出力されます。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name:
_acme-challenge."宅内WebサーバのFQDN"
with the following value:
"英数記号の乱数"
[ほかにもなんかいろいろ]
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
とでてきます。
この指示通りにTXTレコード(テキストレコード)を作ればOKです。
今回は更新なので、既に作成済みのTXTレコードを編集する作業です。
この時TXTレコードを作るDNSサーバがインターネット上に公開されているDNSサーバでないとダメです。
インターネット上にあるLet's EncryptのサーバがTXTレコード引けないと確認できないからです。
DNSサーバのTXTレコードの更新
我が家はAzure DNSを使っているので、画像でいうと以下の通りです。

ちょっと画面が細かいですが、赤字の部分ですね。
ここを変更して画面では見えていないですが下の方にある[適用]をクリックします。
証明書ファイルの保存場所(念のため)
以下のコマンドで証明書ファイルが更新されているか確認してください。
$ sudo ls -al /etc/letsencrypt/live/"宅内WebサーバのFQDN"
合計 12
drwxr-xr-x 2 root root 4096 12月 29 09:16 .
drwx------ 3 root root 4096 7月 1 19:39 ..
-rw-r--r-- 1 root root 692 7月 1 19:39 README
lrwxrwxrwx 1 root root 46 12月 29 09:16 cert.pem -> ../../archive/"宅内WebサーバのFQDN"/cert3.pem
lrwxrwxrwx 1 root root 47 12月 29 09:16 chain.pem -> ../../archive/"宅内WebサーバのFQDN"/chain3.pem
lrwxrwxrwx 1 root root 51 12月 29 09:16 fullchain.pem -> ../../archive/"宅内WebサーバのFQDN"/fullchain3.pem
lrwxrwxrwx 1 root root 49 12月 29 09:16 privkey.pem -> ../../archive/"宅内WebサーバのFQDN"/privkey3.pem
$
今回は更新作業なのでWebサーバの設定ファイルもこの証明書ファイルのパスを指していると思いますが念のため確認しておくことを推奨します。
Webサーバの再起動
OSごと再起動してしまっても良いのですが、Webサーバ機能のみを再起動する場合は以下のコマンドです。
(Webサーバのサービスがnginxの場合)
sudo systemctl restart nginx
確認
先ほどまで警告が出ていた宅内サイトにちゃんとアクセスできますね。

まとめ
DNS-01でのLet's Encrypt証明書の更新はとっても簡単。
- コマンドは2つ
- DNSサーバのレコード更新作業
でした。
本日はここまで。