Let's EncryptとNginx(Certbot)

Certbotを使用してLet's Encryptの無料自動SSL/TLS証明書をNginxに設定する方法を解説。インストール、自動更新、ワイルドカード証明書、webrootモードに対応。

Setup

詳細な説明

Let's Encryptは、すべての主要ブラウザで信頼される無料の自動SSL/TLS証明書を提供します。Certbotクライアントと組み合わせることで、数分でNginxサーバーをHTTPSで保護し、証明書の更新ライフサイクル全体を自動化できます。

Certbotのインストール

# Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx

# CentOS/RHEL
sudo dnf install certbot python3-certbot-nginx

証明書の取得

NginxプラグインはNginx設定を自動的に変更し、必要なSSLディレクティブを追加します:

sudo certbot --nginx -d example.com -d www.example.com

Certbotはチャレンジファイルを一時的に配信してドメインの所有権を検証し、証明書をインストールしてHTTPからHTTPSへのリダイレクトを自動設定します。

Webrootモード

Nginx設定の完全な手動制御を維持したい場合は、webrootモードを使用します。まずACMEチャレンジ検証用のlocationブロックを追加します:

location /.well-known/acme-challenge/ {
    root /var/www/certbot;
}

次にNginx設定を変更せずに証明書をリクエストします:

sudo certbot certonly --webroot -w /var/www/certbot -d example.com

手動SSL設定

webrootモードで証明書を取得した後、Nginxで手動設定します:

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

自動更新

Let's Encrypt証明書は自動化を促進するため、設計上90日で失効します。Certbotはsystemdタイマーをインストールし、失効前に証明書を自動更新します:

# 更新が正常に動作するか確認
sudo certbot renew --dry-run

# 更新タイマーの状態を確認
sudo systemctl status certbot.timer

更新後フック

証明書更新後、Nginxは新しい証明書ファイルをメモリにロードするためにリロードが必要です:

sudo certbot renew --deploy-hook "systemctl reload nginx"

ワイルドカード証明書

すべてのサブドメインをカバーするワイルドカード証明書はHTTPではなくDNSベースの検証が必要です:

sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com" -d example.com

完全自動化されたワイルドカード更新には、certbot-dns-cloudflarecertbot-dns-route53 などのDNSプロバイダープラグインを使用し、手動介入なしで必要なDNS TXTレコードをプログラム的に作成します。

レート制限

Let's Encryptは登録ドメインあたり週50証明書のレート制限を適用しています。本番レート制限への意図しない到達を避けるため、初期テストと開発では必ずステージング環境(--staging フラグ)を使用してください。

ユースケース

新しいWebサイトのHTTPSを設定し、従来の認証局からの購入のコストと複雑さなしに、無料で自動更新されるSSL証明書を利用します。

Try It — Nginx Config Generator

フルツールを開く