← ブログ一覧に戻る
SSL/TLS2025-12-186 分

Let's Encryptの設定方法|無料SSL証明書の取得と自動更新

Let's Encryptで無料のSSL証明書を取得する方法を解説。Certbotを使った設定手順、自動更新の設定、トラブルシューティングまで詳しく紹介します。

#Let's Encrypt#SSL証明書#Certbot#HTTPS#無料SSL

Let's Encryptは、無料でSSL証明書を発行できる認証局です。Certbotを使えば、証明書の取得から自動更新まで簡単に設定できます。

Let's Encryptとは

Let's Encryptは、非営利団体ISRGが運営する無料の認証局(CA)です。

特徴

項目内容
費用無料
有効期間90日
自動更新対応
ワイルドカード対応(DNS認証が必要)
信頼性主要ブラウザすべてで信頼済み

有料SSL証明書との違い

項目Let's Encrypt有料SSL
費用無料年間数千円〜
有効期間90日1年
認証レベルDV(ドメイン認証)のみDV/OV/EV
サポートコミュニティベンダーサポート
保証なしあり(一部)

結論: 一般的なWebサイトにはLet's Encryptで十分です。

事前準備

必要なもの

  • サーバーへのSSH接続(root権限)
  • ドメインがサーバーのIPを指している
  • ポート80(HTTP)と443(HTTPS)が開放されている

対応環境

  • Nginx
  • Apache
  • その他(スタンドアロンモード)

Certbotのインストール

Ubuntu/Debian

sudo apt update
sudo apt install certbot

Nginxプラグイン:

sudo apt install python3-certbot-nginx

Apacheプラグイン:

sudo apt install python3-certbot-apache

CentOS/RHEL

sudo dnf install epel-release
sudo dnf install certbot

macOS(開発用)

brew install certbot

証明書の取得

Nginx環境

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

対話形式で以下を入力:

  1. メールアドレス(更新通知用)
  2. 利用規約への同意
  3. HTTPからHTTPSへのリダイレクト設定

Apache環境

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

スタンドアロンモード

Webサーバーを一時停止して取得:

sudo systemctl stop nginx
sudo certbot certonly --standalone -d example.com
sudo systemctl start nginx

DNSチャレンジ(ワイルドカード証明書)

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

指示に従ってDNSにTXTレコードを追加:

_acme-challenge.example.com TXT "ランダムな文字列"

証明書の確認

取得した証明書の一覧

sudo certbot certificates

証明書の場所

/etc/letsencrypt/live/example.com/
├── cert.pem       # 証明書
├── chain.pem      # 中間証明書
├── fullchain.pem  # 証明書 + 中間証明書
└── privkey.pem    # 秘密鍵

有効期限の確認

sudo openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -noout -dates

Webサーバーの設定

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;

    # 推奨SSL設定
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers off;

    # HSTS
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}

# HTTPからHTTPSへリダイレクト
server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

Apache設定例

<VirtualHost *:443>
    ServerName example.com

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    # 推奨SSL設定
    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
</VirtualHost>

# HTTPからHTTPSへリダイレクト
<VirtualHost *:80>
    ServerName example.com
    Redirect permanent / https://example.com/
</VirtualHost>

自動更新の設定

Let's Encryptの証明書は90日で期限切れになるため、自動更新が必須です。

更新テスト

sudo certbot renew --dry-run

Cronで自動更新

sudo crontab -e

以下を追加(毎日2回チェック):

0 0,12 * * * /usr/bin/certbot renew --quiet

Systemd Timerで自動更新

多くのディストリビューションではデフォルトで有効:

sudo systemctl status certbot.timer

トラブルシューティング

「ドメインの検証に失敗しました」

原因1: DNSが反映されていない

dig example.com A +short
# サーバーのIPが表示されるか確認

原因2: ファイアウォールでポート80がブロック

sudo ufw allow 80
sudo ufw allow 443

原因3: Webサーバーが起動していない

sudo systemctl status nginx

「レート制限に達しました」

Let's Encryptには以下の制限があります:

制限
証明書発行数50件/週/ドメイン
失敗回数5回/時間
重複証明書5件/週

対処法: 1週間待つか、ステージング環境でテスト

sudo certbot --staging -d example.com

「自動更新が失敗する」

原因1: Webサーバーの設定が変更された

sudo certbot renew --force-renewal

原因2: ポート80がブロックされている

HTTP-01チャレンジにはポート80が必要です。

複数ドメインの管理

SANs(Subject Alternative Names)

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

別々の証明書

sudo certbot --nginx -d site1.com
sudo certbot --nginx -d site2.com

証明書の削除

sudo certbot delete --cert-name example.com

監視の重要性

自動更新を設定していても、失敗することがあります。

よくある失敗原因:

  • サーバー設定の変更
  • DNSの変更
  • ファイアウォールの変更
  • ディスク容量不足

対策: RiskLensでSSL証明書の期限を監視し、期限が近づいたら通知を受け取りましょう。

まとめ

手順コマンド
インストールapt install certbot
証明書取得certbot --nginx -d example.com
更新テストcertbot renew --dry-run
証明書確認certbot certificates

Let's Encryptは無料で高品質なSSL証明書を提供しています。自動更新を正しく設定し、RiskLensで監視すれば、証明書の期限切れを防ぐことができます。

ドメインのセキュリティをチェック

この記事で学んだことを実践してみましょう。
無料でドメインのセキュリティリスクを診断できます。

無料で診断する