Let's encrypt!! 2022

自宅サーバでLetsEncrypt

激安中華 PC BMAX B2をLinuxサーバにしたので、https接続をするべく、letsencryptで証明書を取得します。
今回はAPIサーバとして使うので、fastifyに組み込みます。

大雑把な流れは以下の通り。

  • DDNSで自宅アドレスにドメインを紐付ける
  • certbot インストール
  • ルータでポートを開放
  • cerrtbot実行(証明書発行)
  • pem のアクセス権を変更
  • https証明書として取り込む(fastify)
  • 自動更新

ここまで、すべて無料でできます。

DDNSで自宅アドレスにドメインを紐付ける

DDNSサービスで、自宅のIPアドレスに名前をつけます。
使うサービスによってやりかたは違いますが、プロバイダに割り当てられたIPアドレスに無料でサブドメインを割り当ててくれます。
DDNSサービス次第ですが、無料のものもけっこうあります。

この記事の例では、いつも利用させていただいているDDNS Nowを使いました。

独自ドメインを使いたい場合は有料プランが必要です。
DDNS Nowでは使えないようですが、DynamicDoなどでは有料プランで独自ドメインが使えます。

ReactやVueなどでフロントエンドの静的コンテンツ配信はFirebaseなどのホスティングサービスを用い、クラウドではなにかとお金がかかるAPIサーバだけ自宅にするのがおすすめです。

certbotのインストール

ACMEクライアントっていうのがあれば同じことはできるんですが、メジャーなCertbot(https://certbot.eff.org/)を使います。
ubuntu20用のドキュメントがあったので、そのまま使いました。

# snapのインストール
sudo snap install core; sudo snap refresh core

# 既存のものがあればアンインストール
sudo apt remove certbot

# snapを利用してcertbotのインストール
sudo snap install --classic certbot

# パスを通す
sudo ln -s /snap/bin/certbot /usr/bin/certbot

ルータでポートを開放

対象のマシンをWANに開放します。
ルータの80番ポートを対象サーバの80番ポートに向けてください。
またhttpsの443ポートも対象サーバに向けておきましょう。

cerrtbot実行(証明書発行)

ポートが開いたら証明書発行です。
80番ポートを使っているプログラムは閉じる必要があります。

# 証明書発行
sudo certbot certonly --standalone

使用するドメイン名を聞かれ、入力すれば証明書が発行されます。

証明書のアクセス権を設定

# rootしかアクセス権がないので、利用したいユーザでアクセス権を付与
sudo chmod +rx -R /etc/letsencrypt

# pemが表示できればOK
cat /etc/letsencrypt/live/nekoha.f5.si/fullchain.pem

証明書を読み込む

httpサーバに証明書を組み込みます。
nginx, apache, express, fastifyなどhttpサーバによってやり方は違いますが「https サーバ名」でググればすぐ出てきます。
ググったらすぐ出てきて、問題なくhttps接続できました!

証明書の自動更新

letsencryptの証明書は90日間有効です。期限が切れるとhttpsアクセスができなくなります。
rootユーザのcrontabに仕込んで、毎月1日に証明書を自動発行するようにします。

# rootユーザで実行予約
sudo crontab -e

# crontabの末尾に追加(毎月1日のAM4:00に実行)
0 4 1 * * certbot renew

自動で再発行をした場合は、証明書再読込のためにhttpサーバの再起動も必要です。
ここもできれば自動化しておきましょう。お忘れなく。

参考サイト

Subscribe to 猫好きが猫以外のことも書く

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe