前回の記事では、SvelteアプリをNginxでデプロイしドメインからアクセスできるようにしました。今回は、Let’s Encryptを使ったSSL証明書の設定とそのトラブルシューティング方法を解説します。
まず、SSHを使ってサーバーにログインします。
ssh root@your-linode-ip
#ユーザーとIPは必要に応じて変更
Certbotをインストール
CertbotはLet’s EncryptからSSL証明書を取得し、自動更新を管理するツールです。
以下のコマンドでインストールします:
sudo apt install certbot python3-certbot-nginx
SSL証明書を取得
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
例:
sudo certbot --nginx -d asameshicode.com -d www.asameshicode.com
成功時の出力例:
Successfully deployed certificate for asameshicode.com
Successfully deployed certificate for www.asameshicode.com
Congratulations! You have successfully enabled HTTPS on https://asameshicode.com and https://www.asameshicode.com
これで、HTTPSが有効になります。
Certbotの自動更新を確認
Let’s Encryptの証明書は90日間有効です。Certbotは証明書の自動更新をサポートしています。
Certbotのステータス確認
以下のコマンドでCertbotのタイマー(certbot.timer
)が有効か確認します。
sudo systemctl status certbot.timer
有効時の出力例:
● certbot.timer - Run certbot twice daily
Loaded: loaded (/usr/lib/systemd/system/certbot.timer; enabled)
Active: active (waiting)
Certbotの有効化
もし有効でない場合、以下のコマンドを実行してCertbotを有効化します:
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
自動更新のテスト
証明書の自動更新が動作するかをシミュレーションします。
以下のコマンドを実行:
sudo certbot renew --dry-run
このコマンドでエラーがなければ、自動更新が正しく設定されています。
Nginxの自動再読み込みスクリプト
自動更新後にNginxを再読み込みするスクリプトを用意することで、更新された証明書を自動的に適用できます。以下のスクリプトを作成しておけば、更新のたびに手動で再読み込みする必要がなくなります。
スクリプトファイル作成:
以下のコマンドでスクリプトを作成します:
sudo nano /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
スクリプト内容:
#!/bin/bash
systemctl reload nginx
実行権限の付与:
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
動作確認: 証明書更新をシミュレートしてスクリプトの動作を確認:
sudo certbot renew --dry-run
トラブルシュート
Let’s Encryptの認証エラー
以下のようなエラーが表示された場合、問題の原因を特定します。
エラー例:
Domain: asameshicode.com
Type: unauthorized
Detail: Invalid response from http://asameshicode.com/.well-known/acme-challenge/...
原因と対策
DNS設定が正しくない
dig
コマンドを使用して、ドメインが正しいIPアドレス(IPv4とIPv6の両方)を指していることを確認します。
dig asameshicode.com
dig -t AAAA asameshicode.com
必要に応じて、ドメイン管理サービスでDNS設定を修正します。
Nginxの設定が不適切
- Certbotは
.well-known/acme-challenge/
ディレクトリにアクセスします。このパスがNginxで正しく設定されているか確認してください。
ファイアウォールやセキュリティ設定
ポート80(HTTP)と443(HTTPS)が許可されているか確認します。
sudo ufw allow 80
sudo ufw allow 443
sudo ufw reload
DNS設定の確認方法
以下のコマンドで、ドメインが正しいIPアドレスを指しているか確認します:
IPv4アドレス確認
dig asameshicode.com
IPv6アドレス確認
dig -t AAAA asameshicode.com
まとめ
- CertbotでSSL証明書を取得してHTTPSを有効化します。
- 証明書の自動更新が設定されているか確認し、Nginxの再読み込みを自動化します。
- トラブルシューティング手順を参考に問題を解決します。
これで、ドメインにHTTPSを適用し、安全な通信が実現できますね。