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サーバの再起動も必要です。
ここもできれば自動化しておきましょう。お忘れなく。
参考サイト
- DDNS Now
- DynamicDo
- [Certbot]https://certbot.eff.org/