Let’s EncryptでSSLを設定する

前回の記事では、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

まとめ

  1. CertbotでSSL証明書を取得してHTTPSを有効化します。
  2. 証明書の自動更新が設定されているか確認し、Nginxの再読み込みを自動化します。
  3. トラブルシューティング手順を参考に問題を解決します。

これで、ドメインにHTTPSを適用し、安全な通信が実現できますね。

Leave a Comment