NginxでLet's Encryptを使って無料SSL/TLS証明書を設定する方法
NginxサーバーにLet's Encryptで無料SSL/TLS証明書を導入する手順を解説。certbotを使った取得・自動更新方法も紹介。
はじめに
WebサイトをHTTPS化するためにはSSL/TLS証明書が必要です。有料の証明書もありますが、Let's Encryptを使えば無料で取得・運用できます。この記事では、NginxサーバーにLet's Encryptの証明書を設定する手順を、certbotを使って解説します。
前提条件
1. certbotのインストール
certbotはLet's Encryptのクライアントツールです。以下のコマンドでインストールします。
sudo apt update
sudo apt install certbot python3-certbot-nginx
2. 証明書の取得
certbotを使って、Nginxプラグインで証明書を取得します。以下のコマンドを実行します。
sudo certbot --nginx -d example.com -d www.example.com
-d オプションで証明書を取得するドメインを指定します。複数指定可能です。certbotは自動的にNginxの設定を編集し、HTTPS化します。
3. 自動更新の確認
Let's Encryptの証明書は90日間有効です。certbotは自動更新の仕組みを提供しています。以下のコマンドでテストできます。
sudo certbot renew --dry-run
問題がなければ、実際の更新はシステムのタイマー(systemd)で自動実行されます。確認するには:
sudo systemctl status certbot.timer
4. 手動でNginx設定を編集する場合
certbotの--nginxプラグインを使わずに、自分で設定ファイルを編集する方法もあります。
証明書の取得(Webroot方式)
sudo certbot certonly --webroot -w /var/www/html -d example.com
Nginx設定ファイルの編集
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# その他の設定
}
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
設定後、Nginxを再読み込みします。
sudo nginx -t
sudo systemctl reload nginx
5. セキュリティ強化(オプション)
より強固なSSL設定にするには、以下のような設定を追加します。
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
また、OCSP Staplingを有効にすることも推奨します。
*この記事はArch Linux/btrfs/LUKs環境で実際に検証した内容を基にしています。セキュリティ設定は環境によって異なるため、本番環境への適用前に必ずテスト環境で検証してください。*
まとめ
Let's Encryptとcertbotを使えば、Nginxに無料でSSL/TLS証明書を導入できます。証明書の自動更新も設定されるため、運用の手間はほとんどありません。この機会にぜひHTTPS化を進めてください。