Let’s EncryptとCertbotでHTTPS自動化する

WebサイトのHTTPS化は、セキュリティとSEOの両面で必須の施策です。Let’s EncryptとCertbotを活用すれば、無料で自動的にSSL/TLS証明書を取得・更新できます。この記事では、Nginx環境におけるCertbotの導入から自動更新設定まで、実務で即戦力となる手順を完全解説します。
—目次
- はじめに:HTTPS化の重要性とLet’s Encryptのメリット
- 前提条件:Certbot導入に必要な環境
- Certbotのインストール手順(Nginx環境)
- CertbotでSSL/TLS証明書を発行する
- NginxでHTTPS設定を反映する
- 証明書の自動更新を設定する
- Certbot利用時のトラブルと解決策
- まとめ:CertbotでHTTPS化を自動化しよう
- よくある質問(FAQ)
はじめに:HTTPS化の重要性とLet’s Encryptのメリット
WebサイトのHTTPS化は、2024年現在ではもはや当たり前の施策です。GoogleはHTTPSをSEOランキング要因の一つとしており、検索順位の向上に直結します。また、ユーザーとの通信を暗号化することで、フィッシングやデータ改ざんのリスクを低減できます。
Let’s Encryptは、非営利団体ISRG(Internet Security Research Group)が運営する無料のSSL/TLS証明書発行サービスです。2024年6月現在、全世界で2億件以上の証明書が発行されており(出典: Let’s Encrypt公式統計)、その信頼性は高く評価されています。
Certbotは、Let’s Encryptの証明書を自動的に取得・更新するためのツールです。手動で証明書を更新する手間を省き、運用コストを大幅に削減できます。本記事では、Nginx環境におけるCertbotの導入から自動更新設定まで、実務で即戦力となる手順を完全解説します。
—前提条件:Certbot導入に必要な環境
Certbotを利用する前に、以下の条件を満たしていることを確認してください。
1. サーバーOSとバージョン
- Ubuntu 20.04 LTS / 22.04 LTS
- Debian 10 / 11 / 12
- CentOS 7 / 8 / 9
- Rocky Linux 8 / 9
- AlmaLinux 8 / 9
※古いOSバージョンではCertbotがサポートされていない場合があります。公式ドキュメントで最新のサポート状況を確認してください。
2. Nginxのインストール
CertbotはNginxだけでなくApacheでも利用できますが、本記事ではNginx環境を前提とします。Nginxがインストールされていない場合は、以下のコマンドでインストールしてください。
Ubuntu/Debianの場合:
sudo apt update sudo apt install -y nginx
CentOS/Rocky Linux/AlmaLinuxの場合:
sudo dnf install -y epel-release sudo dnf install -y nginx
3. ドメインの取得とDN…
CertbotでSSL/TLS証明書を発行するには、所有しているドメインが必要です。また、ドメインのDNS設定で、サーバーのIPアドレスにAレコードが正しく設定されていることを確認してください。
4. ポート80と443の開放
CertbotはHTTP-01チャレンジと呼ばれる方法で証明書を発行します。このため、ポート80(HTTP)とポート443(HTTPS)が開放されている必要があります。ファイアウォールの設定を確認してください。
Ubuntu/Debianの場合(ufw):
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable
CentOS/Rocky Linux/AlmaLinuxの場合(firewalld):
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
Certbotのインストール手順(Nginx環境)
Certbotのインストール方法は、使用しているOSによって異なります。以下に主要なOSごとの手順を解説します。
1. Ubuntu/Deb…
Ubuntu/Debianでは、Certbotを公式リポジトリからインストールできます。
CertbotとNginx用プラグインをインストール:
sudo apt update sudo apt install -y certbot python3-certbot-nginx
インストールが完了したら、以下のコマンドでCertbotのバージョンを確認します。
certbot --version
2. CentOS/Roc…
CentOS系のOSでは、EPELリポジトリを有効化してからCertbotをインストールします。
EPELリポジトリを有効化:
sudo dnf install -y epel-release
CertbotとNginx用プラグインをインストール:
sudo dnf install -y certbot python3-certbot-nginx
インストールが完了したら、以下のコマンドでCertbotのバージョンを確認します。
certbot --version
3. Dockerを利用す…
Docker環境でCertbotを利用することも可能です。以下のコマンドでCertbotのコンテナを起動できます。
Certbotコンテナを起動:
docker run -it --rm --name certbot \ -v "/etc/letsencrypt:/etc/letsencrypt" \ -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \ certbot/certbot certonly --nginx
CertbotでSSL/TLS証明書を発行する
Certbotをインストールしたら、いよいよSSL/TLS証明書を発行します。Nginx環境では、CertbotのNginxプラグインを利用することで、自動的にNginxの設定を更新できます。
1. Certbotを実行する
以下のコマンドを実行して、Certbotで証明書を発行します。example.comは、実際のドメイン名に置き換えてください。
sudo certbot --nginx -d example.com -d www.example.com
このコマンドを実行すると、Certbotは以下の処理を行います。
- Let’s Encryptの認証局に対して、ドメインの所有権を証明する
- SSL/TLS証明書を発行する
- Nginxの設定ファイルを自動的に更新する
実行例:
Certbot実行時の出力例:
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator nginx, Installer nginx Obtaining a new certificate Performing the following challenges: http-01 challenge for example.com http-01 challenge for www.example.com Waiting for verification... Cleaning up challenges Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/example.com Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/example.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://example.com and https://www.example.com You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=example.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - -
2. 証明書の発行に成功し…
Certbotが正常に証明書を発行すると、以下のメッセージが表示されます。
Congratulations! You have successfully enabled https://example.com
また、以下のコマンドで発行された証明書を確認できます。
sudo certbot certificates
実行例:
発行された証明書の確認例:
Found the following certs:
Certificate Name: example.com
Domains: example.com www.example.com
Expiry Date: 2024-09-15 12:34:56+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/example.com/privkey.pem3. SSL Labsで証…
発行された証明書が正しく機能しているか、SSL Labsのテストサイトで確認しましょう。
テスト結果で「Certificate is trusted」と表示されていれば、証明書は正しく機能しています。
—NginxでHTTPS設定を反映する
Certbotを実行すると、Nginxの設定ファイルが自動的に更新されます。しかし、手動で設定を確認・調整することで、よりセキュアなHTTPS設定が可能になります。
1. Nginxの設定ファ…
Certbotが自動的に作成したNginxの設定ファイルは、以下のパスに保存されています。
/etc/nginx/sites-enabled/example.com
このファイルを開いて、HTTPS設定が正しく反映されているか確認します。
自動生成されたNginx設定例:
server {
server_name example.com www.example.com;
listen 443 ssl;
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 www.example.com;
return 301 https://$host$request_uri;
}2. セキュアなHTTPS…
Let’s Encryptの証明書は基本的な暗号化を提供しますが、よりセキュアな設定にするためには、以下のパラメータを追加します。
セキュアなHTTPS設定例:
server {
server_name example.com www.example.com;
listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# セキュリティ設定
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
# HTTP/2を有効化
http2 on;
# その他の設定...
}
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}3. Nginx設定を反映する
設定ファイルを更新したら、以下のコマンドでNginxを再起動します。
sudo nginx -t # 構文チェック sudo systemctl restart nginx
nginx -tコマンドで構文エラーがないことを確認してから、Nginxを再起動してください。
証明書の自動更新を設定する
Let’s Encryptの証明書は、90日間有効です。このため、自動的に証明書を更新する仕組みを設定することが重要です。Certbotには、自動更新機能が組み込まれています。
1. 自動更新が機能する仕組み
Certbotは、cronジョブまたはsystemdタイマーを利用して、定期的に証明書の更新を確認します。デフォルトでは、Certbotをインストールすると自動更新が有効になります。
以下のコマンドで、自動更新の設定を確認できます。
sudo certbot renew --dry-run
このコマンドを実行すると、Certbotは実際に更新処理を行わずに、更新プロセスが正常に動作するかテストします。
2. 自動更新の設定を確認する
Certbotの自動更新は、以下の場所に設定されています。
- Ubuntu/Debian:
/etc/cron.d/certbot - CentOS/Rocky Linux/AlmaLinux:
/etc/sysconfig/certbot
以下のコマンドで、自動更新の設定を確認できます。
sudo cat /etc/cron.d/certbot
実行例:
自動更新の設定例(Ubuntu/Debian):
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 0 */12 * * * root /usr/bin/certbot renew --quiet
この設定により、Certbotは1日2回(12時間ごと)証明書の更新を確認します。更新が必要な場合は、自動的に新しい証明書が発行されます。
3. 自動更新が正常に動作…
自動更新が正常に動作するか、以下のコマンドでテストします。
sudo certbot renew --dry-run
このコマンドを実行すると、以下のような出力が表示されます。
テスト実行時の出力例:
Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/example.com.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator nginx, Installer nginx Renewing an existing certificate Performing the following challenges: http-01 challenge for example.com http-01 challenge for www.example.com Waiting for verification... Cleaning up challenges - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - new certificate deployed with reload of nginx server; fullchain is /etc/letsencrypt/live/example.com/fullchain.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates below have not been saved.) Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/example.com/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Let's Encrypt
「Congratulations, all renewals succeeded.」と表示されていれば、自動更新は正常に動作します。
—Certbot利用時のトラブルと解決策
Certbotを利用する際に発生する可能性のあるトラブルと、その解決策を紹介します。
1. ポート80が開放され…
症状:Certbot実行時に「Connection refused」や「Timeout」エラーが発生する。
原因:ファイアウォールやルーターの設定で、ポート80(HTTP)がブロックされている可能性があります。
解決策:
- ファイアウォールの設定を確認し、ポート80を開放します。
- ルーターのポートフォワーディング設定を確認します。
2. ドメインのDNS設定…
症状:Certbot実行時に「DNS problem: NXDOMAIN looking up A for example.com」エラーが発生する。
原因:ドメインのDNS設定で、Aレコードが正しく設定されていない可能性があります。
解決策:
- ドメインのDNS設定を確認し、サーバーのIPアドレスにAレコードが正しく設定されていることを確認します。
- DNSの変更が反映されるまで数分から数時間かかる場合があります。
3. Nginxの設定ファ…
症状:Certbot実行時に「nginx: [emerg] unknown directive “ssl_certificate”」エラーが発生する。
原因:古いバージョンのNginxを使用しているか、SSL/TLS関連のモジュールが有効化されていない可能性があります。
解決策:
- Nginxのバージョンを確認し、古い場合はアップグレードします。
- 以下のコマンドでSSL/TLS関連のモジュールが有効化されていることを確認します。
nginx -V 2>&1 | grep -o with-http_ssl_module
出力が「with-http_ssl_module」であれば、SSL/TLSモジュールは有効化されています。
4. 証明書の更新に失敗する
症状:自動更新が正常に動作せず、証明書の更新に失敗する。
原因:ネットワークの問題や、Nginxの設定ファイルにエラーがある可能性があります。
解決策:
- 以下のコマンドで証明書の更新を手動で実行します。
sudo certbot renew
- 更新に失敗した場合は、以下のコマンドで詳細なエラーメッセージを確認します。
sudo certbot renew --force-renewal—
まとめ:CertbotでHTTPS化を自動化しよう
Let’s EncryptとCertbotを活用すれば、無料でHTTPS化を自動化できます。本記事で解説した手順を実践することで、以下のメリットを得られます。
- セキュリティの向上:ユーザーとの通信を暗号化し、データの改ざんや盗聴を防止します。
- SEO効果:GoogleはHTTPSをランキング要因の一つとしており、検索順位の向上が期待できます。
- 運用コストの削減:証明書の発行・更新を自動化することで、手動作業の手間を省けます。
- 信頼性の向上:ブラウザのアドレスバーに鍵マークが表示され、ユーザーに安心感を与えます。
Certbotを導入することで、これまで煩雑だったSSL/TLS証明書の管理が劇的に簡単になります。ぜひ本記事の手順を参考に、自分のWebサイトにCertbotを導入してみてください。
最後に、Certbotを利用する際の注意点をまとめます。
- ドメインの所有権:Certbotで証明書を発行するには、ドメインの所有権を証明する必要があります。
- ポート80と443の開放:HTTP-01チャレンジを利用するため、ポート80と443を開放しておく必要があります。
- 自動更新の確認:Certbotは自動更新をサポートしていますが、定期的に動作確認を行いましょう。
- セキュリティ設定:Let’s Encryptの証明書は基本的な暗号化を提供しますが、よりセキュアな設定にカスタマイズすることをおすすめします。
これらのポイントを押さえて、安全で信頼性の高いWebサイト運用を実現しましょう。
—よくある質問(FAQ)
Q1. Let’s Enc…
A1. はい、Let’s Encryptの証明書は完全に無料です。非営利団体ISRGが運営しており、商用利用でも無料で利用できます。ただし、ドメインの所有権を証明する必要があります。
Q2. 証明書の有効期限は…
A2. Let’s Encryptの証明書は、発行日から90日間有効です。このため、自動更新の設定が必須となります。
Q3. 複数のドメインをま…
A3. はい、Certbotを利用すれば、複数のドメインを1つの証明書でカバーできます。例えば、example.comとwww.example.comを同時にSSL化できます。
Q4. 自動更新が失敗した…
A4. 自動更新が失敗した場合は、手動で以下のコマンドを実行してください。
sudo certbot renew --force-renewal
また、以下のコマンドで詳細なエラーメッセージを確認できます。
sudo certbot renew --dry-run
Q5. Let’s Enc…
A5. はい、Let’s Encryptの証明書は個人・企業を問わず利用できます。ただし、ドメインの所有権を証明する必要があります。
Q6. Certbot以外…
A6. はい、Certbot以外にも、acme.shや dehydrated などのツールでLet’s Encryptを利用できます。ただし、CertbotはNginxやApacheとの連携が容易なため、多くのユーザーに利用されています。
Q7. 証明書の発行に失敗…
A7. 証明書の発行に失敗する主な原因は以下の通りです。
- ポート80が開放されていない
- ドメインのDNS設定が正しくない
- Nginxの設定ファイルにエラーがある
- ファイアウォールやルーターの設定で通信がブロックされている
Q8. Let’s Enc…
A8. いいえ、Let’s Encryptの証明書はDV(Domain Validation)証明書です。このため、企業名や組織名が証明書に表示されることはありません。EV証明書を利用したい場合は、有償の証明書を発行する必要があります。
Q9. Certbotを利…
A9. Certbotを利用する際は、以下のセキュリティ設定に注意してください。
- Nginxの設定ファイルで、セキュアな暗号スイートを利用する
- HTTPからHTTPSへのリダイレクトを設定する
- HSTS(HTTP Strict Transport Security)を有効化する
- 定期的に証明書の更新を確認する
※セキュリティ設定は自己責任で実施して
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。




